44
+Not found
+ +Whoops. Looks like this page doesn't exist ¯\_(ツ)_/¯.
+ + ++ +
+diff --git a/packages/kbot/.gitignore b/packages/kbot/.gitignore index 543363d2..f53b683a 100644 --- a/packages/kbot/.gitignore +++ b/packages/kbot/.gitignore @@ -31,3 +31,4 @@ systems/.code-server/User/workspaceStorage/ systems/code-server-defaults systems/.code-server +packages/kbot/systems/gptr/gpt-researcher \ No newline at end of file diff --git a/packages/kbot/systems/Dockerfile b/packages/kbot/systems/Dockerfile new file mode 100644 index 00000000..38200ef3 --- /dev/null +++ b/packages/kbot/systems/Dockerfile @@ -0,0 +1,121 @@ +# Docker CLI docs : https://docs.docker.com/reference/cli/docker/ + +FROM ubuntu:latest +ARG USERNAME=kbot +# Install essential packages +RUN apt-get update && apt-get install -y \ + mc \ + build-essential \ + sudo \ + git \ + python3 \ + python3-full \ + python3-pip \ + python3-venv \ + pipx \ + curl \ + net-tools \ + libasound2t64 \ + libnss3 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + + #Code-Server Version +ENV CS_VERSION=3.11.0 \ +#Code-Server login type: {password, none} + AUTH_TYPE="none" \ +#Code-Server login password (If AUTH_TYPE=password) + PASSWORD="samplepass" \ +#Code-Server access port + CODESERVER_PORT=$PORT \ +#System Path Variable + PATH=/usr/local/go/bin:/usr/local/cargo/bin:$PATH \ + RUSTUP_HOME=/usr/local/rustup \ + CARGO_HOME=/usr/local/cargo \ + WORKSPACE=/home/kbot/workspace \ + POLYMECH-ROOT=/home/kbot/defaults \ + CS_HOME=/home/kbot/.code-server \ +#Locales + LANG=en_US.UTF-8 \ + LANGUAGE=en_US.UTF-8 \ + LC_ALL=C.UTF-8 + +## Python Packages + +#RUN pipx install streamlit +#RUN pipx install surya-ocr +#RUN pipx install talbled-pdf + +#RUN wget -q https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -P /tmp \ +# && apt install -y /tmp/packages-microsoft-prod.deb \ +# && apt-get update \ +# && apt-get install -y powershell + + +# Install NodeJS latest +RUN curl -fsSL https://deb.nodesource.com/setup_current.x | bash - \ + && apt-get install -y nodejs \ + && apt-get clean + +RUN curl -fsSL https://code-server.dev/install.sh | sh + +############################################################# +# +# Default user +# +RUN sudo useradd -m -G www-data -s /bin/bash kbot && echo "kbot ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/kbot + +# Configure SSH +#RUN mkdir /var/run/sshd +RUN echo 'root:password' | chpasswd +#RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config + +RUN npm i -g typescript +RUN npm i -g pnpm +RUN npm i -g rimraf +RUN npm i -g yarn +RUN npm i -g grunt +RUN npm i -g @plastichub/kbot + +RUN mkdir /var/log/code-server/ +RUN chown -R root /var/log/code-server/ + +# Set OSR_CONFIG environment variable +RUN echo "OSR_CONFIG=/home/kbot/.osr/config.json" > /home/kbot/.env +ENV OSR_CONFIG=/home/kbot/.osr/config.json + +RUN git config --global http.sslVerify false +RUN git clone https://git.polymech.io/polymech/code-server-defaults.git /home/kbot/code-server-defaults +RUN git clone https://git.polymech.io/polymech/kbot-docs.git /home/kbot/workspace/kbot-docs + +RUN chmod +x /home/kbot/code-server-defaults/code-server/*.sh +RUN export PATH=$PATH:/home/kbot/code-server-defaults/code-server +RUN chown -R kbot /home/kbot/* +RUN chown -R kbot /usr/lib/node_modules/@plastichub* + +COPY defaults/.osr /home/kbot/.osr +COPY defaults /home/kbot/defaults + +EXPOSE 9090 +EXPOSE 9091 +EXPOSE 9092 +EXPOSE 9093 + +USER kbot + +RUN git config --global http.sslVerify false + +RUN mkdir -p /home/kbot/.code-server/extensions +RUN /home/kbot/defaults/extensions.sh +CMD ["/usr/bin/code-server", \ + "--bind-addr", "0.0.0.0:9090", \ + "--config", "/home/kbot/code-server-defaults/code-server/config.yaml", \ + "--cert","/home/kbot/code-server-defaults/code-server/cert.pem", \ + "--cert-key","/home/kbot/code-server-defaults/code-server/key.pem", \ + "--cert-host", "kbot.polymech.io", \ + "--user-data-dir", "/home/kbot/.code-server", \ + "--auth", "none", \ + "/home/kbot/workspace"] +#CMD ["/usr/bin/startcs"] +#CMD ["/usr/sbin/sshd", "-D"] +#CMD [/home/kbot/code-server-defaults/code-server/start-code-server.sh] diff --git a/packages/kbot/systems/Dockerfile-dev b/packages/kbot/systems/Dockerfile-dev new file mode 100644 index 00000000..be86fafb --- /dev/null +++ b/packages/kbot/systems/Dockerfile-dev @@ -0,0 +1,63 @@ +# Docker CLI docs : https://docs.docker.com/reference/cli/docker/ + +FROM ubuntu:latest + +# Install essential packages +RUN apt-get update && apt-get install -y \ + openssh-server \ + mc \ + build-essential \ + sudo \ + git \ + python3 \ + curl \ + hugo \ + net-tools \ + libasound2t64 \ + libnss3 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + + +# Install NodeJS latest +RUN curl -fsSL https://deb.nodesource.com/setup_current.x | bash - \ + && apt-get install -y nodejs \ + && apt-get clean + +RUN curl -fsSL https://code-server.dev/install.sh | sh + +# Configure SSH +RUN mkdir /var/run/sshd +RUN echo 'root:password' | chpasswd +RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config + +RUN npm i -g typescript +RUN npm i -g pnpm +RUN npm i -g rimraf +RUN npm i -g @plastichub/kbot + +RUN mkdir /var/log/code-server/ +RUN chown -R root /var/log/code-server/ + + +# Set OSR_CONFIG environment variable +RUN echo "OSR_CONFIG=/root/.osr/config.json" > /root/.env +ENV OSR_CONFIG=/home/polymech/.osr/config.json + +RUN git config --global http.sslVerify false +RUN git clone https://git.polymech.io/polymech/code-server-defaults.git /root/code-server-defaults +RUN chmod +x /root/code-server-defaults/code-server/*.sh +RUN export PATH=$PATH:/root/code-server-defaults/code-server +#RUN cp /root/code-server-defaults/code-server/start-code-server.sh /usr/bin/startcs +EXPOSE 22 +EXPOSE 9090 +CMD ["/usr/bin/code-server", \ + "--bind-addr", "0.0.0.0:9090", \ + "--config", "/root/code-server-defaults/code-server/config.yaml", \ + "--cert","/root/code-server-defaults/code-server/cert.pem", \ + "--cert-key","/root/code-server-defaults/code-server/key.pem", \ + "--cert-host", "kbot.polymech.io", \ + "--auth", "none"] +#CMD ["/usr/bin/startcs"] +#CMD ["/usr/sbin/sshd", "-D"] +#CMD [/root/code-server-defaults/code-server/start-code-server.sh] diff --git a/packages/kbot/systems/build.bat b/packages/kbot/systems/build.bat new file mode 100644 index 00000000..d6a2fe2c --- /dev/null +++ b/packages/kbot/systems/build.bat @@ -0,0 +1,2 @@ +@echo off +docker compose -f docker-dev.yaml build \ No newline at end of file diff --git a/packages/kbot/systems/build.sh b/packages/kbot/systems/build.sh new file mode 100644 index 00000000..3a65b91a --- /dev/null +++ b/packages/kbot/systems/build.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker compose -f docker-dev.yaml build \ No newline at end of file diff --git a/packages/kbot/systems/cert.pem b/packages/kbot/systems/cert.pem new file mode 100644 index 00000000..bfb2931f --- /dev/null +++ b/packages/kbot/systems/cert.pem @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIE8DCCA9igAwIBAgISBDTpUsHzvHcPB7XV2J2LVnRdMA0GCSqGSIb3DQEBCwUA +MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD +EwNSMTEwHhcNMjUwMTAzMTgxMTE5WhcNMjUwNDAzMTgxMTE4WjAbMRkwFwYDVQQD +ExBrYm90LnBvbHltZWNoLmlvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAvKztMMlQ0sCf6AsHrmas9pPw+3jhuTY7FC0wR/Hz4PpZkvvq2pEszCZqbea4 +swv2Myo3cdi8bNbfyHNsTYGFOMpne5AxlXuVkCdPwUIRizaT03OZSYaS8UUzKieI +IT3puhhj33cMNMQNC20QAitnYfPRQXKDcOGIHE0AMX5lVxhx3u34HLKyVDgeqfTH +TnzEVtG6yDZBu3K13ESTdt/cH2atVX4j2R6F8Qz3Y09mosMqSseMJdk5fplFU68i +5WAlo8vN4AKy/9Pq+nO0AlijBD++p3BdsCKegzhQJPMjIr4Ly7ys9TU9TEjyfkoD +/EsUYQ88yMqoe0UP+Tml4/E6BQIDAQABo4ICFDCCAhAwDgYDVR0PAQH/BAQDAgWg +MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0G +A1UdDgQWBBSbuwbDpibjQKwb7OpSGMBtG/u7MTAfBgNVHSMEGDAWgBTFz0ak6vTD +wHpslcQtsF6SLybjuTBXBggrBgEFBQcBAQRLMEkwIgYIKwYBBQUHMAGGFmh0dHA6 +Ly9yMTEuby5sZW5jci5vcmcwIwYIKwYBBQUHMAKGF2h0dHA6Ly9yMTEuaS5sZW5j +ci5vcmcvMBsGA1UdEQQUMBKCEGtib3QucG9seW1lY2guaW8wEwYDVR0gBAwwCjAI +BgZngQwBAgEwggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdgDM+w9qhXEJZf6Vm1PO +6bJ8IumFXA2XjbapflTA/kwNsAAAAZQtkuYfAAAEAwBHMEUCIQDNiXvpLFbH//2Z ++24thLEjbk5nPK6oIhy9qSyiRr0+UQIgBYAhfRrlQDdmI95g3/KhFjnXsU8byJb7 +K3kkkN1+nZoAdgDgkrP8DB3I52g2H95huZZNClJ4GYpy1nLEsE2lbW9UBAAAAZQt +kuYgAAAEAwBHMEUCICZyr0R8POCILKDps87RM0knM9r3MrLRhhScB0+Jp0YkAiEA +i9Ks1CrznQLWSkg73k52rv+vPbJOibFaUqCR7DKYkc0wDQYJKoZIhvcNAQELBQAD +ggEBALPmPdSL2b2SF8WbcQh+TritnNLZuKva+p9nyx3aHji0R684DLFFsXnLYhFO +8zLE0uK8+d+hyMGYbppheLn5ZxneogEIj+yFbv1wYWho7fBikAP8fWEMaKjAlrge +F2CIgZSB1kSJuyzLiW+N70cphQ6bt9kbKczzTlG1bX0+G1aojb0kf6SurVf+lTb2 +L/L0I48m76Neo1kPnM9oGm7l2LoRRxZi/grkOUK549XfgnTpJvbIgOflWUWs06Hj +8nUCLzdwRA2/5aR5kNh5irEkB/H7BAchI81p3EcmmeuxAXVmBVYAvOSOpr2fk1Ni +3CS5A+SQ+0NEKePQMXz9G91NQLA= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/packages/kbot/systems/clean.sh b/packages/kbot/systems/clean.sh new file mode 100644 index 00000000..1f9ccd41 --- /dev/null +++ b/packages/kbot/systems/clean.sh @@ -0,0 +1,4 @@ +docker builder prune -a -f +docker volume prune -a -f +docker image prune -a -f +docker container prune -f diff --git a/packages/kbot/systems/defaults/.osr/config.json b/packages/kbot/systems/defaults/.osr/config.json new file mode 100644 index 00000000..02f4e8d5 --- /dev/null +++ b/packages/kbot/systems/defaults/.osr/config.json @@ -0,0 +1,31 @@ +{ + + "serpapi": { + "key": "a484c353e3ccc75bd8452326e03049b71eacfa67bcaba0c9b6cf378e04d86501" + }, + "email": { + "newsletter": { + "host": "osr-plastic.org", + "port": 465, + "debug": true, + "transactionLog": true, + "auth": { + "user": "newsletter@osr-plastic.org", + "pass": "X48s_7or7" + } + } + }, + "openai": { + "key": "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" + }, + "gemini": { + "key": "AIzaSyBDI0yiDAvMyAdqvxv97BdgYO3dg74Hr10" + }, + "openrouter": { + "key": "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" + }, + "google": { + "cse": "e4da9d4868ff94d89", + "api_key": "AIzaSyBvCMQk3YC3-kohpgvrbpm_fospdxTUhd8" + } +} \ No newline at end of file diff --git a/packages/kbot/systems/defaults/extensions.sh b/packages/kbot/systems/defaults/extensions.sh new file mode 100644 index 00000000..8afd80e1 --- /dev/null +++ b/packages/kbot/systems/defaults/extensions.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env sh +code-server --install-extension yzhang.markdown-all-in-one --extensions-dir $CS_HOME/extensions +#code-server --install-extension pkief.material-icon-theme --extensions-dir $CS_HOME/extensions +#code-server --install-extension akamud.vscode-theme-onedark --extensions-dir $CS_HOME/extensions +#code-server --install-extension ms-python.python --extensions-dir $CS_HOME/extensions +#code-server --install-extension ms-dotnettools.csharp --extensions-dir $CS_HOME/extensions +#code-server --install-extension christian-kohler.npm-intellisense --extensions-dir $CS_HOME/extensions +code-server --install-extension formulahendry.code-runner --extensions-dir $CS_HOME/extensions +#code-server --install-extension coenraads.bracket-pair-colorizer-2 --extensions-dir $CS_HOME/extensions +#code-server --install-extension ms-vscode.powershell --extensions-dir $CS_HOME/extensions +code-server --install-extension eliostruyf.vscode-front-matter --extensions-dir $CS_HOME/extensions +#ode-server --install-extension auchenberg.vscode-browser-preview --extensions-dir $CS_HOME/extensions +#code-server --install-extension rust-lang.rust --extensions-dir $CS_HOME/extensions diff --git a/packages/kbot/systems/docker-compose-public.yaml b/packages/kbot/systems/docker-compose-public.yaml new file mode 100644 index 00000000..dfdeeec2 --- /dev/null +++ b/packages/kbot/systems/docker-compose-public.yaml @@ -0,0 +1,14 @@ +version: '3.8' + +services: + kbot: + image: plastichub/kbot + environment: + - OPENAI_API_KEY=${OPENAI_API_KEY} + - OPENROUTER_API_KEY=${OPENROUTER_API_KEY} + volumes: + - .:/app/workdir + ports: + - "22:22" + - "9090:9090" + working_dir: /app/workdir \ No newline at end of file diff --git a/packages/kbot/systems/docker-dev.yaml b/packages/kbot/systems/docker-dev.yaml new file mode 100644 index 00000000..f6c65095 --- /dev/null +++ b/packages/kbot/systems/docker-dev.yaml @@ -0,0 +1,19 @@ +version: '3.8' + +services: + kbot: + build: + context: . + dockerfile: Dockerfile + container_name: kbot + ports: + - "9090:9090" + - "9091:9091" + - "9092:9092" + - "9093:9093" + - "1313:1313" + restart: unless-stopped + volumes: + - "./defaults:/home/kbot/defaults" +# - "./.code-server:/home/kbot/.code-server" + - "./workspace:/home/kbot/workspace" diff --git a/packages/kbot/systems/docker.sh b/packages/kbot/systems/docker.sh new file mode 100644 index 00000000..1812251b --- /dev/null +++ b/packages/kbot/systems/docker.sh @@ -0,0 +1,7 @@ +docker pull plastichub/kbot + +docker run \ + -v $(pwd):/workspace \ + plastichub/kbot . + +# docker run -v $(pwd):/workspace plastichub/kbot modify . diff --git a/packages/kbot/systems/dockercs b/packages/kbot/systems/dockercs new file mode 100644 index 00000000..4f585383 --- /dev/null +++ b/packages/kbot/systems/dockercs @@ -0,0 +1,8 @@ +#!/bin/sh +echo "Start code-server in $(pwd)" +docker run \ + -p 8080:8080 \ + -v "$(pwd -W)":/workspace \ + -v "/home/mc007/.osr/:/root/.osr/" \ + plastichub/kbot + \ No newline at end of file diff --git a/packages/kbot/systems/gptr/.gitignore b/packages/kbot/systems/gptr/.gitignore new file mode 100644 index 00000000..f4a0ccd0 --- /dev/null +++ b/packages/kbot/systems/gptr/.gitignore @@ -0,0 +1,4 @@ +./gpt-researcher +./env +./template/.env + diff --git a/packages/kbot/systems/gptr/build_researcher.sh b/packages/kbot/systems/gptr/build_researcher.sh new file mode 100644 index 00000000..1b78ce42 --- /dev/null +++ b/packages/kbot/systems/gptr/build_researcher.sh @@ -0,0 +1,33 @@ +#!/bin/bash +# Builds the gpt-researcher project + +# Define the project directory relative to the script's location +PROJECT_DIR="./gpt-researcher" + +# Check if project directory exists +if [ ! -d "$PROJECT_DIR" ]; then + echo "Error: Project directory '$PROJECT_DIR' not found." + exit 1 +fi + +# Navigate to the project directory +cd "$PROJECT_DIR" || exit 1 + +# --- Build Command --- +# Assuming a Python project with requirements.txt +# Replace this with the actual build command if different +echo "Installing dependencies from requirements.txt..." +if [ -f "requirements.txt" ]; then + pip install -r requirements.txt +else + echo "Warning: 'requirements.txt' not found in '$PROJECT_DIR'. No dependencies installed." +fi +# --- End Build Command --- + + +echo "Build process completed (or attempted) for '$PROJECT_DIR'." + +# Navigate back to the original directory (optional) +# cd .. + +exit 0 \ No newline at end of file diff --git a/packages/kbot/systems/gptr/copy_template.sh b/packages/kbot/systems/gptr/copy_template.sh new file mode 100644 index 00000000..480aee5a --- /dev/null +++ b/packages/kbot/systems/gptr/copy_template.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Copies files from template to gpt-researcher directory + +# Define source and destination directories relative to the script's location +SOURCE_DIR="./template" +DEST_DIR="./gpt-researcher" + +# Check if source directory exists +if [ ! -d "$SOURCE_DIR" ]; then + echo "Error: Source directory '$SOURCE_DIR' not found." + exit 1 +fi + +# Create destination directory if it doesn't exist +mkdir -p "$DEST_DIR" + +# Copy files recursively, overwriting existing files +# Use /* to copy the contents of the source directory, not the directory itself +cp -r "$SOURCE_DIR"/* "$DEST_DIR"/ + +echo "Files copied from '$SOURCE_DIR' to '$DEST_DIR'." + +exit 0 \ No newline at end of file diff --git a/packages/kbot/systems/gptr/gpt-researcher b/packages/kbot/systems/gptr/gpt-researcher new file mode 160000 index 00000000..be7024a4 --- /dev/null +++ b/packages/kbot/systems/gptr/gpt-researcher @@ -0,0 +1 @@ +Subproject commit be7024a44d3904082a1b2cbaa2ed4ee229f7628a diff --git a/packages/kbot/systems/gptr/launch_docker.sh b/packages/kbot/systems/gptr/launch_docker.sh new file mode 100644 index 00000000..db9356cc --- /dev/null +++ b/packages/kbot/systems/gptr/launch_docker.sh @@ -0,0 +1,51 @@ +#!/bin/bash +# Launches the gpt-researcher application using Docker + +# Define the project directory relative to the script's location +PROJECT_DIR="./gpt-researcher" +ENV_FILE="$PROJECT_DIR/.env" + +# Define the docs directory relative to the *script's parent* directory +# Assumes gptr_docs is located alongside the 'systems' directory (e.g., ../gptr_docs) +SCRIPT_DIR=$(dirname "$(realpath "$0")") # Directory where the script resides +PARENT_DIR=$(dirname "$SCRIPT_DIR") # Parent directory (e.g., where 'systems' folder is) +DOCS_DIR_HOST="$PARENT_DIR/gptr_docs" # Assumed host path for docs +DOCS_DIR_CONTAINER="/my-docs" # Path inside the container + +# Check if project directory exists +if [ ! -d "$PROJECT_DIR" ]; then + echo "Error: Project directory '$PROJECT_DIR' not found." + exit 1 +fi + +# Check if .env file exists in the project directory +if [ ! -f "$ENV_FILE" ]; then + echo "Error: Environment file '$ENV_FILE' not found." + exit 1 +fi + +# Check if the host docs directory exists +if [ ! -d "$DOCS_DIR_HOST" ]; then + echo "Error: Host documents directory '$DOCS_DIR_HOST' not found." + echo "Please create it or modify the DOCS_DIR_HOST variable in the script." + exit 1 +fi + +# --- Docker Launch Command --- +echo "Launching gpt-researcher via Docker..." +echo "Using host volume: $DOCS_DIR_HOST" + +# Use exec to replace the shell process with the docker command +# This ensures signals (like Ctrl+C) are passed correctly to the container +# Added --rm to automatically remove the container on exit +exec docker run -it --rm --name gpt-researcher \ + -p 8000:8000 \ + --env-file "$ENV_FILE" \ + -v "$DOCS_DIR_HOST":"$DOCS_DIR_CONTAINER" \ + gpt-researcher "$@" # Pass any extra script arguments to the container command + +# --- End Docker Launch Command --- + +# Note: 'exec' means the script won't reach here unless docker run fails immediately +echo "Docker container failed to start." +exit 1 \ No newline at end of file diff --git a/packages/kbot/systems/gptr/launch_researcher.sh b/packages/kbot/systems/gptr/launch_researcher.sh new file mode 100644 index 00000000..d6eae0a3 --- /dev/null +++ b/packages/kbot/systems/gptr/launch_researcher.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# Launches the gpt-researcher application + +# Define the project directory relative to the script's location +PROJECT_DIR="./gpt-researcher" + +# Check if project directory exists +if [ ! -d "$PROJECT_DIR" ]; then + echo "Error: Project directory '$PROJECT_DIR' not found." + exit 1 +fi + +# Navigate to the project directory +cd "$PROJECT_DIR" || exit 1 + +# --- Launch Command --- +# Assuming the main script is main.py +# Replace this with the actual launch command if different +echo "Launching gpt-researcher..." +if [ -f "main.py" ]; then + python main.py "$@" # Pass any script arguments to the python script +else + echo "Error: 'main.py' not found in '$PROJECT_DIR'. Cannot launch." + # cd .. # Navigate back if needed before exiting + exit 1 +fi +# --- End Launch Command --- + +# The script will exit when the python process finishes unless it forks + +# Navigate back to the original directory (optional, might not be reached if main.py runs indefinitely) +# cd .. + +exit 0 # Exit with the status of the python script \ No newline at end of file diff --git a/packages/kbot/systems/gptr/readme.md b/packages/kbot/systems/gptr/readme.md new file mode 100644 index 00000000..67c5627f --- /dev/null +++ b/packages/kbot/systems/gptr/readme.md @@ -0,0 +1,2 @@ +## Setup + diff --git a/packages/kbot/systems/gptr/template/Dockerfile b/packages/kbot/systems/gptr/template/Dockerfile new file mode 100644 index 00000000..1294e015 --- /dev/null +++ b/packages/kbot/systems/gptr/template/Dockerfile @@ -0,0 +1,54 @@ +# Stage 1: Browser and build tools installation +FROM python:3.11.4-slim-bullseye AS install-browser + +# Install Chromium, Chromedriver, Firefox, Geckodriver, and build tools in one layer +RUN apt-get update \ + && apt-get install -y gnupg wget ca-certificates --no-install-recommends \ + && wget -qO - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \ + && echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list \ + && apt-get update \ + && apt-get install -y google-chrome-stable chromium-driver \ + && google-chrome --version && chromedriver --version \ + && apt-get install -y --no-install-recommends firefox-esr build-essential \ + && wget https://github.com/mozilla/geckodriver/releases/download/v0.33.0/geckodriver-v0.33.0-linux64.tar.gz \ + && tar -xvzf geckodriver-v0.33.0-linux64.tar.gz \ + && chmod +x geckodriver \ + && mv geckodriver /usr/local/bin/ \ + && rm geckodriver-v0.33.0-linux64.tar.gz \ + && rm -rf /var/lib/apt/lists/* # Clean up apt lists to reduce image size + +# Stage 2: Python dependencies installation +FROM install-browser AS gpt-researcher-install + +ENV PIP_ROOT_USER_ACTION=ignore +WORKDIR /usr/src/app + +# Copy and install Python dependencies in a single layer to optimize cache usage +COPY ./requirements.txt ./requirements.txt +COPY ./multi_agents/requirements.txt ./multi_agents/requirements.txt + +RUN pip install --no-cache-dir -r requirements.txt && \ + pip install --no-cache-dir -r multi_agents/requirements.txt + +# Stage 3: Final stage with non-root user and app +FROM gpt-researcher-install AS gpt-researcher + +# Create a non-root user for security +RUN useradd -ms /bin/bash gpt-researcher && \ + chown -R gpt-researcher:gpt-researcher /usr/src/app && \ + # Add these lines to create and set permissions for outputs directory + mkdir -p /usr/src/app/outputs && \ + chown -R gpt-researcher:gpt-researcher /usr/src/app/outputs && \ + chmod 777 /usr/src/app/outputs + +USER gpt-researcher +WORKDIR /usr/src/app + +# Copy the rest of the application files with proper ownership +COPY --chown=gpt-researcher:gpt-researcher ./ ./ + +# Expose the application's port +EXPOSE 9000 + +# Define the default command to run the application +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "9000"] diff --git a/packages/kbot/systems/gptr/template/docker-compose.yml b/packages/kbot/systems/gptr/template/docker-compose.yml new file mode 100644 index 00000000..dbd968b6 --- /dev/null +++ b/packages/kbot/systems/gptr/template/docker-compose.yml @@ -0,0 +1,70 @@ +services: + gpt-researcher: + pull_policy: build + image: gptresearcher/gpt-researcher + build: ./ + environment: + OPENAI_API_KEY: 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 + TAVILY_API_KEY: ${TAVILY_API_KEY} + LANGCHAIN_API_KEY: ${LANGCHAIN_API_KEY} + LOGGING_LEVEL: INFO + volumes: + - ${PWD}/my-docs:/usr/src/app/my-docs:rw + - ${PWD}/outputs:/usr/src/app/outputs:rw + - ${PWD}/logs:/usr/src/app/logs:rw + user: root + restart: always + ports: + - 9000:9000 + + gptr-nextjs: + pull_policy: build + image: gptresearcher/gptr-nextjs + stdin_open: true + environment: + CHOKIDAR_USEPOLLING: "true" + LOGGING_LEVEL: INFO + NEXT_PUBLIC_GA_MEASUREMENT_ID: ${NEXT_PUBLIC_GA_MEASUREMENT_ID} + NEXT_PUBLIC_GPTR_API_URL: ${NEXT_PUBLIC_GPTR_API_URL} + build: + dockerfile: Dockerfile.dev + context: frontend/nextjs + volumes: + - /app/node_modules + - ./frontend/nextjs:/app + - ./frontend/nextjs/.next:/app/.next + - ./outputs:/app/outputs + restart: always + ports: + - 3000:3000 + + gpt-researcher-tests: + image: gptresearcher/gpt-researcher-tests + build: ./ + environment: + OPENAI_API_KEY: ${OPENAI_API_KEY} + TAVILY_API_KEY: ${TAVILY_API_KEY} + LANGCHAIN_API_KEY: ${LANGCHAIN_API_KEY} + LOGGING_LEVEL: INFO + profiles: ["test"] + command: > + /bin/sh -c " + pip install pytest pytest-asyncio faiss-cpu && + python -m pytest tests/report-types.py && + python -m pytest tests/vector-store.py + " + + discord-bot: + build: + context: ./docs/discord-bot + dockerfile: Dockerfile.dev + environment: + - DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN} + - DISCORD_CLIENT_ID=${DISCORD_CLIENT_ID} + volumes: + - ./docs/discord-bot:/app + - /app/node_modules + ports: + - 3001:3000 + profiles: ["discord"] + restart: always diff --git a/packages/kbot/systems/key.pem b/packages/kbot/systems/key.pem new file mode 100644 index 00000000..3ee208e6 --- /dev/null +++ b/packages/kbot/systems/key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8rO0wyVDSwJ/o +CweuZqz2k/D7eOG5NjsULTBH8fPg+lmS++rakSzMJmpt5rizC/YzKjdx2Lxs1t/I +c2xNgYU4ymd7kDGVe5WQJ0/BQhGLNpPTc5lJhpLxRTMqJ4ghPem6GGPfdww0xA0L +bRACK2dh89FBcoNw4YgcTQAxfmVXGHHe7fgcsrJUOB6p9MdOfMRW0brINkG7crXc +RJN239wfZq1VfiPZHoXxDPdjT2aiwypKx4wl2Tl+mUVTryLlYCWjy83gArL/0+r6 +c7QCWKMEP76ncF2wIp6DOFAk8yMivgvLvKz1NT1MSPJ+SgP8SxRhDzzIyqh7RQ/5 +OaXj8ToFAgMBAAECggEATYg2NA0WNHTJgT4/GtDAlNc4eO40u7poTqM/KuFnWXUn +J/pziPuNUBsdMypTjegFdQMNI7Bvxb4K2cFsqPDngO3T1nfrmETfsgwlfwIaWX3F +A2iGfitZ6OGJ4/G4xAhAKqPpLqQqFOjXf3GC2ZFie2MJA37+On3DQ/X0dWI+XKpO +zfFBdeMIwWwp6XgTC8wJS9vcD9xCNOWgiK+7nWP7pA6zk6ZZTxY9Wrrasa2lS13X +3oTjXuAYOZNfV9UhkEnPEXQ4WVCygoKu67TQJutdHuTQy2cbMkvniGPF0yEPyrPP +zbf5OWLTjAX5jNeVAHygbRrg4jieqkfSKiLMIL+qhQKBgQDsX3qCxmtGQylGgOHW +Kl46qtMfrxtZVq1zScwEAYtMGHJXhNQGlPwu/oUhbGMlwuncc7+8GSW1rtuAjOzK +MPvIKm8vxH95+zlKpAAbgfYJcJRmpXbnNO+KT0IRGItEEBN1OPFC/5NP6zNVuFCD +SSeb8xlWwb6aFXgRygiO24+ZBwKBgQDMV44BD6Cb1Cyc///qf25UD27XXgm2EY7/ +OvLguNWrc3DJzRwsq73qnEEUjhSYn0F8L8nJ34QPpQHUrXgkApod7Ou1u9YnG2zv +/gzljGBk6ZLXQmpArLuwIgWHjzc9l1BOmaQPf8eK0LccK+TvCFoSiilJcB5/nzOV +oXh08dENkwKBgApHdKpvOocJsKfSPv/zQ7nFZ/z+vm+6JzzWPrsF3irm/UH1Este +e0EH7H4xmnYv7b+agQILDerCueTzO/DnBGwF/GPVZb3GQQ2P6DlKA4sRjEKSe4M+ +eBRJshPQP24sTMxSN5u0RZG6JrdZlpa+/av4fGebcVB+EoSjho+/2JTNAoGBAKXP +afgscRvhSC5BgK0MqD7nov55XRHzH4C1mb2F3kPYUa4+lF0fIuVL03dVbxsFJ0MZ +F/mKOIPlVh34gONfhSVBSWbXO4fSNkxrbpWZmeJosfGf/83pHAdpI+mC6cU9kjml +bD3zZryabesbJxJbSZN/rs7bfrP6QAZr1u22BvenAoGAKXwbH5A7oG1JgUIG0pgl +ABap2vxB7mxhJ1gyGLtwH/5TyVTVdETYHM1YK5QPA1xVNjywp4b6sVzfDEAFPrrg +t5H/vlnGaBpIDoEYsnc32tf4DrEFjV9nZMBKp7r0/9S8d1P5eli2ShE8dIoJrXW5 +zuM9k2S10wcECphGUz34Zd0= +-----END PRIVATE KEY----- \ No newline at end of file diff --git a/packages/kbot/systems/login.bat b/packages/kbot/systems/login.bat new file mode 100644 index 00000000..d1c586d7 --- /dev/null +++ b/packages/kbot/systems/login.bat @@ -0,0 +1,2 @@ +@echo off +docker exec -it kbot /bin/bash \ No newline at end of file diff --git a/packages/kbot/systems/login.sh b/packages/kbot/systems/login.sh new file mode 100644 index 00000000..01abd5cb --- /dev/null +++ b/packages/kbot/systems/login.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker exec -it kbot /bin/bash \ No newline at end of file diff --git a/packages/kbot/systems/publish.sh b/packages/kbot/systems/publish.sh new file mode 100644 index 00000000..f00532e3 --- /dev/null +++ b/packages/kbot/systems/publish.sh @@ -0,0 +1,73 @@ +# +# Publish to Docker Registry with default values: +# user = plastichub +# image = kbot +# tag = latest +# +# Usage examples: +# 1) Use all defaults: +# ./publish_to_registry.sh +# 2) Override user: +# ./publish_to_registry.sh yourusername +# 3) Override user and image: +# ./publish_to_registry.sh yourusername your-image +# 4) Override user, image, and tag: +# ./publish_to_registry.sh yourusername your-image yourtag +# +# Description: +# 1. Builds a Docker image from the current directory’s Dockerfile. +# 2. Tags the image with the specified user, image, and tag. +# 3. Logs in to Docker Hub (docker.io). +# 4. Pushes the image to Docker Hub. +# 5. Logs out from Docker Hub. + +set -e # Exit on error + +############################################################################### +# Set default values +############################################################################### +DEFAULT_USER="plastichub" +DEFAULT_IMAGE="kbot" +DEFAULT_TAG="latest" + +############################################################################### +# Parse arguments +############################################################################### +# If an argument isn’t provided, use the default. +USER="${1:-$DEFAULT_USER}" +IMAGE="${2:-$DEFAULT_IMAGE}" +TAG="${3:-$DEFAULT_TAG}" + +############################################################################### +# Additional variables +# - You can hard-code your Docker Hub credentials or store them +# securely as environment variables / secrets in CI/CD +############################################################################### +DOCKER_USERNAME="plastichub" +DOCKER_PASSWORD="menMD+cwK$^t55!" + +############################################################################### +# Build the image +############################################################################### +echo "Building Docker image: ${USER}/${IMAGE}:${TAG}" +docker build -t "${USER}/${IMAGE}:${TAG}" . + +############################################################################### +# Docker login +############################################################################### +echo "Logging in to Docker Hub as ${DOCKER_USERNAME}" +echo "${DOCKER_PASSWORD}" | docker login docker.io --username "${DOCKER_USERNAME}" --password-stdin + +############################################################################### +# Push the image +############################################################################### +echo "Pushing image to docker.io: ${USER}/${IMAGE}:${TAG}" +docker push "${USER}/${IMAGE}:${TAG}" + +############################################################################### +# Logout +############################################################################### +echo "Logging out of Docker Hub" +docker logout docker.io + +################################## diff --git a/packages/kbot/systems/query-docker.md b/packages/kbot/systems/query-docker.md new file mode 100644 index 00000000..789fb9e0 --- /dev/null +++ b/packages/kbot/systems/query-docker.md @@ -0,0 +1,36 @@ +Create/Modify a docker compose file, at systems/docker-dev.yaml + +Skip all checked tasks + +- [x] expose via ssh, user root:password +- [x] install mc, build-essentials +- [x] use minimal ubuntu +- [x] add bash scripts to build and run the container (name=pcat) +- [x] add batch scripts to build and run the container (name=pcat) +- [x] launch the container using the terminal tool +- [x] the host is using windows +- [x] remove webmin +- [x] remove apache2 +- [x] create a user polymech, in /home/polymech, add to sudoers +- [x] add stop scripts +- [x] ask the user he likes cats, if so, rename the container to whatever +- [x] mount the host's home directory to /home/polymech +- [x] Dockerfile : install nodejs latest + +- [x] add another script to login into the Docker container, with the terminal tool +- [x] Run `sh build.sh` with terminal tool (window, detached), in ./systems +- [x] Run `docker compose -f docker-dev.yaml up -d` with terminal tool (cmd.exe) +- [x] Run `docker exec -it pcat /bin/bash` with terminal tool (detached, window) +- [x] in systems/Dockerfile, instruct to create a file at /root/.config/code-server/config.yaml with the follwing content +```yaml +bind-addr: 0.0.0.0:8080 +auth: password +password: f0ec467fdc9c95c114aa409f +cert: false +``` + +- [x] export variable OSR_CONFIG with "/home/polymech/.osr/config.json" +- [x] in systems/Dockerfile, make 'code-server' as service, running with user polymech + +- [x] Commit all files in systems, using git tool +- [x] Mark completed tasks designated by tickboxes in systems/query-docker.md \ No newline at end of file diff --git a/packages/kbot/systems/run.bat b/packages/kbot/systems/run.bat new file mode 100644 index 00000000..c9d679b9 --- /dev/null +++ b/packages/kbot/systems/run.bat @@ -0,0 +1,2 @@ +@echo off +docker compose -f docker-dev.yaml up -d \ No newline at end of file diff --git a/packages/kbot/systems/run.sh b/packages/kbot/systems/run.sh new file mode 100644 index 00000000..9b9205e1 --- /dev/null +++ b/packages/kbot/systems/run.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker compose -f docker-dev.yaml up -d \ No newline at end of file diff --git a/packages/kbot/systems/schema.json b/packages/kbot/systems/schema.json new file mode 100644 index 00000000..efd31f99 --- /dev/null +++ b/packages/kbot/systems/schema.json @@ -0,0 +1,195 @@ +[ + { + "$ref": "#/definitions/kbot", + "definitions": { + "kbot": { + "type": "object", + "properties": { + "path": { + "type": "string", + "minLength": 1, + "default": ".", + "description": "Target directory" + }, + "prompt": { + "type": "string", + "description": "The prompt. Supports file paths and environment variables.", + "default": "./prompt.md" + }, + "output": { + "type": "string", + "description": "Optional output path for modified files (Tool mode only)" + }, + "dst": { + "type": "string", + "description": "Optional destination path for the result, will substitute ${MODEL_NAME} and ${ROUTER} in the path. Optional, used for \"completion\" mode" + }, + "each": { + "type": "string", + "description": "Glob pattern to run for each matching file" + }, + "disable": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "Disable tools categories, eg: --disable=fs,git,interact,terminal,search,web,email,user" + }, + "disableTools": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "List of specific tools to disable" + }, + "tools": { + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "fs", + "git", + "interact", + "terminal", + "search", + "web", + "email", + "user" + ], + "description": "List of tools to use. Can be built-in tool names or paths to custom tool files. Default: fs,git,interact,terminal,search,web,email,user" + }, + "include": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Comma separated glob patterns or paths, eg --include=src/*.tsx,src/*.ts --include=package.json" + }, + "model": { + "type": "string", + "default": "anthropic/claude-3.5-sonnet", + "description": "AI model to use for processing. Available models:\n\u001b[35m\u001b[1m\u001b[22m\u001b[39m\n\u001b[35m\u001b[1m OpenRouter models:\u001b[22m\u001b[39m\n\u001b[35m\u001b[1m\u001b[22m\u001b[39m\n01-ai/yi-large | paid\naetherwiing/mn-starcannon-12b | paid\nai21/jamba-1-5-large | paid\nai21/jamba-1-5-mini | paid\nai21/jamba-instruct | paid\njondurbin/airoboros-l2-70b | paid\namazon/nova-lite-v1 | paid\namazon/nova-micro-v1 | paid\namazon/nova-pro-v1 | paid\nanthropic/claude-3-haiku | paid\nanthropic/claude-3-haiku:beta | paid\nanthropic/claude-3-opus | paid\nanthropic/claude-3-opus:beta | paid\nanthropic/claude-3-sonnet | paid\nanthropic/claude-3-sonnet:beta | paid\nanthropic/claude-3.5-haiku | paid\nanthropic/claude-3.5-haiku-20241022 | paid\nanthropic/claude-3.5-haiku-20241022:beta | paid\nanthropic/claude-3.5-haiku:beta | paid\nanthropic/claude-3.5-sonnet | paid\nanthropic/claude-3.5-sonnet-20240620 | paid\nanthropic/claude-3.5-sonnet-20240620:beta | paid\nanthropic/claude-3.5-sonnet:beta | paid\nanthropic/claude-2 | paid\nanthropic/claude-2:beta | paid\nanthropic/claude-2.0 | paid\nanthropic/claude-2.0:beta | paid\nanthropic/claude-2.1 | paid\nanthropic/claude-2.1:beta | paid\nopenrouter/auto | paid\ncohere/command | paid\ncohere/command-r | paid\ncohere/command-r-03-2024 | paid\ncohere/command-r-08-2024 | paid\ncohere/command-r-plus | paid\ncohere/command-r-plus-04-2024 | paid\ncohere/command-r-plus-08-2024 | paid\ncohere/command-r7b-12-2024 | paid\ndatabricks/dbrx-instruct | paid\ndeepseek/deepseek-chat-v2.5 | paid\ndeepseek/deepseek-chat | paid\ncognitivecomputations/dolphin-mixtral-8x7b | paid\ncognitivecomputations/dolphin-mixtral-8x22b | paid\neva-unit-01/eva-llama-3.33-70b | paid\neva-unit-01/eva-qwen-2.5-32b | paid\neva-unit-01/eva-qwen-2.5-72b | paid\nalpindale/goliath-120b | paid\ngoogle/gemini-2.0-flash-thinking-exp:free | free\ngoogle/gemini-exp-1114:free | free\ngoogle/gemini-exp-1121:free | free\ngoogle/gemini-exp-1206:free | free\ngoogle/gemini-flash-1.5 | paid\ngoogle/gemini-flash-1.5-8b | paid\ngoogle/gemini-flash-1.5-8b-exp | paid\ngoogle/gemini-flash-1.5-exp | paid\ngoogle/gemini-2.0-flash-exp:free | free\ngoogle/gemini-pro | paid\ngoogle/gemini-pro-1.5 | paid\ngoogle/gemini-pro-1.5-exp | paid\ngoogle/gemini-pro-vision | paid\ngoogle/gemma-2-27b-it | paid\ngoogle/gemma-2-9b-it | paid\ngoogle/gemma-2-9b-it:free | free\ngoogle/learnlm-1.5-pro-experimental:free | free\ngoogle/palm-2-chat-bison | paid\ngoogle/palm-2-chat-bison-32k | paid\ngoogle/palm-2-codechat-bison | paid\ngoogle/palm-2-codechat-bison-32k | paid\nhuggingfaceh4/zephyr-7b-beta:free | free\ninfermatic/mn-inferor-12b | paid\ninflatebot/mn-mag-mell-r1 | paid\ninflection/inflection-3-pi | paid\ninflection/inflection-3-productivity | paid\nliquid/lfm-40b | paid\nlizpreciatior/lzlv-70b-fp16-hf | paid\nalpindale/magnum-72b | paid\nanthracite-org/magnum-v2-72b | paid\nanthracite-org/magnum-v4-72b | paid\nmancer/weaver | paid\nmeta-llama/llama-2-13b-chat | paid\nmeta-llama/llama-3-70b-instruct | paid\nmeta-llama/llama-3-70b-instruct:nitro | paid\nmeta-llama/llama-3-8b-instruct | paid\nmeta-llama/llama-3-8b-instruct:extended | paid\nmeta-llama/llama-3-8b-instruct:free | free\nmeta-llama/llama-3-8b-instruct:nitro | paid\nmeta-llama/llama-3.1-405b | paid\nmeta-llama/llama-3.1-405b-instruct | paid\nmeta-llama/llama-3.1-405b-instruct:free | free\nmeta-llama/llama-3.1-405b-instruct:nitro | paid\nmeta-llama/llama-3.1-70b-instruct | paid\nmeta-llama/llama-3.1-70b-instruct:free | free\nmeta-llama/llama-3.1-70b-instruct:nitro | paid\nmeta-llama/llama-3.1-8b-instruct | paid\nmeta-llama/llama-3.1-8b-instruct:free | free\nmeta-llama/llama-3.2-11b-vision-instruct | paid\nmeta-llama/llama-3.2-11b-vision-instruct:free | free\nmeta-llama/llama-3.2-1b-instruct | paid\nmeta-llama/llama-3.2-1b-instruct:free | free\nmeta-llama/llama-3.2-3b-instruct | paid\nmeta-llama/llama-3.2-3b-instruct:free | free\nmeta-llama/llama-3.2-90b-vision-instruct | paid\nmeta-llama/llama-3.2-90b-vision-instruct:free | free\nmeta-llama/llama-3.3-70b-instruct | paid\nmeta-llama/llama-guard-2-8b | paid\nmicrosoft/phi-3-medium-128k-instruct | paid\nmicrosoft/phi-3-medium-128k-instruct:free | free\nmicrosoft/phi-3-mini-128k-instruct | paid\nmicrosoft/phi-3-mini-128k-instruct:free | free\nmicrosoft/phi-3.5-mini-128k-instruct | paid\nsophosympatheia/midnight-rose-70b | paid\nmistralai/mistral-large | paid\nmistralai/mistral-large-2407 | paid\nmistralai/mistral-large-2411 | paid\nmistralai/mistral-medium | paid\nnothingiisreal/mn-celeste-12b | paid\nmistralai/mistral-small | paid\nmistralai/mistral-tiny | paid\nmistralai/codestral-mamba | paid\nmistralai/ministral-3b | paid\nmistralai/ministral-8b | paid\nmistralai/mistral-7b-instruct | paid\nmistralai/mistral-7b-instruct:free | free\nmistralai/mistral-7b-instruct:nitro | paid\nmistralai/mistral-7b-instruct-v0.1 | paid\nmistralai/mistral-7b-instruct-v0.3 | paid\nmistralai/mistral-nemo | paid\nmistralai/mixtral-8x22b-instruct | paid\nmistralai/mixtral-8x7b | paid\nmistralai/mixtral-8x7b-instruct | paid\nmistralai/mixtral-8x7b-instruct:nitro | paid\nmistralai/pixtral-12b | paid\nmistralai/pixtral-large-2411 | paid\ngryphe/mythomax-l2-13b | paid\ngryphe/mythomax-l2-13b:extended | paid\ngryphe/mythomax-l2-13b:free | free\ngryphe/mythomax-l2-13b:nitro | paid\nneversleep/llama-3-lumimaid-70b | paid\nneversleep/llama-3-lumimaid-8b | paid\nneversleep/llama-3-lumimaid-8b:extended | paid\nneversleep/llama-3.1-lumimaid-70b | paid\nneversleep/llama-3.1-lumimaid-8b | paid\nneversleep/noromaid-20b | paid\nnousresearch/nous-hermes-llama2-13b | paid\nnousresearch/nous-hermes-2-mixtral-8x7b-dpo | paid\nnousresearch/hermes-3-llama-3.1-405b | paid\nnousresearch/hermes-3-llama-3.1-70b | paid\nnousresearch/hermes-2-pro-llama-3-8b | paid\nnvidia/llama-3.1-nemotron-70b-instruct | paid\nopenai/chatgpt-4o-latest | paid\nopenai/gpt-3.5-turbo | paid\nopenai/gpt-3.5-turbo-0613 | paid\nopenai/gpt-3.5-turbo-16k | paid\nopenai/gpt-3.5-turbo-0125 | paid\nopenai/gpt-3.5-turbo-1106 | paid\nopenai/gpt-3.5-turbo-instruct | paid\nopenai/gpt-4 | paid\nopenai/gpt-4-0314 | paid\nopenai/gpt-4-32k | paid\nopenai/gpt-4-32k-0314 | paid\nopenai/gpt-4-turbo | paid\nopenai/gpt-4-1106-preview | paid\nopenai/gpt-4-turbo-preview | paid\nopenai/gpt-4o | paid\nopenai/gpt-4o-2024-05-13 | paid\nopenai/gpt-4o-2024-08-06 | paid\nopenai/gpt-4o-2024-11-20 | paid\nopenai/gpt-4o:extended | paid\nopenai/gpt-4o-mini | paid\nopenai/gpt-4o-mini-2024-07-18 | paid\nopenai/o1 | paid\nopenai/o1-mini | paid\nopenai/o1-mini-2024-09-12 | paid\nopenai/o1-preview | paid\nopenai/o1-preview-2024-09-12 | paid\nopenchat/openchat-7b | paid\nopenchat/openchat-7b:free | free\nteknium/openhermes-2.5-mistral-7b | paid\nperplexity/llama-3.1-sonar-huge-128k-online | paid\nperplexity/llama-3.1-sonar-large-128k-chat | paid\nperplexity/llama-3.1-sonar-large-128k-online | paid\nperplexity/llama-3.1-sonar-small-128k-chat | paid\nperplexity/llama-3.1-sonar-small-128k-online | paid\nperplexity/llama-3-sonar-large-32k-chat | paid\nperplexity/llama-3-sonar-large-32k-online | paid\nperplexity/llama-3-sonar-small-32k-chat | paid\npygmalionai/mythalion-13b | paid\nqwen/qwen-2-72b-instruct | paid\nqwen/qwen-2-7b-instruct | paid\nqwen/qwen-2-7b-instruct:free | free\nqwen/qvq-72b-preview | paid\nqwen/qwq-32b-preview | paid\nqwen/qwen-2-vl-72b-instruct | paid\nqwen/qwen-2-vl-7b-instruct | paid\nqwen/qwen-2.5-72b-instruct | paid\nqwen/qwen-2.5-7b-instruct | paid\nqwen/qwen-2.5-coder-32b-instruct | paid\nundi95/remm-slerp-l2-13b | paid\nundi95/remm-slerp-l2-13b:extended | paid\nthedrummer/rocinante-12b | paid\nsao10k/l3-lunaris-8b | paid\nsao10k/l3-euryale-70b | paid\nsao10k/l3.1-70b-hanami-x1 | paid\nsao10k/l3.1-euryale-70b | paid\nsao10k/l3.3-euryale-70b | paid\nraifle/sorcererlm-8x22b | paid\nundi95/toppy-m-7b | paid\nundi95/toppy-m-7b:free | free\nundi95/toppy-m-7b:nitro | paid\nthedrummer/unslopnemo-12b | paid\nmicrosoft/wizardlm-2-7b | paid\nmicrosoft/wizardlm-2-8x22b | paid\nx-ai/grok-2-1212 | paid\nx-ai/grok-2-vision-1212 | paid\nx-ai/grok-beta | paid\nx-ai/grok-vision-beta | paid\nxwin-lm/xwin-lm-70b | paid\n\u001b[35m\u001b[1m\u001b[22m\u001b[39m\n\u001b[35m\u001b[1m OpenAI models:\u001b[22m\u001b[39m\n\u001b[35m\u001b[1m\u001b[22m\u001b[39m\nbabbage-002\nchatgpt-4o-latest\ndall-e-2\ndall-e-3\ndavinci-002\ngpt-3.5-turbo\ngpt-3.5-turbo-0125\ngpt-3.5-turbo-1106\ngpt-3.5-turbo-16k\ngpt-3.5-turbo-instruct\ngpt-3.5-turbo-instruct-0914\ngpt-4\ngpt-4-0125-preview\ngpt-4-0613\ngpt-4-1106-preview\ngpt-4-1106-vision-preview\ngpt-4-turbo\ngpt-4-turbo-2024-04-09\ngpt-4-turbo-preview\ngpt-4-vision-preview\ngpt-4o\ngpt-4o-2024-05-13\ngpt-4o-2024-08-06\ngpt-4o-2024-11-20\ngpt-4o-audio-preview\ngpt-4o-audio-preview-2024-10-01\ngpt-4o-audio-preview-2024-12-17\ngpt-4o-mini\ngpt-4o-mini-2024-07-18\ngpt-4o-mini-audio-preview\ngpt-4o-mini-audio-preview-2024-12-17\ngpt-4o-mini-realtime-preview\ngpt-4o-mini-realtime-preview-2024-12-17\ngpt-4o-realtime-preview\ngpt-4o-realtime-preview-2024-10-01\ngpt-4o-realtime-preview-2024-12-17\no1-mini\no1-mini-2024-09-12\no1-preview\no1-preview-2024-09-12\nomni-moderation-2024-09-26\nomni-moderation-latest\ntext-embedding-3-large\ntext-embedding-3-small\ntext-embedding-ada-002\ntts-1\ntts-1-1106\ntts-1-hd\ntts-1-hd-1106\nwhisper-1\n-----\n" + }, + "router": { + "type": "string", + "default": "openrouter", + "description": "Router to use: openai or openrouter" + }, + "mode": { + "type": "string", + "enum": [ + "completion", + "tools", + "assistant" + ], + "description": "Chat completion mode: \"completion\" (without tools) or \"tools\"", + "default": "tools" + }, + "logLevel": { + "type": "number", + "default": 2, + "description": "Logging level for the application" + }, + "profile": { + "type": "string", + "description": "Path to profile for variables. Supports environment variables." + }, + "env": { + "type": "string", + "default": "default", + "description": "Environment (in profile)" + }, + "config": { + "type": "string", + "description": "Path to JSON configuration file (API keys).Supports environment variables." + }, + "dump": { + "type": "string", + "description": "Create a script" + }, + "preferences": { + "type": "string", + "default": "./.kbot/preferences.md", + "description": "Path to preferences file, eg: location, your email address, gender, etc. Supports environment variables." + }, + "logs": { + "type": "string", + "default": "./.kbot", + "description": "Logging directory" + }, + "split": { + "type": "string", + "enum": [ + "none", + "langchain/CharacterTextSplitter", + "langchain/LatexTextSplitter", + "langchain/MarkdownTextSplitter", + "langchain/RecursiveCharacterTextSplitter", + "langchain/TokenTextSplitter" + ], + "description": "Type of text splitter to use", + "default": "none" + }, + "variables": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "default": {} + }, + "filters": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string", + "enum": [ + "JSON", + "JSONUnescape", + "JSONPretty", + "AlphaSort", + "code", + "JSONParse", + "trim" + ] + } + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "array" + } + ], + "default": "code", + "description": "List of filters to apply to the output. Used only in completion mode and a given output file specified with --dst. It unwraps by default any code or data in Markdown." + }, + "dry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + } + ], + "default": false, + "description": "Dry run - only write out parameters without making API calls" + } + }, + "additionalProperties": true, + "description": "IKBotOptions" + } + }, + "$schema": "http://json-schema.org/draft-07/schema#" + } +] \ No newline at end of file diff --git a/packages/kbot/systems/shell.md b/packages/kbot/systems/shell.md new file mode 100644 index 00000000..970577fc --- /dev/null +++ b/packages/kbot/systems/shell.md @@ -0,0 +1,87 @@ +To enable shell history for Code-Server when running inside a Docker container, you need to configure the shell environment within the container properly. Below are the steps to achieve this, presented in Markdown format: + +```markdown +# Enabling Shell History for Code-Server in a Docker Container + +When working with Code-Server inside a Docker container, enabling shell history can enhance your workflow by maintaining a record of previously executed commands. Here’s a step-by-step guide to enable this feature: + +## Step 1: Create a Dockerfile + +You need to set up a Dockerfile that includes the necessary configurations. + +```dockerfile +FROM codercom/code-server:latest + +# Install necessary packages +USER root +RUN apt-get update && apt-get install -y \ + bash \ + && rm -rf /var/lib/apt/lists/* + +# Set up history file location +ENV HISTFILE="/config/.bash_history" +ENV HISTFILESIZE=1000 +ENV HISTSIZE=1000 +ENV HISTCONTROL=ignoredups:erasedups # Adjust to your preference + +# Make sure the history file is created and accessible +RUN touch $HISTFILE && chown coder:coder $HISTFILE + +USER coder +SHELL ["/bin/bash", "-c"] +``` + +## Step 2: Build the Docker Image + +Build the Docker image from your Dockerfile. + +```bash +docker build -t my-code-server-image . +``` + +## Step 3: Run the Docker Container + +Run the container, ensuring that the `.bash_history` file's location is mounted outside the container to keep the history persistent. + +```bash +docker run -d \ + --name my-code-server-container \ + -p 8443:8443 \ + -v ~/.config:/config # Mount a volume for persistent storage + my-code-server-image +``` + +*Note:* Replace `/config` with the actual path where you want to store shell history on your host machine for persistence between container restarts. + +## Step 4: Verify Shell History Working + +1. Attach to the running container shell: + + ```bash + docker exec -it my-code-server-container /bin/bash + ``` + +2. Run a few commands inside the container: + + ```bash + ls + echo "Hello, World!" + ``` + +3. Exit and re-enter the container to see if the history persists. + + ```bash + history + ``` + +If your commands show up when you type `history`, shell history is working correctly. + +## Troubleshooting + +- Ensure that the `HISTFILE` path is mounted correctly and writable. +- Check file permissions to ensure the container user can read and write to the history file. +- Ensure that the shell being used is `bash`, as this configuration is specific to `bash`. + +By following this guide, you should be able to have persistent shell history for your Code-Server instance running inside a Docker container. +``` +This setup ensures that the shell history within the Docker container gets recorded and can be accessed even after the container restarts. Make sure to adjust the paths and configurations as needed for your specific environment. \ No newline at end of file diff --git a/packages/kbot/systems/src/zod_types.ts b/packages/kbot/systems/src/zod_types.ts new file mode 100644 index 00000000..0b39a250 --- /dev/null +++ b/packages/kbot/systems/src/zod_types.ts @@ -0,0 +1,324 @@ +export interface IKBotOptions { + /** Target directory */ + path?: string; + /** The prompt. Supports file paths and environment variables. */ + prompt?: string; + /** Optional output path for modified files (Tool mode only) */ + output?: string | undefined; + /** Optional destination path for the result, will substitute ${MODEL_NAME} and ${ROUTER} in the path. Optional, used for "completion" mode */ + dst?: string | undefined; + /** Glob pattern to run for each matching file */ + each?: string | undefined; + /** Disable tools categories, eg: --disable=fs,git,interact,terminal,search,web,email,user */ + disable?: string[]; + /** List of specific tools to disable */ + disableTools?: string[]; + /** List of tools to use. Can be built-in tool names or paths to custom tool files. Default: fs,git,interact,terminal,search,web,email,user */ + tools?: string[]; + /** Comma separated glob patterns or paths, eg --include=src/*.tsx,src/*.ts --include=package.json */ + include?: string[] | undefined; + /** AI model to use for processing. Available models: + [35m[1m[22m[39m + [35m[1m OpenRouter models:[22m[39m + [35m[1m[22m[39m + 01-ai/yi-large | paid + aetherwiing/mn-starcannon-12b | paid + ai21/jamba-1-5-large | paid + ai21/jamba-1-5-mini | paid + ai21/jamba-instruct | paid + jondurbin/airoboros-l2-70b | paid + amazon/nova-lite-v1 | paid + amazon/nova-micro-v1 | paid + amazon/nova-pro-v1 | paid + anthropic/claude-3-haiku | paid + anthropic/claude-3-haiku:beta | paid + anthropic/claude-3-opus | paid + anthropic/claude-3-opus:beta | paid + anthropic/claude-3-sonnet | paid + anthropic/claude-3-sonnet:beta | paid + anthropic/claude-3.5-haiku | paid + anthropic/claude-3.5-haiku-20241022 | paid + anthropic/claude-3.5-haiku-20241022:beta | paid + anthropic/claude-3.5-haiku:beta | paid + anthropic/claude-3.5-sonnet | paid + anthropic/claude-3.5-sonnet-20240620 | paid + anthropic/claude-3.5-sonnet-20240620:beta | paid + anthropic/claude-3.5-sonnet:beta | paid + anthropic/claude-2 | paid + anthropic/claude-2:beta | paid + anthropic/claude-2.0 | paid + anthropic/claude-2.0:beta | paid + anthropic/claude-2.1 | paid + anthropic/claude-2.1:beta | paid + openrouter/auto | paid + cohere/command | paid + cohere/command-r | paid + cohere/command-r-03-2024 | paid + cohere/command-r-08-2024 | paid + cohere/command-r-plus | paid + cohere/command-r-plus-04-2024 | paid + cohere/command-r-plus-08-2024 | paid + cohere/command-r7b-12-2024 | paid + databricks/dbrx-instruct | paid + deepseek/deepseek-chat-v2.5 | paid + deepseek/deepseek-chat | paid + cognitivecomputations/dolphin-mixtral-8x7b | paid + cognitivecomputations/dolphin-mixtral-8x22b | paid + eva-unit-01/eva-llama-3.33-70b | paid + eva-unit-01/eva-qwen-2.5-32b | paid + eva-unit-01/eva-qwen-2.5-72b | paid + alpindale/goliath-120b | paid + google/gemini-2.0-flash-thinking-exp:free | free + google/gemini-exp-1114:free | free + google/gemini-exp-1121:free | free + google/gemini-exp-1206:free | free + google/gemini-flash-1.5 | paid + google/gemini-flash-1.5-8b | paid + google/gemini-flash-1.5-8b-exp | paid + google/gemini-flash-1.5-exp | paid + google/gemini-2.0-flash-exp:free | free + google/gemini-pro | paid + google/gemini-pro-1.5 | paid + google/gemini-pro-1.5-exp | paid + google/gemini-pro-vision | paid + google/gemma-2-27b-it | paid + google/gemma-2-9b-it | paid + google/gemma-2-9b-it:free | free + google/learnlm-1.5-pro-experimental:free | free + google/palm-2-chat-bison | paid + google/palm-2-chat-bison-32k | paid + google/palm-2-codechat-bison | paid + google/palm-2-codechat-bison-32k | paid + huggingfaceh4/zephyr-7b-beta:free | free + infermatic/mn-inferor-12b | paid + inflatebot/mn-mag-mell-r1 | paid + inflection/inflection-3-pi | paid + inflection/inflection-3-productivity | paid + liquid/lfm-40b | paid + lizpreciatior/lzlv-70b-fp16-hf | paid + alpindale/magnum-72b | paid + anthracite-org/magnum-v2-72b | paid + anthracite-org/magnum-v4-72b | paid + mancer/weaver | paid + meta-llama/llama-2-13b-chat | paid + meta-llama/llama-3-70b-instruct | paid + meta-llama/llama-3-70b-instruct:nitro | paid + meta-llama/llama-3-8b-instruct | paid + meta-llama/llama-3-8b-instruct:extended | paid + meta-llama/llama-3-8b-instruct:free | free + meta-llama/llama-3-8b-instruct:nitro | paid + meta-llama/llama-3.1-405b | paid + meta-llama/llama-3.1-405b-instruct | paid + meta-llama/llama-3.1-405b-instruct:free | free + meta-llama/llama-3.1-405b-instruct:nitro | paid + meta-llama/llama-3.1-70b-instruct | paid + meta-llama/llama-3.1-70b-instruct:free | free + meta-llama/llama-3.1-70b-instruct:nitro | paid + meta-llama/llama-3.1-8b-instruct | paid + meta-llama/llama-3.1-8b-instruct:free | free + meta-llama/llama-3.2-11b-vision-instruct | paid + meta-llama/llama-3.2-11b-vision-instruct:free | free + meta-llama/llama-3.2-1b-instruct | paid + meta-llama/llama-3.2-1b-instruct:free | free + meta-llama/llama-3.2-3b-instruct | paid + meta-llama/llama-3.2-3b-instruct:free | free + meta-llama/llama-3.2-90b-vision-instruct | paid + meta-llama/llama-3.2-90b-vision-instruct:free | free + meta-llama/llama-3.3-70b-instruct | paid + meta-llama/llama-guard-2-8b | paid + microsoft/phi-3-medium-128k-instruct | paid + microsoft/phi-3-medium-128k-instruct:free | free + microsoft/phi-3-mini-128k-instruct | paid + microsoft/phi-3-mini-128k-instruct:free | free + microsoft/phi-3.5-mini-128k-instruct | paid + sophosympatheia/midnight-rose-70b | paid + mistralai/mistral-large | paid + mistralai/mistral-large-2407 | paid + mistralai/mistral-large-2411 | paid + mistralai/mistral-medium | paid + nothingiisreal/mn-celeste-12b | paid + mistralai/mistral-small | paid + mistralai/mistral-tiny | paid + mistralai/codestral-mamba | paid + mistralai/ministral-3b | paid + mistralai/ministral-8b | paid + mistralai/mistral-7b-instruct | paid + mistralai/mistral-7b-instruct:free | free + mistralai/mistral-7b-instruct:nitro | paid + mistralai/mistral-7b-instruct-v0.1 | paid + mistralai/mistral-7b-instruct-v0.3 | paid + mistralai/mistral-nemo | paid + mistralai/mixtral-8x22b-instruct | paid + mistralai/mixtral-8x7b | paid + mistralai/mixtral-8x7b-instruct | paid + mistralai/mixtral-8x7b-instruct:nitro | paid + mistralai/pixtral-12b | paid + mistralai/pixtral-large-2411 | paid + gryphe/mythomax-l2-13b | paid + gryphe/mythomax-l2-13b:extended | paid + gryphe/mythomax-l2-13b:free | free + gryphe/mythomax-l2-13b:nitro | paid + neversleep/llama-3-lumimaid-70b | paid + neversleep/llama-3-lumimaid-8b | paid + neversleep/llama-3-lumimaid-8b:extended | paid + neversleep/llama-3.1-lumimaid-70b | paid + neversleep/llama-3.1-lumimaid-8b | paid + neversleep/noromaid-20b | paid + nousresearch/nous-hermes-llama2-13b | paid + nousresearch/nous-hermes-2-mixtral-8x7b-dpo | paid + nousresearch/hermes-3-llama-3.1-405b | paid + nousresearch/hermes-3-llama-3.1-70b | paid + nousresearch/hermes-2-pro-llama-3-8b | paid + nvidia/llama-3.1-nemotron-70b-instruct | paid + openai/chatgpt-4o-latest | paid + openai/gpt-3.5-turbo | paid + openai/gpt-3.5-turbo-0613 | paid + openai/gpt-3.5-turbo-16k | paid + openai/gpt-3.5-turbo-0125 | paid + openai/gpt-3.5-turbo-1106 | paid + openai/gpt-3.5-turbo-instruct | paid + openai/gpt-4 | paid + openai/gpt-4-0314 | paid + openai/gpt-4-32k | paid + openai/gpt-4-32k-0314 | paid + openai/gpt-4-turbo | paid + openai/gpt-4-1106-preview | paid + openai/gpt-4-turbo-preview | paid + openai/gpt-4o | paid + openai/gpt-4o-2024-05-13 | paid + openai/gpt-4o-2024-08-06 | paid + openai/gpt-4o-2024-11-20 | paid + openai/gpt-4o:extended | paid + openai/gpt-4o-mini | paid + openai/gpt-4o-mini-2024-07-18 | paid + openai/o1 | paid + openai/o1-mini | paid + openai/o1-mini-2024-09-12 | paid + openai/o1-preview | paid + openai/o1-preview-2024-09-12 | paid + openchat/openchat-7b | paid + openchat/openchat-7b:free | free + teknium/openhermes-2.5-mistral-7b | paid + perplexity/llama-3.1-sonar-huge-128k-online | paid + perplexity/llama-3.1-sonar-large-128k-chat | paid + perplexity/llama-3.1-sonar-large-128k-online | paid + perplexity/llama-3.1-sonar-small-128k-chat | paid + perplexity/llama-3.1-sonar-small-128k-online | paid + perplexity/llama-3-sonar-large-32k-chat | paid + perplexity/llama-3-sonar-large-32k-online | paid + perplexity/llama-3-sonar-small-32k-chat | paid + pygmalionai/mythalion-13b | paid + qwen/qwen-2-72b-instruct | paid + qwen/qwen-2-7b-instruct | paid + qwen/qwen-2-7b-instruct:free | free + qwen/qvq-72b-preview | paid + qwen/qwq-32b-preview | paid + qwen/qwen-2-vl-72b-instruct | paid + qwen/qwen-2-vl-7b-instruct | paid + qwen/qwen-2.5-72b-instruct | paid + qwen/qwen-2.5-7b-instruct | paid + qwen/qwen-2.5-coder-32b-instruct | paid + undi95/remm-slerp-l2-13b | paid + undi95/remm-slerp-l2-13b:extended | paid + thedrummer/rocinante-12b | paid + sao10k/l3-lunaris-8b | paid + sao10k/l3-euryale-70b | paid + sao10k/l3.1-70b-hanami-x1 | paid + sao10k/l3.1-euryale-70b | paid + sao10k/l3.3-euryale-70b | paid + raifle/sorcererlm-8x22b | paid + undi95/toppy-m-7b | paid + undi95/toppy-m-7b:free | free + undi95/toppy-m-7b:nitro | paid + thedrummer/unslopnemo-12b | paid + microsoft/wizardlm-2-7b | paid + microsoft/wizardlm-2-8x22b | paid + x-ai/grok-2-1212 | paid + x-ai/grok-2-vision-1212 | paid + x-ai/grok-beta | paid + x-ai/grok-vision-beta | paid + xwin-lm/xwin-lm-70b | paid + [35m[1m[22m[39m + [35m[1m OpenAI models:[22m[39m + [35m[1m[22m[39m + babbage-002 + chatgpt-4o-latest + dall-e-2 + dall-e-3 + davinci-002 + gpt-3.5-turbo + gpt-3.5-turbo-0125 + gpt-3.5-turbo-1106 + gpt-3.5-turbo-16k + gpt-3.5-turbo-instruct + gpt-3.5-turbo-instruct-0914 + gpt-4 + gpt-4-0125-preview + gpt-4-0613 + gpt-4-1106-preview + gpt-4-1106-vision-preview + gpt-4-turbo + gpt-4-turbo-2024-04-09 + gpt-4-turbo-preview + gpt-4-vision-preview + gpt-4o + gpt-4o-2024-05-13 + gpt-4o-2024-08-06 + gpt-4o-2024-11-20 + gpt-4o-audio-preview + gpt-4o-audio-preview-2024-10-01 + gpt-4o-audio-preview-2024-12-17 + gpt-4o-mini + gpt-4o-mini-2024-07-18 + gpt-4o-mini-audio-preview + gpt-4o-mini-audio-preview-2024-12-17 + gpt-4o-mini-realtime-preview + gpt-4o-mini-realtime-preview-2024-12-17 + gpt-4o-realtime-preview + gpt-4o-realtime-preview-2024-10-01 + gpt-4o-realtime-preview-2024-12-17 + o1-mini + o1-mini-2024-09-12 + o1-preview + o1-preview-2024-09-12 + omni-moderation-2024-09-26 + omni-moderation-latest + text-embedding-3-large + text-embedding-3-small + text-embedding-ada-002 + tts-1 + tts-1-1106 + tts-1-hd + tts-1-hd-1106 + whisper-1 + ----- + */ + model?: string; + /** Router to use: openai or openrouter */ + router?: string; + /** Chat completion mode: "completion" (without tools) or "tools" */ + mode?: "completion" | "tools" | "assistant"; + /** Logging level for the application */ + logLevel?: number; + /** Path to profile for variables. Supports environment variables. */ + profile?: string | undefined; + /** Environment (in profile) */ + env?: string; + /** Path to JSON configuration file (API keys).Supports environment variables. */ + config?: string | undefined; + /** Create a script */ + dump?: string | undefined; + /** Path to preferences file, eg: location, your email address, gender, etc. Supports environment variables. */ + preferences?: string; + /** Logging directory */ + logs?: string; + /** Type of text splitter to use */ + split?: "none" | "langchain/CharacterTextSplitter" | "langchain/LatexTextSplitter" | "langchain/MarkdownTextSplitter" | "langchain/RecursiveCharacterTextSplitter" | "langchain/TokenTextSplitter"; + variables?: { + [x: string]: string; + }; + /** List of filters to apply to the output. Used only in completion mode and a given output file specified with --dst. It unwraps by default any code or data in Markdown. */ + filters?: (string | ("JSON" | "JSONUnescape" | "JSONPretty" | "AlphaSort" | "code" | "JSONParse" | "trim")[] | string[] | ((...args_0: unknown[]) => unknown)[]); + /** Dry run - only write out parameters without making API calls */ + dry?: (boolean | string); +} \ No newline at end of file diff --git a/packages/kbot/systems/stop.bat b/packages/kbot/systems/stop.bat new file mode 100644 index 00000000..e7274c49 --- /dev/null +++ b/packages/kbot/systems/stop.bat @@ -0,0 +1,2 @@ +@echo off +docker compose -f docker-dev.yaml down \ No newline at end of file diff --git a/packages/kbot/systems/stop.sh b/packages/kbot/systems/stop.sh new file mode 100644 index 00000000..7f2862aa --- /dev/null +++ b/packages/kbot/systems/stop.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker compose -f docker-dev.yaml down \ No newline at end of file diff --git a/packages/kbot/systems/tests/search/google_extruders.md b/packages/kbot/systems/tests/search/google_extruders.md new file mode 100644 index 00000000..8ad4f373 --- /dev/null +++ b/packages/kbot/systems/tests/search/google_extruders.md @@ -0,0 +1,35 @@ +# Extruders from osr-plastic.org + +## Search Results + +1. [All vendors :: PlasticHub :: Extruder :: Hobby - Extruders](https://shop.osr-plastic.org/plastichub/?category_id=14) + - A small company in Barcelona specializing in recycling hardware and software development + +2. [Lydia - v3.5 Extruder](https://shop.osr-plastic.org/extruder/extruder-fully-built/lydia-v3.5/) + - Precious Plastic Machine Lydia - v3.5 Extruder + +3. [PET and HDPE filament discussion](https://forum.osr-plastic.org/t/pet-and-hdpe-filament-made-from-recycled-flakes/7793) + - Forum discussion about building and using extruders for recycled materials + +4. [Lydia - Mini](https://shop.osr-plastic.org/extruder/extruder-fully-built/lydia-mini/) + - Small extruder for filament and experiments + +5. [SJ - 35 Extruder](https://shop.osr-plastic.org/extruder/industrial/sj-35-extruder/) + - Medium-sized universal extruder with CE/SGS/ISO certification + +6. [Lydia - v4.5](https://shop.osr-plastic.org/extruder/lydia-v4.5/) + - Precious Plastic Machine Lydia - v4.5 Extruder + +7. [Lydia - 4.6 Extended (SJ30)](https://shop.osr-plastic.org/extruder/industrial/lydia-46-extended/) + - Features detachable extrusion hopper and aluminum hopper mount for extra cooling + +8. [OSR - Plastic Shop](https://shop.osr-plastic.org/) + - Main shop page featuring various extruders including Precious Plastic Extruder series + +9. [Material Feeder / Auto-Loader](https://shop.osr-plastic.org/extruder/extruder-parts/material-feeder-auto-loader/) + - 300G Automatic Material Feeding Machine Vacuum Feeder + +10. [Hopper Dryer](https://shop.osr-plastic.org/extruder/extruder-parts/hopper-dryer/) + - Accessory for extruders with precise temperature controls + +*Search performed: site:osr-plastic.org extruder* \ No newline at end of file diff --git a/packages/kbot/systems/tests/search/google_extruders_forum.md b/packages/kbot/systems/tests/search/google_extruders_forum.md new file mode 100644 index 00000000..f571da7a --- /dev/null +++ b/packages/kbot/systems/tests/search/google_extruders_forum.md @@ -0,0 +1,48 @@ +# Search Results: Extruders on forum.osr-plastic.org + +## Search Query +site:forum.osr-plastic.org extruders + +## Results + +1. **Designing a die for drinking straw extrusion** + - Link: https://forum.osr-plastic.org/t/designing-a-die-for-drinking-straw-extrusion/7003 + - Description: Discussion about designing a die for extruding drinking straws or tubes + - Date: Feb 23, 2022 + +2. **PET and HDPE filament made from (recycled) flakes** + - Link: https://forum.osr-plastic.org/t/pet-and-hdpe-filament-made-from-recycled-flakes/7793 + - Description: Team building an extruder and discussion about commercial extruder experiences + - Date: Mar 2, 2022 + +3. **Extrusion Blow Moulding** + - Link: https://forum.osr-plastic.org/t/extrusion-blow-moulding/6945 + - Description: Information about 5L single station automatic extrusion blow moulding machine + - Date: Feb 23, 2022 + +4. **Solar powered melting machine** + - Link: https://forum.osr-plastic.org/t/solar-powered-melting-machine/6406 + - Description: Discussion about an extruder similar to Precious plastic extruder using solar power + - Date: Feb 22, 2022 + +5. **Precious Plastic Pilot – Maldives, Beam Production** + - Link: https://forum.osr-plastic.org/t/precious-plastic-pilot-maldives-beam-production/7757 + - Description: Information about extruder development focusing on industrial beam output + - Date: Mar 2, 2022 + +6. **Precious Plastic Pilot – Maldives, Product Design** + - Link: https://forum.osr-plastic.org/t/precious-plastic-pilot-maldives-product-design/7756 + - Description: Construction of objects using beams from the extruder + - Date: Mar 2, 2022 + +7. **Trash to Cash project, Bonaire** + - Link: https://forum.osr-plastic.org/t/trash-to-cash-project-bonaire/7939 + - Description: Project involving extruder and injection equipment for recycling + - Date: Mar 4, 2022 + +8. **Machine Builders Australia! (SYD)** + - Link: https://forum.osr-plastic.org/t/machine-builders-australia-syd/6731 + - Description: Discussion about building extruders in Sydney and sourcing materials + - Date: Feb 23, 2022 + +*Search performed and document created on: [Current Date]* \ No newline at end of file diff --git a/packages/kbot/systems/update.sh b/packages/kbot/systems/update.sh new file mode 100644 index 00000000..b5689c55 --- /dev/null +++ b/packages/kbot/systems/update.sh @@ -0,0 +1 @@ +kbot modify --path=. --template=typescript --query="./systems/query-docker.md" --disable=npm --glob="systems/*" diff --git a/packages/kbot/systems/workspace/docs.kbot.polymech.com/404.html b/packages/kbot/systems/workspace/docs.kbot.polymech.com/404.html new file mode 100644 index 00000000..becaa329 --- /dev/null +++ b/packages/kbot/systems/workspace/docs.kbot.polymech.com/404.html @@ -0,0 +1,182 @@ + + +
+ + + + + + + + + + + + + + + + + +Whoops. Looks like this page doesn't exist ¯\_(ツ)_/¯.
+ + ++ +
+The evolution of content creation and consumption is set to become increasingly collaborative, moving beyond solitary endeavors to foster community-driven innovation and productivity. This transformation is supported by a range of tools and technologies designed to enhance collaborative efforts across various platforms.
+One of the key advancements in collaboration will be the ability for multiple users to seamlessly edit documents in real time. This feature, already being refined by platforms like Google Docs and Microsoft Office 365, minimizes barriers to teamwork and boosts efficiency by enabling contributors to see and respond to each other’s changes instantly. The co-editing capability is augmented by features like version history and revision tracking, which provide transparency and accountability.
+As collaborators engage with shared content, systems will provide them with insights into others’ modifications without overwhelming them with information. Applications such as Slack and Microsoft Teams are developing features that highlight relevant changes and comments within the context of ongoing projects. This capability ensures a synchronized understanding across teams and reduces the potential for conflicts arising from miscommunication.
+Future workflows will increasingly depend on automated synchronization across platforms and devices. Services like Dropbox and OneDrive are already facilitating this by ensuring that the latest versions of content are accessible from any location or device. As this synchronization becomes more seamless, users will benefit from uninterrupted access to updated information, regardless of their active device.
+Artificial Intelligence will play a crucial role in managing collaborative spaces by offering solutions for resolving conflicts that arise from simultaneous content modifications. Tools such as Atlassian Confluence are beginning to integrate AI-driven suggestions for managing these conflicts, providing users with merge suggestions or automated conflict resolution options. This eases user interaction and helps maintain content integrity while supporting fluid collaboration.
+Collaboration in content creation is further enhanced by integration with project management tools that align with team workflows. Platforms like Asana and Trello offer functionalities where content collaboration can be managed alongside task assignments, deadlines, and progress tracking. These integrations help teams stay organized, ensure accountability, and streamline project delivery by tying collaborative content efforts directly to broader project goals.
+The future of collaboration is also leaning towards openness, where content creation taps into wider community inputs. Platforms such as GitHub exemplify this trend by allowing open contributions to have structured peer reviews and collaborative improvements. This model not only enhances the quality of output through diverse insights but also accelerates innovation by pooling a wider range of expertise and creativity.
+As more integrated collaboration tools emerge, they will promote knowledge sharing and continuous learning within and across organizations. Platforms like Notion and Confluence are creating collaborative spaces where users can share knowledge, create wikis, and build living documents that evolve with team input. These tools facilitate a culture of learning and adaptation, ensuring that information sharing becomes an integral part of the collaborative process.
+By leveraging these collaborative advancements, organizations can break down silos, encourage innovation, and build dynamic content ecosystems that are adaptable, intuitive, and reflective of collective intelligence. This shift will be crucial to meet the demands of an increasingly interconnected and collaborative digital world.
+ + +The evolution of content creation and consumption is set to become increasingly collaborative, moving beyond solitary endeavors to foster community-driven innovation and productivity. This transformation is supported by a range of tools and technologies designed to enhance collaborative efforts across various platforms.
+One of the key advancements in collaboration will be the ability for multiple users to seamlessly edit documents in real time. This feature, already being refined by platforms like Google Docs and Microsoft Office 365, minimizes barriers to teamwork and boosts efficiency by enabling contributors to see and respond to each other’s changes instantly. The co-editing capability is augmented by features like version history and revision tracking, which provide transparency and accountability.
+As collaborators engage with shared content, systems will provide them with insights into others’ modifications without overwhelming them with information. Applications such as Slack and Microsoft Teams are developing features that highlight relevant changes and comments within the context of ongoing projects. This capability ensures a synchronized understanding across teams and reduces the potential for conflicts arising from miscommunication.
+Future workflows will increasingly depend on automated synchronization across platforms and devices. Services like Dropbox and OneDrive are already facilitating this by ensuring that the latest versions of content are accessible from any location or device. As this synchronization becomes more seamless, users will benefit from uninterrupted access to updated information, regardless of their active device.
+Artificial Intelligence will play a crucial role in managing collaborative spaces by offering solutions for resolving conflicts that arise from simultaneous content modifications. Tools such as Atlassian Confluence are beginning to integrate AI-driven suggestions for managing these conflicts, providing users with merge suggestions or automated conflict resolution options. This eases user interaction and helps maintain content integrity while supporting fluid collaboration.
+Collaboration in content creation is further enhanced by integration with project management tools that align with team workflows. Platforms like Asana and Trello offer functionalities where content collaboration can be managed alongside task assignments, deadlines, and progress tracking. These integrations help teams stay organized, ensure accountability, and streamline project delivery by tying collaborative content efforts directly to broader project goals.
+The future of collaboration is also leaning towards openness, where content creation taps into wider community inputs. Platforms such as GitHub exemplify this trend by allowing open contributions to have structured peer reviews and collaborative improvements. This model not only enhances the quality of output through diverse insights but also accelerates innovation by pooling a wider range of expertise and creativity.
+As more integrated collaboration tools emerge, they will promote knowledge sharing and continuous learning within and across organizations. Platforms like Notion and Confluence are creating collaborative spaces where users can share knowledge, create wikis, and build living documents that evolve with team input. These tools facilitate a culture of learning and adaptation, ensuring that information sharing becomes an integral part of the collaborative process.
+By leveraging these collaborative advancements, organizations can break down silos, encourage innovation, and build dynamic content ecosystems that are adaptable, intuitive, and reflective of collective intelligence. This shift will be crucial to meet the demands of an increasingly interconnected and collaborative digital world.
+ + +s that we want to ignore */ + display: none; +} + +/* in case of image render hook, Hugo may generate empty
s that we want to ignore as well, so a simple :first-child or :last-child is not enough */ +#R-body table th > :nth-child(1 of :not(:empty)), +#R-body table th > :nth-child(1 of :not(:empty)) :nth-child(1 of :not(:empty)), +#R-body table td > :nth-child(1 of :not(:empty)), +#R-body table td > :nth-child(1 of :not(:empty)) :nth-child(1 of :not(:empty)), +#R-body div.box > .box-content > :nth-child(1 of :not(:empty)), +#R-body div.box > .box-content > :nth-child(1 of :not(:empty)) :nth-child(1 of :not(:empty)), +#R-body div.expand > .expand-content-text > :nth-child(1 of :not(:empty)), +#R-body div.expand > .expand-content-text > :nth-child(1 of :not(:empty)) :nth-child(1 of :not(:empty)), +#R-body div.tab-content > .tab-content-text > :nth-child(1 of :not(:empty)), +#R-body div.tab-content > .tab-content-text > :nth-child(1 of :not(:empty)) :nth-child(1 of :not(:empty)) { + margin-top: 0; +} + +#R-body table th > :nth-last-child(1 of :not(:empty)), +#R-body table th > :nth-last-child(1 of :not(:empty)) :nth-last-child(1 of :not(:empty)), +#R-body table th > div.highlight:last-child pre:not(.mermaid), +#R-body table td > :nth-last-child(1 of :not(:empty)), +#R-body table td > :nth-last-child(1 of :not(:empty)) :nth-last-child(1 of :not(:empty)), +#R-body table td > div:last-child pre:not(.mermaid), +#R-body div.box > .box-content > :nth-last-child(1 of :not(:empty)), +#R-body div.box > .box-content > :nth-last-child(1 of :not(:empty)) :nth-last-child(1 of :not(:empty)), +#R-body div.box > .box-content > div:last-child pre:not(.mermaid), +#R-body div.expand > .expand-content-text > :nth-last-child(1 of :not(:empty)), +#R-body div.expand > .expand-content-text > :nth-last-child(1 of :not(:empty)) :nth-last-child(1 of :not(:empty)), +#R-body div.expand > .expand-content-text > div:last-child pre:not(.mermaid), +#R-body div.tab-content > .tab-content-text > :nth-last-child(1 of :not(:empty)), +#R-body div.tab-content > .tab-content-text > :nth-last-child(1 of :not(:empty)) :nth-last-child(1 of :not(:empty)), +#R-body div.tab-content > .tab-content-text > div:last-child pre:not(.mermaid) { + margin-bottom: 0; +} + +/* resources shortcode */ + +div.attachments .box-content { + display: block; + margin: 0; + padding-inline-start: 1.75rem; +} + +/* Children shortcode */ + +.children p { + font-size: .8125rem; + margin-bottom: 0; + margin-top: 0; + padding-bottom: 0; + padding-top: 0; +} + +.children-li p { + font-size: .8125rem; + font-style: italic; +} + +.children-h2 p, +.children-h3 p { + font-size: .8125rem; + margin-bottom: 0; + margin-top: 0; + padding-bottom: 0; + padding-top: 0; +} + +#R-body-inner .children h2, +#R-body-inner .children h3, +#R-body-inner .children h4, +#R-body-inner .children h5, +#R-body-inner .children h6 { + margin-bottom: 0; + margin-top: 1rem; +} +#R-body-inner ul.children-h2, +#R-body-inner ul.children-h3, +#R-body-inner ul.children-h4, +#R-body-inner ul.children-h5, +#R-body-inner ul.children-h6 { + /* if we display children with style=h2 but without a containerstyle + a ul will be used for structuring; we remove default indention for uls + in this case */ + padding-inline-start: 0; +} + +code, +kbd, +pre:not(.mermaid), +samp { + font-size: .934375rem; + vertical-align: baseline; +} + +code { + border-radius: 2px; + border-style: solid; + border-width: 1px; + -webkit-print-color-adjust: economy; + color-adjust: economy; + padding-left: 2px; + padding-right: 2px; + white-space: nowrap; +} + +span.copy-to-clipboard { + display: inline-block; + white-space: nowrap; +} + +code.copy-to-clipboard-code { + border-end-end-radius: 0; + border-start-end-radius: 0; + border-inline-end-width: 0; +} + +pre:not(.mermaid) { + border-radius: 2px; + border-style: solid; + border-width: 1px; + -webkit-print-color-adjust: economy; + color-adjust: economy; + line-height: 1.15; + padding: 1rem; + position: relative; +} + +/* pre:not(.mermaid):has( code ), */ +/* the :has() operator isn't available in FF yet, so we patch this by JS */ +pre:not(.mermaid).pre-code { + direction: ltr; + text-align: left; +} + +pre:not(.mermaid) code { + background-color: inherit; + border: 0; + color: inherit; + -webkit-print-color-adjust: economy; + color-adjust: economy; + font-size: .9375rem; + margin: 0; + padding: 0; +} + +div.highlight{ + position: relative; +} +/* we may have special treatment if highlight shortcode was used in table lineno mode */ +div.highlight > div{ + border-style: solid; + border-width: 1px; +} +/* remove default style for usual markdown tables */ +div.highlight > div table{ + background-color: transparent; + border-width: 0; + margin: 0; +} +div.highlight > div td{ + border-width: 0; +} +#R-body div.highlight > div a { + line-height: inherit; +} +#R-body div.highlight > div a:after { + display: none; +} +/* disable selection for lineno cells */ +div.highlight > div td:first-child:not(:last-child){ + -webkit-user-select: none; + user-select: none; +} +/* increase code column to full width if highlight shortcode was used in table lineno mode */ +div.highlight > div td:not(:first-child):last-child{ + width: 100%; +} +/* add scrollbars if highlight shortcode was used in table lineno mode */ +div.highlight > div table{ + display: block; + overflow: auto; +} +div.highlight:not(.wrap-code) pre:not(.mermaid){ + overflow: auto; +} +div.highlight:not(.wrap-code) pre:not(.mermaid) code{ + white-space: pre; +} +div.highlight.wrap-code pre:not(.mermaid) code{ + white-space: pre-wrap; +} +/* remove border from row cells if highlight shortcode was used in table lineno mode */ +div.highlight > div td > pre:not(.mermaid) { + border-radius: 0; + border-width: 0; +} +/* in case of table lineno mode we want to move each row closer together - besides the edges +this usually applies only to wrapfix tables but it doesn't hurt for non-wrapfix tables too */ +div.highlight > div tr:not(:first-child) pre:not(.mermaid){ + padding-top: 0; +} +div.highlight > div tr:not(:last-child) pre:not(.mermaid){ + padding-bottom: 0; +} +/* in case of table lineno mode we want to move each columns closer together on the inside */ +div.highlight > div td:first-child:not(:last-child) pre:not(.mermaid){ + padding-right: 0; +} +div.highlight > div td:not(:first-child):last-child pre:not(.mermaid){ + padding-left: 0; +} + +hr { + border-bottom: 4px solid rgba( 134, 134, 134, .125 ); +} + +#R-body-inner pre:not(.mermaid) { + white-space: pre-wrap; +} + +table { + border: 1px solid rgba( 134, 134, 134, .333 ); + margin-bottom: 1rem; + margin-top: 1rem; + table-layout: auto; +} + +th, +thead td { + background-color: rgba( 134, 134, 134, .166 ); + border: 1px solid rgba( 134, 134, 134, .333 ); + -webkit-print-color-adjust: exact; + color-adjust: exact; + padding: 0.5rem; +} + +td { + border: 1px solid rgba( 134, 134, 134, .333 ); + padding: 0.5rem; +} +tbody > tr:nth-child(even) > td { + background-color: rgba( 134, 134, 134, .045 ); +} + +.tooltipped { + position: relative; +} + +.tooltipped:after { + background: rgba( 0, 0, 0, 1 ); + border: 1px solid rgba( 119, 119, 119, 1 ); + border-radius: 3px; + color: rgba( 255, 255, 255, 1 ); + content: attr(aria-label); + display: none; + font-family: "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif; + font-size: .6875rem; + font-weight: normal; + -webkit-font-smoothing: subpixel-antialiased; + letter-spacing: normal; + line-height: 1.5; + padding: 5px 8px; + pointer-events: none; + position: absolute; + text-align: center; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: pre; + word-wrap: break-word; + z-index: 140; +} + +.tooltipped:before { + border: 5px solid transparent; + color: rgba( 0, 0, 0, 1 ); + content: ""; + display: none; + height: 0; + pointer-events: none; + position: absolute; + width: 0; + z-index: 150; +} + +.tooltipped:hover:before, +.tooltipped:hover:after, +.tooltipped:active:before, +.tooltipped:active:after, +.tooltipped:focus:before, +.tooltipped:focus:after { + display: inline-block; + text-decoration: none; +} + +.tooltipped-s:after, +.tooltipped-se:after, +.tooltipped-sw:after { + margin-top: 5px; + right: 50%; + top: 100%; +} + +.tooltipped-s:before, +.tooltipped-se:before, +.tooltipped-sw:before { + border-bottom-color: rgba( 0, 0, 0, .8 ); + bottom: -5px; + margin-right: -5px; + right: 50%; + top: auto; +} + +.tooltipped-se:after { + left: 50%; + margin-left: -15px; + right: auto; +} + +.tooltipped-sw:after { + margin-right: -15px; +} + +.tooltipped-n:after, +.tooltipped-ne:after, +.tooltipped-nw:after { + bottom: 100%; + margin-bottom: 5px; + right: 50%; +} + +.tooltipped-n:before, +.tooltipped-ne:before, +.tooltipped-nw:before { + border-top-color: rgba( 0, 0, 0, .8 ); + bottom: auto; + margin-right: -5px; + right: 50%; + top: -5px; +} + +.tooltipped-ne:after { + left: 50%; + margin-left: -15px; + right: auto; +} + +.tooltipped-nw:after { + margin-right: -15px; +} + +.tooltipped-s:after, +.tooltipped-n:after { + transform: translateX(50%); +} + +.tooltipped-w:after { + bottom: 50%; + margin-right: 5px; + right: 100%; + transform: translateY(50%); +} + +.tooltipped-w:before { + border-left-color: rgba( 0, 0, 0, .8 ); + bottom: 50%; + left: -5px; + margin-top: -5px; + top: 50%; +} + +.tooltipped-e:after { + bottom: 50%; + left: 100%; + margin-left: 5px; + transform: translateY(50%); +} + +.tooltipped-e:before { + border-right-color: rgba( 0, 0, 0, .8 ); + bottom: 50%; + margin-top: -5px; + right: -5px; + top: 50%; +} + +#R-topbar { + min-height: 3rem; + position: relative; + z-index: 170; +} + +#R-topbar > .topbar-wrapper { + align-items: center; + background-color: rgba( 134, 134, 134, .066 ); + display: flex; + flex-basis: 100%; + flex-direction: row; + height: 100%; +} + +.topbar-button { + display: inline-block; + position: relative; +} +.topbar-button:not([data-origin]) { + display: none; +} + +.topbar-button > .topbar-control { + display: inline-block; + padding-left: 1rem; + padding-right: 1rem; +} +.topbar-wrapper > .topbar-area-start > .topbar-button > .topbar-control { + border-inline-end: 1px solid rgba( 134, 134, 134, .333 ); +} +.topbar-wrapper > .topbar-area-end > .topbar-button > .topbar-control { + border-inline-start: 1px solid rgba( 134, 134, 134, .333 ); +} + +.topbar-button > button:disabled i, +.topbar-button > span i { + color: rgba( 134, 134, 134, .333 ); +} +.topbar-button button{ + -webkit-appearance: none; + appearance: none; + background-color: transparent; +} + +.topbar-sidebar-divider { + border-inline-start-style: solid; + border-inline-start-width: 1px; + margin-inline-end: -1px; + width: 1px; +} +.topbar-sidebar-divider::after { + content: "\00a0"; +} + +.topbar-wrapper > .topbar-area-start { + display: flex; + flex-direction: row; + flex-shrink: 0; +} +.topbar-wrapper > .topbar-area-end { + display: flex; + flex-direction: row; + flex-shrink: 0; +} +.topbar-wrapper > .topbar-hidden { + display: none; +} + +html[dir="rtl"] .topbar-button-prev i, +html[dir="rtl"] .topbar-button-next i { + transform: scaleX(-1); +} + +.topbar-content { + top: .75rem; +} +.topbar-wrapper > .topbar-area-start .topbar-content { + inset-inline-start: 1.5rem; +} +.topbar-wrapper > .topbar-area-end .topbar-content { + inset-inline-end: 1.5rem; +} +.topbar-content .topbar-content{ + /* we don't allow flyouts in flyouts; come on, don't get funny... */ + display: none; +} + +.topbar-breadcrumbs { + flex-grow: 1; + margin: 0; + padding: 0 1rem; +} +@media screen and (max-width: 47.999rem) { + .topbar-breadcrumbs { + /* we just hide the breadcrumbs instead of display: none; + this makes sure that the breadcrumbs are still usable for + accessability */ + visibility: hidden; + } +} + +.breadcrumbs { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + width: 100%; + white-space: nowrap; +} + +.breadcrumbs meta { + display: none; +} + +.breadcrumbs li { + display: inline-block; +} + +#R-body a[aria-disabled="true"] { + pointer-events: none; + text-decoration: none; +} + +@media screen and (max-width: 59.999rem) { + #R-sidebar { + min-width: var(--INTERNAL-MENU-WIDTH-M); + max-width: var(--INTERNAL-MENU-WIDTH-M); + width: var(--INTERNAL-MENU-WIDTH-M); + } + #R-body { + margin-inline-start: var(--INTERNAL-MENU-WIDTH-M); + min-width: calc( 100% - var(--INTERNAL-MENU-WIDTH-M) ); + max-width: calc( 100% - var(--INTERNAL-MENU-WIDTH-M) ); + width: calc( 100% - var(--INTERNAL-MENU-WIDTH-M) ); + } +} +@media screen and (max-width: 47.999rem) { + /* we don't support sidebar flyout in mobile */ + .mobile-support #R-sidebar { + inset-inline-start: calc( -1 * var(--INTERNAL-MENU-WIDTH-S) ); + min-width: var(--INTERNAL-MENU-WIDTH-S); + max-width: var(--INTERNAL-MENU-WIDTH-S); + width: var(--INTERNAL-MENU-WIDTH-S); + } + .mobile-support #navshow{ + display: inline; + } + .mobile-support #R-body { + min-width: 100%; + max-width: 100%; + width: 100%; + } + .mobile-support #R-body { + margin-inline-start: 0; + } + .mobile-support.sidebar-flyout { + overflow: hidden; + } + .mobile-support.sidebar-flyout #R-sidebar { + inset-inline-start: 0; + z-index: 90; + } + .mobile-support.sidebar-flyout #R-body { + margin-inline-start: var(--INTERNAL-MENU-WIDTH-S); + overflow: hidden; + } + .mobile-support.sidebar-flyout #R-body-overlay{ + background-color: rgba( 134, 134, 134, .5 ); + bottom: 0; + cursor: pointer; + height: 100vh; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 190; + } +} + +.copy-to-clipboard-button { + border-start-start-radius: 0; + border-start-end-radius: 2px; + border-end-end-radius: 2px; + border-end-start-radius: 0; + border-style: solid; + border-width: 1px; + cursor: pointer; + font-size: .934375rem; + line-height: 1.15; +} + +span > .copy-to-clipboard-button { + border-start-start-radius: 0; + border-start-end-radius: 2px; + border-end-end-radius: 2px; + border-end-start-radius: 0; +} + +.copy-to-clipboard-button > i { + font-size: .859625rem; +} + +/* only show copy to clipboard on hover for code blocks if configured */ +div.highlight .copy-to-clipboard-button { + display: none; +} +@media (any-hover: none) { + /* if there is at least one input device that does not support hover, we want to force the copy button */ + div.highlight .copy-to-clipboard-button { + display: block; + } +} +div.highlight:hover .copy-to-clipboard-button { + display: block; +} +.disableHoverBlockCopyToClipBoard div.highlight .copy-to-clipboard-button { + display: block; +} + +div.highlight > div table + .copy-to-clipboard-button > i, +div.highlight pre:not(.mermaid) + .copy-to-clipboard-button > i, +.copy-to-clipboard-code + .copy-to-clipboard-button > i { + padding-left: 5px; + padding-right: 5px; +} + +div.highlight > div table + .copy-to-clipboard-button, +div.highlight pre:not(.mermaid) + .copy-to-clipboard-button, +pre:not(.mermaid) > .copy-to-clipboard-button { + background-color: rgba( 160, 160, 160, .2 ); + border-radius: 2px; + border-style: solid; + border-width: 1px; + right: 4px; + padding: 5px 3px; + position: absolute; + top: 4px; +} + +.disableInlineCopyToClipboard span > code.copy-to-clipboard-code + span.copy-to-clipboard-button { + display: none; +} + +.disableInlineCopyToClipboard span > code.copy-to-clipboard-code { + border-start-end-radius: 2px; + border-end-end-radius: 2px; + border-inline-end-width: 1px; +} + +#R-homelinks { + padding: 0; +} +#R-homelinks ul { + margin: .5rem 0; +} +#R-homelinks hr { + border-bottom-style: solid; + border-bottom-width: 1px; + margin: 0 1rem 3px 1rem; +} + +option { + color: initial; +} + +.expand { + margin-bottom: 1rem; + margin-top: 1rem; + position: relative; +} + +.expand > input { + -webkit-appearance: none; + appearance: none; + cursor: pointer; +} + +.expand > label { + cursor: pointer; + display: inline; + font-weight: 300; + inset-inline-start: 0; + line-height: 1.1; + margin-top: .2rem; + position: absolute; +} + +.expand > input:active + label, +.expand > input:focus + label, +.expand > label:hover { + text-decoration: underline; +} + +.expand > label > .fas { + font-size: .8rem; + width: .6rem; +} + +.expand > .expand-content { + margin-inline-start: 1rem; + margin-top: .5rem; +} +/* closed expander */ +.expand > input + label + div { + display: none; +} + +.expand > input + label > .fa-chevron-down { + display: none; +} +.expand > input + label > .fa-chevron-right { + display: inline-block; +} + +/* open expander */ +.expand > input:checked + label + div { + display: block; +} + +.expand > input:checked + label > .fa-chevron-down { + display: inline-block; +} +.expand > input:checked + label > .fa-chevron-right { + display: none; +} + +/* adjust expander for RTL reading direction */ +html[dir="rtl"] .expand > .expand-label > i.fa-chevron-right { + transform: scaleX(-1); +} + +#R-body footer.footline{ + margin-top: 2rem; +} + +.headline i, +.footline i{ + margin-inline-start: .5rem; +} +.headline i:first-child, +.footline i:first-child{ + margin-inline-start: 0; +} + +.mermaid-container { + margin-bottom: 1.7rem; + margin-top: 1.7rem; +} + +.mermaid { + display: inline-block; + border: 1px solid transparent; + padding: .5rem .5rem 0 .5rem; + position: relative; + /* don't use display: none, as this will cause no renderinge by Mermaid */ + visibility: hidden; + width: 100%; +} +.mermaid-container.zoomable > .mermaid:hover { + border-color: rgba( 134, 134, 134, .333 ); +} +.mermaid.mermaid-render { + visibility: visible; +} + +.mermaid > svg { + /* remove inline height from generated diagram */ + height: initial !important; +} +.mermaid-container.zoomable > .mermaid > svg { + cursor: grab; +} + +.svg-reset-button { + background-color: rgba( 160, 160, 160, .2 ); + border-radius: 2px; + border-style: solid; + border-width: 1px; + cursor: pointer; + display: none; + font-size: .934375rem; + line-height: 1.15; + padding: 5px 3px; + position: absolute; + right: 4px; + top: 4px; +} +.mermaid:hover .svg-reset-button.zoomed { + display: block; +} +@media (any-hover: some) { + /* if there is at least one input device that does not support hover, we want to force the reset button if zoomed */ + .svg-reset-button.zoomed { + display: block; + } +} + +.svg-reset-button > i { + font-size: .859625rem; + padding-left: 5px; + padding-right: 5px; +} + +.mermaid-code { + display: none; +} + +.include.hide-first-heading h1:first-of-type, +.include.hide-first-heading h2:first-of-type, +.include.hide-first-heading h3:first-of-type, +.include.hide-first-heading h4:first-of-type, +.include.hide-first-heading h5:first-of-type, +.include.hide-first-heading h6:first-of-type { + display: none; +} + +.include.hide-first-heading h1 + h2:first-of-type, +.include.hide-first-heading h1 + h3:first-of-type, +.include.hide-first-heading h2 + h3:first-of-type, +.include.hide-first-heading h1 + h4:first-of-type, +.include.hide-first-heading h2 + h4:first-of-type, +.include.hide-first-heading h3 + h4:first-of-type, +.include.hide-first-heading h1 + h5:first-of-type, +.include.hide-first-heading h2 + h5:first-of-type, +.include.hide-first-heading h3 + h5:first-of-type, +.include.hide-first-heading h4 + h5:first-of-type, +.include.hide-first-heading h1 + h6:first-of-type, +.include.hide-first-heading h2 + h6:first-of-type, +.include.hide-first-heading h3 + h6:first-of-type, +.include.hide-first-heading h4 + h6:first-of-type, +.include.hide-first-heading h5 + h6:first-of-type { + display: block; +} + +/* Table of contents */ + +.topbar-flyout #R-main-overlay{ + bottom: 0; + cursor: pointer; + left: 0; + position: absolute; + right: 0; + top: 3rem; + z-index: 160; +} + +.topbar-content { + border: 0 solid rgba( 134, 134, 134, .166 ); + box-shadow: 1px 2px 5px 1px rgba( 134, 134, 134, .2 ); + height: 0; + opacity: 0; + overflow: hidden; + position: absolute; + visibility: hidden; + width: 0; + z-index: 180; +} + +.topbar-button.topbar-flyout .topbar-content { + border-width: 1px; + height: auto; + opacity: 1; + visibility: visible; + width: auto; +} + +.topbar-content .topbar-content-wrapper { + background-color: rgba( 134, 134, 134, .066 ); +} + +.topbar-content-wrapper { + --ps-rail-hover-color: rgba( 176, 176, 176, .25 ); + max-height: 90vh; + overflow: hidden; + padding: .5rem 1rem; + position: relative; /* PS */ +} + +.topbar-content .topbar-button .topbar-control { + border-width: 0; + padding: 0; +} +.topbar-content .topbar-button .topbar-control { + border-width: 0; + padding: .5rem 0; +} + +#TableOfContents, +.TableOfContents { + font-size: .8125rem; +} +#TableOfContents ul, +.TableOfContents ul { + list-style: none; + margin: 0; + padding: 0 1rem; +} + +#TableOfContents > ul, +.TableOfContents > ul { + padding: 0; +} + +#TableOfContents li, +.TableOfContents li { + white-space: nowrap; +} + +#TableOfContents > ul > li > a, +.TableOfContents > ul > li > a { + font-weight: 500; +} + +.btn { + border-radius: 4px; + display: inline-block; + font-size: .9rem; + font-weight: 500; + line-height: 1.1; + margin-bottom: 0; + touch-action: manipulation; + -webkit-user-select: none; + user-select: none; +} +.btn.interactive { + cursor: pointer; +} + +.btn > span, +.btn > a { + display: block; +} + +.btn > :where(button) { + -webkit-appearance: none; + appearance: none; + border-width: 0; + margin: 0; + padding: 0; +} + +.btn > * { + background-color: transparent; + border-radius: 4px; + border-style: solid; + border-width: 1px; + padding: 6px 12px; + text-align: center; + touch-action: manipulation; + -webkit-user-select: none; + user-select: none; + white-space: nowrap; +} + +.btn > *:after { + /* avoid breakage if no content is given */ + content: "\200b" +} + +#R-body #R-body-inner .btn > *.highlight:after { + background-color: transparent; +} + +.btn.interactive > .btn-interactive:focus { + outline: none; +} + +.btn.interactive > *:hover, +.btn.interactive > *:active, +.btn.interactive > *:focus { + text-decoration: none; +} + +/* anchors */ +.anchor { + cursor: pointer; + font-size: .5em; + margin-inline-start: .66em; + margin-top: .9em; + position: absolute; + visibility: hidden; +} +@media (any-hover: none) { + /* if there is at least one input device that does not support hover, we want to force the copy button */ + .anchor { + visibility: visible; + } +} + +h2:hover .anchor, +h3:hover .anchor, +h4:hover .anchor, +h5:hover .anchor, +h6:hover .anchor { + visibility: visible; +} + +/* Redfines headers style */ + +h1 a, +h2 a, +h3 a, +h4 a, +h5 a, +h6 a { + font-weight: inherit; +} + +#R-body h1 + h2, +#R-body h1 + h3, +#R-body h1 + h4, +#R-body h1 + h5, +#R-body h1 + h6, +#R-body h2 + h3, +#R-body h2 + h4, +#R-body h2 + h5, +#R-body h2 + h6, +#R-body h3 + h4, +#R-body h3 + h5, +#R-body h3 + h6, +#R-body h4 + h5, +#R-body h4 + h6, +#R-body h5 + h6 { + margin-top: 1rem; +} + +.menu-control .control-style { + cursor: pointer; + height: 1.574em; + overflow: hidden; +} + +.menu-control i { + padding-top: .25em; +} + +.menu-control i, +.menu-control span { + cursor: pointer; + display: block; + float: left; +} +html[dir="rtl"] .menu-control i, +html[dir="rtl"] .menu-control span { + float: right; +} + +.menu-control :hover, +.menu-control i:hover, +.menu-control span:hover { + cursor: pointer; +} + +.menu-control select, +.menu-control button { + -webkit-appearance: none; + appearance: none; + height: 1.33rem; + outline: none; + width: 100%; +} +.menu-control button:active, +.menu-control button:focus, +.menu-control select:active, +.menu-control select:focus{ + outline-style: solid; +} + +.menu-control select { + background-color: transparent; + background-image: none; + border: none; + box-shadow: none; + padding-left: 0; + padding-right: 0; +} + +.menu-control option { + color: rgba( 0, 0, 0, 1 ); + padding: 0; + margin: 0; +} + +.menu-control button { + background-color: transparent; + cursor: pointer; + display: block; + text-align: start; +} + +.clear { + clear: both; +} + +.footerLangSwitch, +.footerVariantSwitch, +.footerVisitedLinks, +.footerFooter { + display: none; +} + +.showLangSwitch, +.showVariantSwitch, +.showVisitedLinks, +.showFooter { + display: block; +} + +/* clears the 'X' from Chrome's search input */ +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-results-button, +input[type="search"]::-webkit-search-results-decoration { display: none; } + +span.math:has(> mjx-container[display]) { + display: block; +} + +@supports selector(.math:has(> mjx-container)){ + .math{ + visibility: hidden; + } + .math:has(> mjx-container){ + visibility: visible; + } +} +.math.align-left > mjx-container{ + text-align: left !important; +} + +.math.align-center > mjx-container{ + text-align: center !important; +} + +.math.align-right > mjx-container{ + text-align: right !important; +} + +.scrollbar-measure { + /* https://davidwalsh.name/detect-scrollbar-width */ + height: 100px; + overflow: scroll; + position: absolute; + width: 100px; + top: -9999px; +} + +.a11y-only { + /* idea taken from https://www.filamentgroup.com/lab/a11y-form-labels.html */ + clip-path: polygon(0 0, 1px 0, 1px 1px, 0 1px); + overflow: hidden; + position: absolute; + height: 1px; + transform: translateY(-100%); + transition: transform .5s cubic-bezier(.18,.89,.32,1.28); + white-space: nowrap; + width: 1px; +} + +/* filament style for making action visible on focus - not adapted yet +.a11y-only:focus { + position: fixed; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; + margin: 0 0 0 -100px; + top: -.3em; + left: 50%; + text-align: center; + width: 200px; + background: rgba( 255, 255, 255, 1 ); + color: rgba( 54, 133, 18, 1 ); + padding: .8em 0 .7em; + font-size: 16px; + z-index: 5000; + text-decoration: none; + border-bottom-right-radius: 8px; + border-bottom-left-radius: 8px; + outline: 0; + transform: translateY(0%); +} +*/ + +.mermaid-container.align-right { + text-align: right; +} + +.mermaid-container.align-center { + text-align: center; +} + +.mermaid-container.align-left { + text-align: left; +} + +.searchform { + display: flex; +} + +.searchform input { + flex: 1 0 60%; + border-radius: 4px; + border: 2px solid rgba( 134, 134, 134, .125 ); + background: rgba( 134, 134, 134, .125 ); + display: block; + margin: 0; + margin-inline-end: .5rem; +} + +.searchform input::-webkit-input-placeholder, +.searchform input::placeholder { + color: rgba( 134, 134, 134, 1 ); + opacity: .666; +} + +.searchform .btn { + display: inline-flex; +} + +.searchhint { + margin-top: 1rem; + height: 1.5rem; +} + +#R-searchresults a.autocomplete-suggestion { + display: block; + font-size: 1.3rem; + font-weight: 500; + line-height: 1.5rem; + padding: 1rem; + text-decoration: none; +} + +#R-searchresults a.autocomplete-suggestion:after { + height: 0; +} + +#R-searchresults .autocomplete-suggestion > .breadcrumbs { + font-size: .9rem; + font-weight: 400; + margin-top: .167em; + padding-left: .2em; + padding-right: .2em; +} + +#R-searchresults .autocomplete-suggestion > .context { + font-size: 1rem; + font-weight: 300; + margin-top: .66em; + padding-left: .1em; + padding-right: .1em; +} + +.badge { + border-radius: 3px; + display: inline-block; + font-size: .8rem; + font-weight: 500; + vertical-align: middle; +} + +.badge > * { + border-radius: 3px; + border-style: solid; + border-width: 1px; + display: inline-block; + padding: 0 .25rem +} + +.badge > .badge-title { + background-color: rgba( 16, 16, 16, 1 ); + border-inline-end: 0; + border-start-end-radius: 0; + border-end-end-radius: 0; + color: rgba( 240, 240, 240, 1 ); + filter: contrast(2); + opacity: .75; +} + +.badge.badge-with-title > .badge-content { + border-start-start-radius: 0; + border-end-start-radius: 0; +} + +.badge-content:after { + /* avoid breakage if no content is given */ + content: "\200b"; +} + +/* task list and its checkboxes */ +article ul > li:has(> input[type="checkbox"]) { + list-style: none; + margin-inline-start: -1rem; +} + +article ul > li:has(> input[type="checkbox"])::before { + content: "\200B"; /* accessibilty for Safari https://developer.mozilla.org/en-US/docs/Web/CSS/list-style */ +} + +/* https://moderncss.dev/pure-css-custom-checkbox-style/ */ +article ul > li > input[type="checkbox"] { + -webkit-appearance: none; + appearance: none; + /* For iOS < 15 */ + border: 0.15em solid currentColor; + border-radius: 0.15em; + display: inline-grid; + font: inherit; + height: 1.15em; + margin: 0; + place-content: center; + transform: translateY(-0.075em); + width: 1.15em; +} + +article ul > li > input[type="checkbox"]::before { + box-shadow: inset 1em 1em var(--INTERNAL-PRIMARY-color); + clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); + content: ""; + height: 0.65em; + transform: scale(0); + transform-origin: bottom left; + transition: 120ms transform ease-in-out; + width: 0.65em; + /* Windows High Contrast Mode fallback must be last */ + background-color: CanvasText; +} + +article ul > li > input[type="checkbox"]:checked::before { + transform: scale(1); +} + +/* CSS Lightbox https://codepen.io/gschier/pen/kyRXVx */ +.lightbox-back { + align-items: center; + background: rgba( 0, 0, 0, .8 ); + bottom: 0; + display: none; + justify-content: center; + left: 0; + position: fixed; + right: 0; + text-align: center; + top: 0; + white-space: nowrap; + z-index: 1999; +} + +.lightbox-back:target { + display: flex; +} + +.lightbox-back img { + max-height: 95%; + max-width: 95%; + overflow: auto; + padding: min(2vh, 2vw); +} + +/* basic menu list styles (non-collapsible) */ + +#R-sidebar ul > li > :is( a, span ) { + display: block; + position: relative; +} + +#R-sidebar ul.space > li > * { + padding-bottom: .125rem; + padding-top: .125rem; +} +#R-sidebar ul.space > li > ul { + padding-bottom: 0; + padding-top: 0; +} + +#R-sidebar ul.morespace > li > * { + padding-bottom: .25rem; + padding-top: .25rem; +} +#R-sidebar ul.morespace > li > ul { + padding-bottom: 0; + padding-top: 0; +} + +#R-sidebar ul.enlarge > li > :is( a, span ) { + font-size: 1.1rem; + line-height: 2rem; +} +#R-sidebar ul.enlarge > li > a > .read-icon { + margin-top: .5rem; +} +#R-sidebar ul.enlarge > li > ul > li:last-child { + padding-bottom: 1rem; +} + +#R-sidebar ul ul { + padding-inline-start: 1rem; +} + +/* collapsible menu style overrides */ + +#R-sidebar ul.collapsible-menu > li { + position: relative; +} + +#R-sidebar ul.collapsible-menu > li > input { + -webkit-appearance: none; + appearance: none; + cursor: pointer; + display: inline-block; + margin-left: 0; + margin-right: 0; + margin-top: .65rem; + position: absolute; + width: 1rem; + z-index: 1; +} +#R-sidebar ul.collapsible-menu.enlarge > li > input { + margin-top: .9rem; +} + +#R-sidebar ul.collapsible-menu > li > label { + cursor: pointer; + display: inline-block; + inset-inline-start: 0; + margin-bottom: 0; /* nucleus */ + padding-inline-start: .125rem; + position: absolute; + width: 1rem; + z-index: 2; +} +#R-sidebar ul.collapsible-menu.enlarge > li > label { + font-size: 1.1rem; + line-height: 2rem; +} + +#R-sidebar ul.collapsible-menu > li > label:after { + content: ""; + display: block; + height: 1px; + transition: width 0.5s ease; + width: 0%; +} + +#R-sidebar ul.collapsible-menu > li > label:hover:after { + width: 100%; +} + +#R-sidebar ul.collapsible-menu > li > label > .fas { + font-size: .8rem; + width: .6rem; +} + +#R-sidebar ul.collapsible-menu > li > :is( a, span ) { + display: inline-block; + width: 100%; +} + +/* menu states for not(.collapsible-menu) */ + +#R-sidebar ul ul { + display: none; +} + +#R-sidebar ul > li.parent > ul, +#R-sidebar ul > li.active > ul, +#R-sidebar ul > li.alwaysopen > ul { + display: block; +} + +/* closed menu */ + +#R-sidebar ul.collapsible-menu > li > input + label ~ ul { + display: none; +} + +#R-sidebar ul.collapsible-menu > li > input + label > .fa-chevron-down { + display: none; +} +#R-sidebar ul.collapsible-menu > li > input + label > .fa-chevron-right { + display: inline-block; +} + +/* open menu */ + +#R-sidebar ul.collapsible-menu > li > input:checked + label ~ ul { + display: block; +} + +#R-sidebar ul.collapsible-menu > li > input:checked + label > .fa-chevron-down { + display: inline-block; +} +#R-sidebar ul.collapsible-menu > li > input:checked + label > .fa-chevron-right { + display: none; +} + +/* adjust menu for RTL reading direction */ + +html[dir="rtl"] #R-sidebar ul.collapsible-menu > li > label > i.fa-chevron-right { + transform: scaleX(-1); +} + +.columnize{ + column-count: 2; +} +@media screen and (min-width: 79.25rem) { + .columnize{ + column-count: 3; + } +} + +.columnize > *{ + break-inside: avoid-column; +} + +.columnize .breadcrumbs{ + font-size: .859625rem; +} + +#R-body .tab-panel{ + margin-bottom: 1.5rem; + margin-top: 1.5rem; +} + +#R-body .tab-nav{ + display: flex; + flex-wrap: wrap; +} + +#R-body .tab-nav-title{ + font-size: .9rem; + font-weight: 400; + line-height: 1.42857143; + padding: .2rem 0; + margin-inline-start: .6rem; +} + +#R-body .tab-nav-button{ + -webkit-appearance: none; + appearance: none; + background-color: transparent; + border: 1px solid transparent; + display: block; + font-size: .9rem; + font-weight: 300; + line-height: 1.42857143; + margin-inline-start: .6rem; +} + +#R-body .tab-nav-button.active{ + border-radius: 2px 2px 0 0; + cursor: default; +} + +#R-body .tab-nav-button > .tab-nav-text{ + border-bottom-style: solid; + border-bottom-width: .15rem; + display: block; + padding: .2rem .6rem 0 .6rem; +} +/* https://stackoverflow.com/a/46452396 */ +#R-body .tab-nav-button.active > .tab-nav-text{ + border-bottom-color: transparent; + border-radius: 1px 1px 0 0; + text-shadow: -0.06ex 0 0 currentColor, 0.06ex 0 0 currentColor; +} +@supports (-webkit-text-stroke-width: 0.04ex){ + #R-body .tab-nav-button.active > .tab-nav-text{ + text-shadow: -0.03ex 0 0 currentColor, 0.03ex 0 0 currentColor; + -webkit-text-stroke-width: 0.04ex; + } +} + +#R-body .tab-content{ + border-style: solid; + border-width: 1px; + display: none; + /* if setting a border to 1px, a browser instead sets it to 1dppx which is not + usable as a unit yet, so we have to calculate it ourself */ + margin-top: calc( -1px / var(--bpx) ); + z-index: 10; +} + +#R-body .tab-content.active{ + display: block; +} + +#R-body .tab-content-text{ + padding: 1rem; +} + +/* remove margin if only a single code block is contained in the tab (FF without :has using .codify style) */ +#R-body .tab-content.codify > .tab-content-text{ + padding: 0; +} +#R-body .tab-content-text:has(> div.highlight:only-child){ + padding: 0; +} + +/* remove border from code block if single in tab */ +#R-body .tab-content-text > div.highlight:only-child > div, +#R-body .tab-content-text > div.highlight:only-child pre:not(.mermaid), +#R-body .tab-content-text > pre:not(.mermaid).pre-code:only-child{ + border-width: 0; +} + +/* bordering the menu and topbar */ + +#R-topbar { + border-bottom-style: solid; + border-bottom-width: 1px; +} + +#R-header-topbar { + border-bottom-color: transparent; + border-bottom-style: solid; + border-bottom-width: 1px; + border-inline-end-style: solid; + border-inline-end-width: 1px; + height: 3rem; + position: absolute; + top: 0; + width: 100%; + z-index: 1; +} + +#R-header-wrapper, +#R-homelinks, +#R-content-wrapper > * { + border-inline-end-style: solid; + border-inline-end-width: 1px; +} + +#topics > ul { + margin-top: 1rem; +} + +#R-sidebar ul.collapsible-menu li.active > a{ + border-style: solid; + border-width: 1px; + padding-bottom: calc( .25rem - var(--bpx1)*1px); + padding-left: calc( 1rem - var(--bpx1)*1px); + padding-right: calc( 1rem - var(--bpx1)*1px); + padding-top: calc( .25rem - var(--bpx1)*1px); + width: calc(100% + var(--bpx1)*1px); +} + +#R-menu-footer { + padding-bottom: 1rem; +} + +#R-topics { + padding-top: 1rem; +} + +.term-list ul, +.term-list li { + list-style: none; + display: inline; + padding: 0; +} +.term-list i ~ ul > li:before{ + content: " " +} +.term-list ul > li ~ li:before { + content: " | " +} diff --git a/packages/kbot/systems/workspace/docs.kbot.polymech.com/css/variant-internal.css b/packages/kbot/systems/workspace/docs.kbot.polymech.com/css/variant-internal.css new file mode 100644 index 00000000..daa3932b --- /dev/null +++ b/packages/kbot/systems/workspace/docs.kbot.polymech.com/css/variant-internal.css @@ -0,0 +1,116 @@ +:root { + /* initially use section background to avoid flickering on load when a non default variant is active; + this is only possible because every color variant defines this variable, otherwise we would have been lost */ + --INTERNAL-PRIMARY-color: var(--PRIMARY-color, var(--MENU-HEADER-BG-color, rgba( 0, 0, 0, 0 ))); /* not --INTERNAL-MENU-HEADER-BG-color */ + --INTERNAL-SECONDARY-color: var(--SECONDARY-color, var(--MAIN-LINK-color, rgba( 72, 106, 201, 1 ))); /* not --INTERNAL-MAIN-LINK-color */ + --INTERNAL-ACCENT-color: var(--ACCENT-color, rgba( 255, 255, 0, 1 )); + + --INTERNAL-MAIN-TOPBAR-BORDER-color: var(--MAIN-TOPBAR-BORDER-color, transparent); + --INTERNAL-MAIN-LINK-color: var(--MAIN-LINK-color, var(--SECONDARY-color, rgba( 72, 106, 201, 1 ))); /* not --INTERNAL-SECONDARY-color */ + --INTERNAL-MAIN-LINK-HOVER-color: var(--MAIN-LINK-HOVER-color, var(--INTERNAL-MAIN-LINK-color)); + --INTERNAL-MAIN-BG-color: var(--MAIN-BG-color, rgba( 255, 255, 255, 1 )); + + --INTERNAL-MAIN-TEXT-color: var(--MAIN-TEXT-color, rgba( 16, 16, 16, 1 )); + --INTERNAL-MAIN-TITLES-TEXT-color: var(--MAIN-TITLES-TEXT-color, var(--INTERNAL-MAIN-TEXT-color)); + + --INTERNAL-MAIN-TITLES-H1-color: var(--MAIN-TITLES-H1-color, var(--INTERNAL-MAIN-TEXT-color)); + --INTERNAL-MAIN-TITLES-H2-color: var(--MAIN-TITLES-H2-color, var(--INTERNAL-MAIN-TITLES-TEXT-color)); + --INTERNAL-MAIN-TITLES-H3-color: var(--MAIN-TITLES-H3-color, var(--INTERNAL-MAIN-TITLES-H2-color)); + --INTERNAL-MAIN-TITLES-H4-color: var(--MAIN-TITLES-H4-color, var(--INTERNAL-MAIN-TITLES-H3-color)); + --INTERNAL-MAIN-TITLES-H5-color: var(--MAIN-TITLES-H5-color, var(--INTERNAL-MAIN-TITLES-H4-color)); + --INTERNAL-MAIN-TITLES-H6-color: var(--MAIN-TITLES-H6-color, var(--INTERNAL-MAIN-TITLES-H5-color)); + + --INTERNAL-MAIN-font: var(--MAIN-font, "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif); + --INTERNAL-MAIN-TITLES-TEXT-font: var(--MAIN-TITLES-TEXT-font, var(--INTERNAL-MAIN-font)); + + --INTERNAL-MAIN-TITLES-H1-font: var(--MAIN-TITLES-H1-font, var(--INTERNAL-MAIN-font)); + --INTERNAL-MAIN-TITLES-H2-font: var(--MAIN-TITLES-H2-font, var(--INTERNAL-MAIN-TITLES-TEXT-font)); + --INTERNAL-MAIN-TITLES-H3-font: var(--MAIN-TITLES-H3-font, var(--INTERNAL-MAIN-TITLES-H2-font)); + --INTERNAL-MAIN-TITLES-H4-font: var(--MAIN-TITLES-H4-font, var(--INTERNAL-MAIN-TITLES-H3-font)); + --INTERNAL-MAIN-TITLES-H5-font: var(--MAIN-TITLES-H5-font, var(--INTERNAL-MAIN-TITLES-H4-font)); + --INTERNAL-MAIN-TITLES-H6-font: var(--MAIN-TITLES-H6-font, var(--INTERNAL-MAIN-TITLES-H5-font)); + + --INTERNAL-CODE-theme: var(--CODE-theme, relearn-light); + --INTERNAL-CODE-font: var(--CODE-font, "Consolas", menlo, monospace); + --INTERNAL-CODE-BLOCK-color: var(--CODE-BLOCK-color, var(--MAIN-CODE-color, rgba( 39, 40, 34, 1 ))); + --INTERNAL-CODE-BLOCK-BG-color: var(--CODE-BLOCK-BG-color, var(--MAIN-CODE-BG-color, rgba( 250, 250, 250, 1 ))); + --INTERNAL-CODE-BLOCK-BORDER-color: var(--CODE-BLOCK-BORDER-color, var(--MAIN-CODE-BG-color, var(--INTERNAL-CODE-BLOCK-BG-color))); + --INTERNAL-CODE-INLINE-color: var(--CODE-INLINE-color, rgba( 94, 94, 94, 1 )); + --INTERNAL-CODE-INLINE-BG-color: var(--CODE-INLINE-BG-color, rgba( 255, 250, 233, 1 )); + --INTERNAL-CODE-INLINE-BORDER-color: var(--CODE-INLINE-BORDER-color, rgba( 251, 240, 203, 1 )); + + --INTERNAL-BROWSER-theme: var(--BROWSER-theme, light); + --INTERNAL-MERMAID-theme: var(--CONFIG-MERMAID-theme, var(--MERMAID-theme, var(--INTERNAL-PRINT-MERMAID-theme))); + --INTERNAL-OPENAPI-theme: var(--CONFIG-OPENAPI-theme, var(--OPENAPI-theme, var(--SWAGGER-theme, var(--INTERNAL-PRINT-OPENAPI-theme)))); + --INTERNAL-OPENAPI-CODE-theme: var(--CONFIG-OPENAPI-CODE-theme, var(--OPENAPI-CODE-theme, --INTERNAL-PRINT-OPENAPI-CODE-theme)); + + --INTERNAL-TAG-BG-color: var(--TAG-BG-color, var(--INTERNAL-PRIMARY-color)); + + --INTERNAL-MENU-BORDER-color: var(--MENU-BORDER-color, transparent); + --INTERNAL-MENU-TOPBAR-BORDER-color: var(--MENU-TOPBAR-BORDER-color, var(--INTERNAL-MENU-HEADER-BG-color)); + --INTERNAL-MENU-TOPBAR-SEPARATOR-color: var(--MENU-TOPBAR-SEPARATOR-color, transparent); + --INTERNAL-MENU-HEADER-BG-color: var(--MENU-HEADER-BG-color, var(--PRIMARY-color, rgba( 0, 0, 0, 0 ))); /* not --INTERNAL-PRIMARY-color */ + --INTERNAL-MENU-HEADER-BORDER-color: var(--MENU-HEADER-BORDER-color, var(--INTERNAL-MENU-HEADER-BG-color)); + --INTERNAL-MENU-HEADER-SEPARATOR-color: var(--MENU-HEADER-SEPARATOR-color, var(--INTERNAL-MENU-HEADER-BORDER-color)); + + --INTERNAL-MENU-HOME-LINK-color: var(--MENU-HOME-LINK-color, rgba( 50, 50, 50, 1 )); + --INTERNAL-MENU-HOME-LINK-HOVER-color: var(--MENU-HOME-LINK-HOVER-color, var(--MENU-HOME-LINK-HOVERED-color, rgba( 128, 128, 128, 1 ))); + + --INTERNAL-MENU-SEARCH-color: var(--MENU-SEARCH-color, var(--MENU-SEARCH-BOX-ICONS-color, rgba( 224, 224, 224, 1 ))); + --INTERNAL-MENU-SEARCH-BG-color: var(--MENU-SEARCH-BG-color, rgba( 50, 50, 50, 1 )); + --INTERNAL-MENU-SEARCH-BORDER-color: var(--MENU-SEARCH-BORDER-color, var(--MENU-SEARCH-BOX-color, var(--INTERNAL-MENU-SEARCH-BG-color))); + + --INTERNAL-MENU-SECTIONS-ACTIVE-BG-color: var(--MENU-SECTIONS-ACTIVE-BG-color, rgba( 0, 0, 0, .166 )); + --INTERNAL-MENU-SECTIONS-BG-color: var(--MENU-SECTIONS-BG-color, rgba( 40, 40, 40, 1 )); + --INTERNAL-MENU-SECTIONS-LINK-color: var(--MENU-SECTIONS-LINK-color, rgba( 186, 186, 186, 1 )); + --INTERNAL-MENU-SECTIONS-LINK-HOVER-color: var(--MENU-SECTIONS-LINK-HOVER-color, var(--INTERNAL-MENU-SECTIONS-LINK-color)); + --INTERNAL-MENU-SECTION-ACTIVE-CATEGORY-color: var(--MENU-SECTION-ACTIVE-CATEGORY-color, rgba( 68, 68, 68, 1 )); + --INTERNAL-MENU-SECTION-ACTIVE-CATEGORY-BG-color: var(--MENU-SECTION-ACTIVE-CATEGORY-BG-color, var(--INTERNAL-MAIN-BG-color)); + --INTERNAL-MENU-SECTION-ACTIVE-CATEGORY-BORDER-color: var(--MENU-SECTION-ACTIVE-CATEGORY-BORDER-color, transparent); + + --INTERNAL-MENU-VISITED-color: var(--MENU-VISITED-color, var(--INTERNAL-SECONDARY-color)); + --INTERNAL-MENU-SECTION-SEPARATOR-color: var(--MENU-SECTION-SEPARATOR-color, var(--MENU-SECTION-HR-color, rgba( 96, 96, 96, 1 ))); + + --INTERNAL-BOX-CAPTION-color: var(--BOX-CAPTION-color, rgba( 255, 255, 255, 1 )); + --INTERNAL-BOX-BG-color: var(--BOX-BG-color, rgba( 255, 255, 255, .833 )); + --INTERNAL-BOX-TEXT-color: var(--BOX-TEXT-color, var(--INTERNAL-MAIN-TEXT-color)); + + --INTERNAL-BOX-BLUE-color: var(--BOX-BLUE-color, rgba( 48, 117, 229, 1 )); + --INTERNAL-BOX-GREEN-color: var(--BOX-GREEN-color, rgba( 42, 178, 24, 1 )); + --INTERNAL-BOX-GREY-color: var(--BOX-GREY-color, rgba( 160, 160, 160, 1 )); + --INTERNAL-BOX-ORANGE-color: var(--BOX-ORANGE-color, rgba( 237, 153, 9, 1 )); + --INTERNAL-BOX-RED-color: var(--BOX-RED-color, rgba( 224, 62, 62, 1 )); + + --INTERNAL-BOX-INFO-color: var(--BOX-INFO-color, var(--INTERNAL-BOX-BLUE-color)); + --INTERNAL-BOX-NEUTRAL-color: var(--BOX-NEUTRAL-color, var(--INTERNAL-BOX-GREY-color)); + --INTERNAL-BOX-NOTE-color: var(--BOX-NOTE-color, var(--INTERNAL-BOX-ORANGE-color)); + --INTERNAL-BOX-TIP-color: var(--BOX-TIP-color, var(--INTERNAL-BOX-GREEN-color)); + --INTERNAL-BOX-WARNING-color: var(--BOX-WARNING-color, var(--INTERNAL-BOX-RED-color)); + + --INTERNAL-BOX-BLUE-TEXT-color: var(--BOX-BLUE-TEXT-color, var(--INTERNAL-BOX-TEXT-color)); + --INTERNAL-BOX-GREEN-TEXT-color: var(--BOX-GREEN-TEXT-color, var(--INTERNAL-BOX-TEXT-color)); + --INTERNAL-BOX-GREY-TEXT-color: var(--BOX-GREY-TEXT-color, var(--INTERNAL-BOX-TEXT-color)); + --INTERNAL-BOX-ORANGE-TEXT-color: var(--BOX-ORANGE-TEXT-color, var(--INTERNAL-BOX-TEXT-color)); + --INTERNAL-BOX-RED-TEXT-color: var(--BOX-RED-TEXT-color, var(--INTERNAL-BOX-TEXT-color)); + + --INTERNAL-BOX-INFO-TEXT-color: var(--BOX-INFO-TEXT-color, var(--INTERNAL-BOX-BLUE-TEXT-color)); + --INTERNAL-BOX-NEUTRAL-TEXT-color: var(--BOX-NEUTRAL-TEXT-color, var(--INTERNAL-BOX-GREY-TEXT-color)); + --INTERNAL-BOX-NOTE-TEXT-color: var(--BOX-NOTE-TEXT-color, var(--INTERNAL-BOX-ORANGE-TEXT-color)); + --INTERNAL-BOX-TIP-TEXT-color: var(--BOX-TIP-TEXT-color, var(--INTERNAL-BOX-GREEN-TEXT-color)); + --INTERNAL-BOX-WARNING-TEXT-color: var(--BOX-WARNING-TEXT-color, var(--INTERNAL-BOX-RED-TEXT-color)); + + /* print style, values taken from relearn-light as it is used as a default print style */ + --INTERNAL-PRINT-MAIN-BG-color: var(--PRINT-MAIN-BG-color, rgba( 255, 255, 255, 1 )); + --INTERNAL-PRINT-CODE-font: var(--PRINT-CODE-font, "Consolas", menlo, monospace); + --INTERNAL-PRINT-TAG-BG-color: var(--PRINT-TAG-BG-color, rgba( 125, 201, 3, 1 )); + --INTERNAL-PRINT-MAIN-font: var(--PRINT-MAIN-font, "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif); + --INTERNAL-PRINT-MAIN-TEXT-color: var(--PRINT-MAIN-TEXT-color, rgba( 16, 16, 16, 1 )); + --INTERNAL-PRINT-MERMAID-theme: var(--PRINT-MERMAID-theme, default); + --INTERNAL-PRINT-OPENAPI-theme: var(--PRINT-OPENAPI-theme, var(--PRINT-SWAGGER-theme, light)); + --INTERNAL-PRINT-OPENAPI-CODE-theme: var(--PRINT-OPENAPI-CODE-theme, idea); + + --INTERNAL-MENU-WIDTH-S: var(--MENU-WIDTH-S, 14.375rem); + --INTERNAL-MENU-WIDTH-M: var(--MENU-WIDTH-M, 14.375rem); + --INTERNAL-MENU-WIDTH-L: var(--MENU-WIDTH-L, 18.75rem); + --INTERNAL-MAIN-WIDTH-MAX: var(--MAIN-WIDTH-MAX, 81.25rem); +} diff --git a/packages/kbot/systems/workspace/docs.kbot.polymech.com/css/variant.css b/packages/kbot/systems/workspace/docs.kbot.polymech.com/css/variant.css new file mode 100644 index 00000000..3dab7516 --- /dev/null +++ b/packages/kbot/systems/workspace/docs.kbot.polymech.com/css/variant.css @@ -0,0 +1,515 @@ +@import "variant-internal.css"; + +html { + color-scheme: only var(--INTERNAL-BROWSER-theme); +} + +body { + background-color: var(--INTERNAL-MAIN-BG-color); + color: var(--INTERNAL-MAIN-TEXT-color); + font-family: var(--INTERNAL-MAIN-font); +} + +a, +.anchor, +.topbar-button button, +#R-searchresults .autocomplete-suggestion { + color: var(--INTERNAL-MAIN-LINK-color); +} + +a:hover, +a:active, +a:focus, +.anchor:hover, +.anchor:active, +.anchor:focus, +.topbar-button button:hover, +.topbar-button button:active, +.topbar-button button:focus{ + color: var(--INTERNAL-MAIN-LINK-HOVER-color); +} + +#R-sidebar { + background: var(--INTERNAL-MENU-SECTIONS-BG-color); +} + +#R-header-wrapper { + background-color: var(--INTERNAL-MENU-HEADER-BG-color); + color: var(--INTERNAL-MENU-SEARCH-color); +} + +.searchbox { + border-color: var(--INTERNAL-MENU-SEARCH-BORDER-color); + background-color: var(--INTERNAL-MENU-SEARCH-BG-color); +} + +#R-sidebar .searchbox > :first-child, +#R-sidebar .searchbox > :last-child { + color: var(--INTERNAL-MENU-SEARCH-color); +} + +.searchbox input::-webkit-input-placeholder, +.searchbox input::placeholder { + color: var(--INTERNAL-MENU-SEARCH-color); +} + +#R-sidebar .collapsible-menu label, +#R-sidebar .menu-control, +#R-sidebar :is( a, span ) { + color: var(--INTERNAL-MENU-SECTIONS-LINK-color); +} + +#R-sidebar select:hover, +#R-sidebar .collapsible-menu li:not(.active) > label:hover, +#R-sidebar .menu-control:hover, +#R-sidebar a:hover { + color: var(--INTERNAL-MENU-SECTIONS-LINK-HOVER-color); +} + +#R-sidebar ul.enlarge > li.parent, +#R-sidebar ul.enlarge > li.active { + background-color: var(--INTERNAL-MENU-SECTIONS-ACTIVE-BG-color); +} + +#R-sidebar li.active > label, +#R-sidebar li.active > a { + color: var(--INTERNAL-MENU-SECTION-ACTIVE-CATEGORY-color); +} + +#R-sidebar li.active > a { + background-color: var(--INTERNAL-MENU-SECTION-ACTIVE-CATEGORY-BG-color); +} + +#R-sidebar ul li > a .read-icon { + color: var(--INTERNAL-MENU-VISITED-color); +} + +#R-sidebar .nav-title { + color: var(--INTERNAL-MENU-SECTIONS-LINK-color); +} + +#R-content-wrapper hr { + border-color: var(--INTERNAL-MENU-SECTION-SEPARATOR-color); +} + +#R-footer { + color: var(--INTERNAL-MENU-SECTIONS-LINK-color); +} + +mark { + background-image: linear-gradient( + to right, + color-mix( in srgb, var(--INTERNAL-ACCENT-color) 20%, transparent ), + color-mix( in srgb, var(--INTERNAL-ACCENT-color) 90%, transparent ) 4%, + color-mix( in srgb, var(--INTERNAL-ACCENT-color) 40%, transparent ) + ); +} + +kbd { + color: var(--INTERNAL-TEXT-color); + font-family: var(--INTERNAL-CODE-font); +} + +h1 { + color: var(--INTERNAL-MAIN-TITLES-H1-color); + font-family: var(--INTERNAL-MAIN-TITLES-H1-font); +} + +h2 { + color: var(--INTERNAL-MAIN-TITLES-H2-color); + font-family: var(--INTERNAL-MAIN-TITLES-H2-font); +} + +h3, .article-subheading { + color: var(--INTERNAL-MAIN-TITLES-H3-color); + font-family: var(--INTERNAL-MAIN-TITLES-H3-font); +} + +h4 { + color: var(--INTERNAL-MAIN-TITLES-H4-color); + font-family: var(--INTERNAL-MAIN-TITLES-H4-font); +} + +h5 { + color: var(--INTERNAL-MAIN-TITLES-H5-color); + font-family: var(--INTERNAL-MAIN-TITLES-H5-font); +} + +h6 { + color: var(--INTERNAL-MAIN-TITLES-H6-color); + font-family: var(--INTERNAL-MAIN-TITLES-H6-font); +} + +div.box { + background-color: var(--VARIABLE-BOX-color); + border-color: var(--VARIABLE-BOX-color); +} + +div.box > .box-label { + color: var(--VARIABLE-BOX-CAPTION-color); +} + +div.box > .box-content { + background-color: var(--VARIABLE-BOX-BG-color); + color: var(--VARIABLE-BOX-TEXT-color); +} + +.cstyle.info { + --VARIABLE-BOX-color: var(--INTERNAL-BOX-INFO-color); + --VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-INFO-TEXT-color); +} + +.cstyle.warning { + --VARIABLE-BOX-color: var(--INTERNAL-BOX-WARNING-color); + --VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-WARNING-TEXT-color); +} + +.cstyle.note { + --VARIABLE-BOX-color: var(--INTERNAL-BOX-NOTE-color); + --VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-NOTE-TEXT-color); +} + +.cstyle.tip { + --VARIABLE-BOX-color: var(--INTERNAL-BOX-TIP-color); + --VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-TIP-TEXT-color); +} + +.cstyle.primary { + --VARIABLE-BOX-color: var(--INTERNAL-PRIMARY-color); + --VARIABLE-BOX-TEXT-color: var(--INTERNAL-MAIN-TEXT-color); +} + +.cstyle.secondary { + --VARIABLE-BOX-color: var(--INTERNAL-SECONDARY-color); + --VARIABLE-BOX-TEXT-color: var(--INTERNAL-MAIN-TEXT-color); +} + +.cstyle.accent { + --VARIABLE-BOX-color: var(--INTERNAL-ACCENT-color); + --VARIABLE-BOX-TEXT-color: var(--INTERNAL-MAIN-TEXT-color); +} + +.cstyle.blue { + --VARIABLE-BOX-color: var(--INTERNAL-BOX-BLUE-color); + --VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-BLUE-TEXT-color); +} + +.cstyle.green { + --VARIABLE-BOX-color: var(--INTERNAL-BOX-GREEN-color); + --VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-GREEN-TEXT-color); +} + +.cstyle.grey { + --VARIABLE-BOX-color: var(--INTERNAL-BOX-GREY-color); + --VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-GREY-TEXT-color); +} + +.cstyle.orange { + --VARIABLE-BOX-color: var(--INTERNAL-BOX-ORANGE-color); + --VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-ORANGE-TEXT-color); +} + +.cstyle.red { + --VARIABLE-BOX-color: var(--INTERNAL-BOX-RED-color); + --VARIABLE-BOX-TEXT-color: var(--INTERNAL-BOX-RED-TEXT-color); +} + +.cstyle.code { + --VARIABLE-BOX-color: var(--INTERNAL-CODE-BLOCK-BORDER-color); + --VARIABLE-BOX-CAPTION-color: var(--INTERNAL-CODE-BLOCK-color); + --VARIABLE-BOX-BG-color: var(--INTERNAL-CODE-BLOCK-BG-color); + --VARIABLE-BOX-TEXT-color: var(--INTERNAL-CODE-BLOCK-color); +} + +.cstyle.transparent { + --VARIABLE-BOX-color: transparent; + --VARIABLE-BOX-CAPTION-color: var(--INTERNAL-MAIN-TITLES-TEXT-color); + --VARIABLE-BOX-BG-color: transparent; + --VARIABLE-BOX-TEXT-color: var(--INTERNAL-MAIN-TEXT-color); +} + +code, +kbd, +pre:not(.mermaid), +samp { + font-family: var(--INTERNAL-CODE-font); +} + +code { + background-color: var(--INTERNAL-CODE-INLINE-BG-color); + border-color: var(--INTERNAL-CODE-INLINE-BORDER-color); + color: var(--INTERNAL-CODE-INLINE-color); +} + +pre:not(.mermaid) { + background-color: var(--INTERNAL-CODE-BLOCK-BG-color); + border-color: var(--INTERNAL-CODE-BLOCK-BORDER-color); + color: var(--INTERNAL-CODE-BLOCK-color); +} + +div.highlight > div { + background-color: var(--INTERNAL-CODE-BLOCK-BG-color); + border-color: var(--INTERNAL-CODE-BLOCK-BORDER-color); +} + +table { + background-color: var(--INTERNAL-MAIN-BG-color); +} + +.lightbox-back img{ + background-color: var(--INTERNAL-MAIN-BG-color); +} + +#R-topbar { + background-color: var(--INTERNAL-MAIN-BG-color); +} + +.topbar-sidebar-divider { + border-inline-start-color: var(--INTERNAL-MENU-TOPBAR-SEPARATOR-color); +} +@media screen and (max-width: 47.999rem) { + .topbar-sidebar-divider { + border-inline-start-color: transparent; + } +} + +#R-body a[aria-disabled="true"], +#R-searchresults .autocomplete-suggestion > .context { + color: var(--INTERNAL-MAIN-TEXT-color); +} + +#R-searchresults .autocomplete-suggestion > .breadcrumbs { + color: var(--INTERNAL-PRIMARY-color); +} + +.copy-to-clipboard-button { + background-color: var(--INTERNAL-CODE-INLINE-BG-color); + border-color: var(--INTERNAL-CODE-INLINE-BORDER-color); + color: var(--INTERNAL-CODE-INLINE-color); + font-family: var(--INTERNAL-CODE-font); +} + +.copy-to-clipboard-button:hover { + background-color: var(--INTERNAL-CODE-INLINE-color); + color: var(--INTERNAL-CODE-INLINE-BG-color); +} + +div.highlight > div table + .copy-to-clipboard-button, +div.highlight pre:not(.mermaid) + .copy-to-clipboard-button, +pre:not(.mermaid) .copy-to-clipboard-button { + border-color: transparent; + color: var(--INTERNAL-MAIN-LINK-color); +} + +div.highlight > div table + .copy-to-clipboard-button:hover, +div.highlight pre:not(.mermaid) + .copy-to-clipboard-button:hover, +pre:not(.mermaid) .copy-to-clipboard-button:hover { + background-color: var(--INTERNAL-MAIN-LINK-color); + border-color: var(--INTERNAL-MAIN-LINK-color); + color: var(--INTERNAL-CODE-BLOCK-BG-color); +} + +.expand > label { + color: var(--INTERNAL-MAIN-LINK-color); +} + +.expand > label:hover, +.expand > label:active, +.expand > label:focus, +.expand > input:hover + label, +.expand > input:active + label, +.expand > input:focus + label{ + color: var(--INTERNAL-MAIN-LINK-HOVER-color); +} + +.svg-reset-button { + border-color: transparent; + color: var(--INTERNAL-MAIN-LINK-color); +} +.svg-reset-button:hover { + background-color: var(--INTERNAL-MAIN-LINK-color); + border-color: var(--INTERNAL-MAIN-LINK-color); + color: var(--INTERNAL-MAIN-BG-color); +} + +#R-homelinks { + background-color: var(--INTERNAL-MENU-HEADER-BORDER-color); +} + +#R-homelinks a { + color: var(--INTERNAL-MENU-HOME-LINK-color); +} + +#R-homelinks a:hover { + color: var(--INTERNAL-MENU-HOME-LINK-HOVER-color); +} + +#R-homelinks hr { + border-color: var(--INTERNAL-MENU-HEADER-SEPARATOR-color); +} + +.topbar-content { + background-color: var(--INTERNAL-MAIN-BG-color); +} + +.btn { + background-color: var(--VARIABLE-BOX-color); +} + +.btn > * { + border-color: var(--VARIABLE-BOX-color); + color: var(--VARIABLE-BOX-CAPTION-color); +} + +.btn.interactive > *:hover, +.btn.interactive > *:active, +.btn.interactive > *:focus { + background-color: var(--VARIABLE-BOX-BG-color); + color: var(--VARIABLE-BOX-TEXT-color); +} + +.btn.cstyle.transparent { + --VARIABLE-BOX-BG-color: var(--INTERNAL-BOX-BG-color); +} + +.btn.cstyle.interactive.transparent:hover, +.btn.cstyle.interactive.transparent:focus, +.btn.cstyle.interactive.transparent:active, +.btn.cstyle.interactive.transparent:has(a:hover), +.btn.cstyle.interactive.transparent:has(a:focus), +.btn.cstyle.interactive.transparent:has(a:active) { + background-color: var(--INTERNAL-BOX-NEUTRAL-color); +} + +.btn.cstyle.transparent > * { + --VARIABLE-BOX-color: var(--INTERNAL-BOX-NEUTRAL-color); + --VARIABLE-BOX-TEXT-color: var(--VARIABLE-BOX-CAPTION-color); +} + +#R-body .tags { + --VARIABLE-TAGS-color: var(--INTERNAL-MAIN-BG-color); + --VARIABLE-TAGS-BG-color: var(--VARIABLE-BOX-color); +} + +#R-body .tags a.term-link { + background-color: var(--VARIABLE-TAGS-BG-color); + color: var(--VARIABLE-TAGS-color); +} + +#R-body .tags a.term-link:before { + border-right-color: var(--VARIABLE-TAGS-BG-color); +} + +#R-body .tags a.term-link:after { + background-color: var(--VARIABLE-TAGS-color); +} + +.badge > * { + border-color: var(--VARIABLE-BOX-TEXT-color); +} + +.badge > .badge-content { + background-color: var(--VARIABLE-BOX-color); + color: var(--VARIABLE-BOX-CAPTION-color); +} + +.badge.cstyle.transparent{ + --VARIABLE-BOX-BG-color: var(--INTERNAL-BOX-BG-color); +} + +article ul > li > input[type="checkbox"] { + background-color: var(--INTERNAL-MAIN-BG-color); /* box background */ + color: var(--INTERNAL-MAIN-TEXT-color); +} + +#R-body .tab-nav-button { + color: var(--INTERNAL-MAIN-LINK-color); +} +#R-body .tab-nav-button:not(.active):hover, +#R-body .tab-nav-button:not(.active):active, +#R-body .tab-nav-button:not(.active):focus { + color: var(--INTERNAL-MAIN-LINK-HOVER-color); +} + +#R-body .tab-nav-button.active { + background-color: var(--VARIABLE-BOX-color); + border-bottom-color: var(--VARIABLE-BOX-BG-color); + color: var(--VARIABLE-BOX-TEXT-color); +} + +#R-body .tab-nav-button > .tab-nav-text{ + border-bottom-color: var(--VARIABLE-BOX-color); +} +#R-body .tab-nav-button.active > .tab-nav-text{ + background-color: var(--VARIABLE-BOX-BG-color); +} +#R-body .tab-nav-button:not(.active):hover > .tab-nav-text, +#R-body .tab-nav-button:not(.active):active > .tab-nav-text, +#R-body .tab-nav-button:not(.active):focus > .tab-nav-text { + border-bottom-color: var(--INTERNAL-MAIN-LINK-HOVER-color); +} + +#R-body .tab-content{ + background-color: var(--VARIABLE-BOX-color); + border-color: var(--VARIABLE-BOX-color); +} + +#R-body .tab-content-text{ + background-color: var(--VARIABLE-BOX-BG-color); + color: var(--VARIABLE-BOX-TEXT-color); +} + +.tab-panel-style.cstyle.initial, +.tab-panel-style.cstyle.default { + --VARIABLE-BOX-BG-color: var(--INTERNAL-MAIN-BG-color); +} + +.tab-panel-style.cstyle.transparent { + --VARIABLE-BOX-color: rgba( 134, 134, 134, .4 ); + --VARIABLE-BOX-BG-color: transparent; +} + +#R-body .tab-panel-style.cstyle.initial.tab-nav-button.active, +#R-body .tab-panel-style.cstyle.default.tab-nav-button.active, +#R-body .tab-panel-style.cstyle.transparent.tab-nav-button.active{ + background-color: var(--VARIABLE-BOX-BG-color); + border-left-color: var(--VARIABLE-BOX-color); + border-right-color: var(--VARIABLE-BOX-color); + border-top-color: var(--VARIABLE-BOX-color); +} + +#R-body .tab-panel-style.cstyle.code.tab-nav-button:not(.active){ + --VARIABLE-BOX-color: var(--INTERNAL-BOX-NEUTRAL-color); +} + +#R-body .tab-panel-style.cstyle.initial.tab-content, +#R-body .tab-panel-style.cstyle.default.tab-content, +#R-body .tab-panel-style.cstyle.transparent.tab-content{ + background-color: var(--VARIABLE-BOX-BG-color); +} + +#R-topbar { + border-bottom-color: var(--INTERNAL-MAIN-TOPBAR-BORDER-color); +} + +#R-header-topbar { + border-inline-end-color: var(--INTERNAL-MENU-TOPBAR-BORDER-color); +} +@media screen and (max-width: 47.999rem) { + .mobile-support #R-header-topbar { + border-inline-end-color: var(--INTERNAL-MENU-BORDER-color); + } +} + +#R-header-wrapper, +#R-homelinks, +#R-content-wrapper > * { + border-inline-end-color: var(--INTERNAL-MENU-BORDER-color); +} + +#R-sidebar ul.collapsible-menu li.active > a{ + border-bottom-color: var(--INTERNAL-MENU-BORDER-color); + border-top-color: var(--INTERNAL-MENU-BORDER-color); + border-inline-start-color: var(--INTERNAL-MENU-BORDER-color); + border-inline-end-color: var(--INTERNAL-MENU-SECTION-ACTIVE-CATEGORY-BORDER-color); +} diff --git a/packages/kbot/systems/workspace/docs.kbot.polymech.com/files.html b/packages/kbot/systems/workspace/docs.kbot.polymech.com/files.html new file mode 100644 index 00000000..bd51cacf --- /dev/null +++ b/packages/kbot/systems/workspace/docs.kbot.polymech.com/files.html @@ -0,0 +1,434 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +As we look toward the next decade, the concept of “files” as we know them is poised for a dramatic transformation. The traditional notion of discrete, self-contained units of data is evolving into something far more fluid, contextual, and interconnected. This evolution is driven by advancements in technology, changing user expectations, and the increasing complexity of information ecosystems.
+Files have historically been defined by their boundaries—specific containers of data isolated by format, location, and context. However, as technology progresses, this rigid structure is being dismantled in favor of more dynamic and flexible data models. Future files will encapsulate content that seamlessly integrates across applications, platforms, and devices, allowing for a more cohesive digital experience.
+The shift is not just technical but conceptual, as it reflects a broader understanding of information management. In practice, this means transcending the limitations of traditional file systems to embrace structures that prioritize user context, behavioral insights, and multidimensional data relationships.
+In the coming years, we’ll likely see a gradual shift away from traditional hierarchical file systems. The rigid tree-like structures of directories and folders will give way to more advanced systems optimized for accessibility and adaptability, emphasizing content’s intrinsic value over its mere location. Here are key elements of this transformation:
+Content-Centric Storage: Future storage architectures will prioritize the meaning and context of information. By classifying data based on its inherent properties and usage patterns rather than its physical location, users can retrieve and interact with content based on relevance. This approach leverages metadata, semantic analysis, and user habits to create intuitive and personalized storage environments.
+Fluid Documents: The concept of documents is expanding to encompass living, evolving entities that can exist in multiple states and versions simultaneously. These documents will not be tied to a single format or static representation but will adapt fluidly to the context in which they are accessed, offering users the most pertinent and updated view at any moment.
+Dynamic Composition: With dynamic composition, content can assemble itself from various sources in real-time, tailored to specific user needs or contextual triggers. This capability transforms the static consumption of information into a continuously adaptable and interactive experience, ensuring that users receive the most relevant and complete narrative.
+One of the most significant developments in the next decade will be the evolution of annotations. No longer confined to the margins or attached in static form, annotations will become integral to digital content, offering layers of intelligence, interactivity, and customization.
+Annotations will transcend simple text notes, evolving into systems that understand and interact with their environment. They will:
+The transformation of annotations will see them evolve from static marks to complex, interactive ecosystems. Future annotations will:
+Act as interactive layers that provide deeper insights or auxiliary content upon engagement. They transform a document into an exploratory landscape, whereby users can uncover supplementary data or functionality as needed.
+Update dynamically to reflect new information, ensuring that annotations and the content they enhance remain current and accurate. AI-driven mechanisms can automatically incorporate updates or revisions pertinent to the annotation context.
+Spur collaboration by serving as arenas for discussion and idea exchange. Annotations will support real-time collaboration, allowing multiple users to contribute, comment, and modify information within a shared digital space.
+Annotations, enriched with semantics, will become pivotal to understanding content in depth. They will:
+Encode structured data that artificial intelligence systems can process, enabling advanced analysis and inference. This will enhance machine understanding of content contexts and relationships, facilitating more effective automation and decision-making processes.
+Establish links to related concepts and resources, building rich networks of content that offer diverse perspectives and supplemental information.
+Include comprehensive version history and provenance details to ensure transparency and accountability. Users will be able to trace the evolution of annotations and their impacts on the primary content.
+Carry contextual metadata that describes usage patterns, relevancy, and interaction history, enabling future systems to fine-tune experiences based on aggregated insights.
+Content creation and consumption will become increasingly collaborative, moving beyond isolated experiences to foster community-driven innovation and productivity.
+Real-Time Co-Editing: Future collaborative processes will benefit from seamless and simultaneous multi-user editing capabilities. This real-time interaction will reduce barriers to teamwork and increase efficiency, allowing contributors to see and respond to changes instantly.
+Contextual Awareness: As collaborators work on shared content, systems will provide awareness of others’ modifications without overwhelming users. This will create a synchronized understanding across teams and minimize conflicts by highlighting relevant changes and comments in context.
+Automated Synchronization: Professional and personal workflows will increasingly rely on automated, cross-platform synchronization. Data will migrate fluidly across devices—ensuring that users have access to the latest versions of content regardless of their active device or location.
+Intelligent Conflict Resolution: AI will mediate collaborative spaces, providing smart solutions to resolve conflicts that arise from simultaneous content modifications. These systems will offer conflict suggestions or merge decisions, simplifying user interaction and maintaining content integrity.
+Artificial Intelligence will be pivotal in revolutionizing content management systems, offering capabilities that enhance organizational efficiency, user experience, and adaptability.
+Content Organization
+Content Generation
+As content becomes more interconnected, new challenges will emerge that necessitate innovative solutions to safeguard user privacy and content integrity.
+Granular Access Control: Future systems will need robust access management tools to define user permissions at more granular levels, ensuring that different content aspects are accessible according to precise security roles and protocols.
+Encrypted Annotations: Annotations will incorporate cryptographic measures to secure data while allowing authorized collaboration. This encryption ensures privacy while maintaining the flexibility of sharing and editing within trusted communities.
+Blockchain-Based Verification: Content authenticity and integrity will be enhanced through blockchain technology, offering decentralized and tamper-proof means to verify information provenance and historical modifications, increasing trust in digital content.
+The next decade will see a fundamental rethinking of how we create, store, and interact with content. The future of files lies not in their traditional, static form, but in a more dynamic, interconnected, and intelligent ecosystem of information. This vision is underpinned by the transformative role of intelligent annotations, AI-driven content management, and evolving paradigms that prioritize meaning, context, and collaboration. By embracing these changes, we can unlock deeper insights, nurture innovation, and foster richer digital experiences that keep pace with an ever-changing world.
+ + +As we look toward the next decade, the concept of “files” as we know them is poised for a dramatic transformation. The traditional notion of discrete, self-contained units of data is evolving into something far more fluid, contextual, and interconnected. This evolution is driven by advancements in technology, changing user expectations, and the increasing complexity of information ecosystems.
+Files have historically been defined by their boundaries—specific containers of data isolated by format, location, and context. However, as technology progresses, this rigid structure is being dismantled in favor of more dynamic and flexible data models. Future files will encapsulate content that seamlessly integrates across applications, platforms, and devices, allowing for a more cohesive digital experience.
+The shift is not just technical but conceptual, as it reflects a broader understanding of information management. In practice, this means transcending the limitations of traditional file systems to embrace structures that prioritize user context, behavioral insights, and multidimensional data relationships.
+In the coming years, we’ll likely see a gradual shift away from traditional hierarchical file systems. The rigid tree-like structures of directories and folders will give way to more advanced systems optimized for accessibility and adaptability, emphasizing content’s intrinsic value over its mere location. Here are key elements of this transformation:
+Content-Centric Storage: Future storage architectures will prioritize the meaning and context of information. By classifying data based on its inherent properties and usage patterns rather than its physical location, users can retrieve and interact with content based on relevance. This approach leverages metadata, semantic analysis, and user habits to create intuitive and personalized storage environments.
+Fluid Documents: The concept of documents is expanding to encompass living, evolving entities that can exist in multiple states and versions simultaneously. These documents will not be tied to a single format or static representation but will adapt fluidly to the context in which they are accessed, offering users the most pertinent and updated view at any moment.
+Dynamic Composition: With dynamic composition, content can assemble itself from various sources in real-time, tailored to specific user needs or contextual triggers. This capability transforms the static consumption of information into a continuously adaptable and interactive experience, ensuring that users receive the most relevant and complete narrative.
+One of the most significant developments in the next decade will be the evolution of annotations. No longer confined to the margins or attached in static form, annotations will become integral to digital content, offering layers of intelligence, interactivity, and customization.
+Annotations will transcend simple text notes, evolving into systems that understand and interact with their environment. They will:
+The transformation of annotations will see them evolve from static marks to complex, interactive ecosystems. Future annotations will:
+Act as interactive layers that provide deeper insights or auxiliary content upon engagement. They transform a document into an exploratory landscape, whereby users can uncover supplementary data or functionality as needed.
+Update dynamically to reflect new information, ensuring that annotations and the content they enhance remain current and accurate. AI-driven mechanisms can automatically incorporate updates or revisions pertinent to the annotation context.
+Spur collaboration by serving as arenas for discussion and idea exchange. Annotations will support real-time collaboration, allowing multiple users to contribute, comment, and modify information within a shared digital space.
+Annotations, enriched with semantics, will become pivotal to understanding content in depth. They will:
+Encode structured data that artificial intelligence systems can process, enabling advanced analysis and inference. This will enhance machine understanding of content contexts and relationships, facilitating more effective automation and decision-making processes.
+Establish links to related concepts and resources, building rich networks of content that offer diverse perspectives and supplemental information.
+Include comprehensive version history and provenance details to ensure transparency and accountability. Users will be able to trace the evolution of annotations and their impacts on the primary content.
+Carry contextual metadata that describes usage patterns, relevancy, and interaction history, enabling future systems to fine-tune experiences based on aggregated insights.
+Content creation and consumption will become increasingly collaborative, moving beyond isolated experiences to foster community-driven innovation and productivity.
+Real-Time Co-Editing: Future collaborative processes will benefit from seamless and simultaneous multi-user editing capabilities. This real-time interaction will reduce barriers to teamwork and increase efficiency, allowing contributors to see and respond to changes instantly.
+Contextual Awareness: As collaborators work on shared content, systems will provide awareness of others’ modifications without overwhelming users. This will create a synchronized understanding across teams and minimize conflicts by highlighting relevant changes and comments in context.
+Automated Synchronization: Professional and personal workflows will increasingly rely on automated, cross-platform synchronization. Data will migrate fluidly across devices—ensuring that users have access to the latest versions of content regardless of their active device or location.
+Intelligent Conflict Resolution: AI will mediate collaborative spaces, providing smart solutions to resolve conflicts that arise from simultaneous content modifications. These systems will offer conflict suggestions or merge decisions, simplifying user interaction and maintaining content integrity.
+Artificial Intelligence will be pivotal in revolutionizing content management systems, offering capabilities that enhance organizational efficiency, user experience, and adaptability.
+Content Organization
+Content Generation
+As content becomes more interconnected, new challenges will emerge that necessitate innovative solutions to safeguard user privacy and content integrity.
+Granular Access Control: Future systems will need robust access management tools to define user permissions at more granular levels, ensuring that different content aspects are accessible according to precise security roles and protocols.
+Encrypted Annotations: Annotations will incorporate cryptographic measures to secure data while allowing authorized collaboration. This encryption ensures privacy while maintaining the flexibility of sharing and editing within trusted communities.
+Blockchain-Based Verification: Content authenticity and integrity will be enhanced through blockchain technology, offering decentralized and tamper-proof means to verify information provenance and historical modifications, increasing trust in digital content.
+The next decade will see a fundamental rethinking of how we create, store, and interact with content. The future of files lies not in their traditional, static form, but in a more dynamic, interconnected, and intelligent ecosystem of information. This vision is underpinned by the transformative role of intelligent annotations, AI-driven content management, and evolving paradigms that prioritize meaning, context, and collaboration. By embracing these changes, we can unlock deeper insights, nurture innovation, and foster richer digital experiences that keep pace with an ever-changing world.
+ + +New York City is a vibrant hub for makers, hackers, and open source enthusiasts. Here’s a curated list of spaces and resources in the city.
+[GenSpace]
+MakerBot
+NYC Open Source
+[HackNY]
+Many of these spaces offer:
+To get involved in the NYC maker and open source scene:
+The evolution of content creation and consumption is set to become increasingly collaborative, moving beyond solitary endeavors to foster community-driven innovation and productivity. This transformation is supported by a range of tools and technologies designed to enhance collaborative efforts across various platforms.
+One of the key advancements in collaboration will be the ability for multiple users to seamlessly edit documents in real time. This feature, already being refined by platforms like Google Docs and Microsoft Office 365, minimizes barriers to teamwork and boosts efficiency by enabling contributors to see and respond to each other’s changes instantly. The co-editing capability is augmented by features like version history and revision tracking, which provide transparency and accountability.
+As collaborators engage with shared content, systems will provide them with insights into others’ modifications without overwhelming them with information. Applications such as Slack and Microsoft Teams are developing features that highlight relevant changes and comments within the context of ongoing projects. This capability ensures a synchronized understanding across teams and reduces the potential for conflicts arising from miscommunication.
+Future workflows will increasingly depend on automated synchronization across platforms and devices. Services like Dropbox and OneDrive are already facilitating this by ensuring that the latest versions of content are accessible from any location or device. As this synchronization becomes more seamless, users will benefit from uninterrupted access to updated information, regardless of their active device.
+Artificial Intelligence will play a crucial role in managing collaborative spaces by offering solutions for resolving conflicts that arise from simultaneous content modifications. Tools such as Atlassian Confluence are beginning to integrate AI-driven suggestions for managing these conflicts, providing users with merge suggestions or automated conflict resolution options. This eases user interaction and helps maintain content integrity while supporting fluid collaboration.
+Collaboration in content creation is further enhanced by integration with project management tools that align with team workflows. Platforms like Asana and Trello offer functionalities where content collaboration can be managed alongside task assignments, deadlines, and progress tracking. These integrations help teams stay organized, ensure accountability, and streamline project delivery by tying collaborative content efforts directly to broader project goals.
+The future of collaboration is also leaning towards openness, where content creation taps into wider community inputs. Platforms such as GitHub exemplify this trend by allowing open contributions to have structured peer reviews and collaborative improvements. This model not only enhances the quality of output through diverse insights but also accelerates innovation by pooling a wider range of expertise and creativity.
+As more integrated collaboration tools emerge, they will promote knowledge sharing and continuous learning within and across organizations. Platforms like Notion and Confluence are creating collaborative spaces where users can share knowledge, create wikis, and build living documents that evolve with team input. These tools facilitate a culture of learning and adaptation, ensuring that information sharing becomes an integral part of the collaborative process.
+By leveraging these collaborative advancements, organizations can break down silos, encourage innovation, and build dynamic content ecosystems that are adaptable, intuitive, and reflective of collective intelligence. This shift will be crucial to meet the demands of an increasingly interconnected and collaborative digital world.
+ + +As we look toward the next decade, the concept of “files” as we know them is poised for a dramatic transformation. The traditional notion of discrete, self-contained units of data is evolving into something far more fluid, contextual, and interconnected. This evolution is driven by advancements in technology, changing user expectations, and the increasing complexity of information ecosystems.
+Files have historically been defined by their boundaries—specific containers of data isolated by format, location, and context. However, as technology progresses, this rigid structure is being dismantled in favor of more dynamic and flexible data models. Future files will encapsulate content that seamlessly integrates across applications, platforms, and devices, allowing for a more cohesive digital experience.
+The shift is not just technical but conceptual, as it reflects a broader understanding of information management. In practice, this means transcending the limitations of traditional file systems to embrace structures that prioritize user context, behavioral insights, and multidimensional data relationships.
+In the coming years, we’ll likely see a gradual shift away from traditional hierarchical file systems. The rigid tree-like structures of directories and folders will give way to more advanced systems optimized for accessibility and adaptability, emphasizing content’s intrinsic value over its mere location. Here are key elements of this transformation:
+Content-Centric Storage: Future storage architectures will prioritize the meaning and context of information. By classifying data based on its inherent properties and usage patterns rather than its physical location, users can retrieve and interact with content based on relevance. This approach leverages metadata, semantic analysis, and user habits to create intuitive and personalized storage environments.
+Fluid Documents: The concept of documents is expanding to encompass living, evolving entities that can exist in multiple states and versions simultaneously. These documents will not be tied to a single format or static representation but will adapt fluidly to the context in which they are accessed, offering users the most pertinent and updated view at any moment.
+Dynamic Composition: With dynamic composition, content can assemble itself from various sources in real-time, tailored to specific user needs or contextual triggers. This capability transforms the static consumption of information into a continuously adaptable and interactive experience, ensuring that users receive the most relevant and complete narrative.
+One of the most significant developments in the next decade will be the evolution of annotations. No longer confined to the margins or attached in static form, annotations will become integral to digital content, offering layers of intelligence, interactivity, and customization.
+Annotations will transcend simple text notes, evolving into systems that understand and interact with their environment. They will:
+The transformation of annotations will see them evolve from static marks to complex, interactive ecosystems. Future annotations will:
+Act as interactive layers that provide deeper insights or auxiliary content upon engagement. They transform a document into an exploratory landscape, whereby users can uncover supplementary data or functionality as needed.
+Update dynamically to reflect new information, ensuring that annotations and the content they enhance remain current and accurate. AI-driven mechanisms can automatically incorporate updates or revisions pertinent to the annotation context.
+Spur collaboration by serving as arenas for discussion and idea exchange. Annotations will support real-time collaboration, allowing multiple users to contribute, comment, and modify information within a shared digital space.
+Annotations, enriched with semantics, will become pivotal to understanding content in depth. They will:
+Encode structured data that artificial intelligence systems can process, enabling advanced analysis and inference. This will enhance machine understanding of content contexts and relationships, facilitating more effective automation and decision-making processes.
+Establish links to related concepts and resources, building rich networks of content that offer diverse perspectives and supplemental information.
+Include comprehensive version history and provenance details to ensure transparency and accountability. Users will be able to trace the evolution of annotations and their impacts on the primary content.
+Carry contextual metadata that describes usage patterns, relevancy, and interaction history, enabling future systems to fine-tune experiences based on aggregated insights.
+Content creation and consumption will become increasingly collaborative, moving beyond isolated experiences to foster community-driven innovation and productivity.
+Real-Time Co-Editing: Future collaborative processes will benefit from seamless and simultaneous multi-user editing capabilities. This real-time interaction will reduce barriers to teamwork and increase efficiency, allowing contributors to see and respond to changes instantly.
+Contextual Awareness: As collaborators work on shared content, systems will provide awareness of others’ modifications without overwhelming users. This will create a synchronized understanding across teams and minimize conflicts by highlighting relevant changes and comments in context.
+Automated Synchronization: Professional and personal workflows will increasingly rely on automated, cross-platform synchronization. Data will migrate fluidly across devices—ensuring that users have access to the latest versions of content regardless of their active device or location.
+Intelligent Conflict Resolution: AI will mediate collaborative spaces, providing smart solutions to resolve conflicts that arise from simultaneous content modifications. These systems will offer conflict suggestions or merge decisions, simplifying user interaction and maintaining content integrity.
+Artificial Intelligence will be pivotal in revolutionizing content management systems, offering capabilities that enhance organizational efficiency, user experience, and adaptability.
+Content Organization
+Content Generation
+As content becomes more interconnected, new challenges will emerge that necessitate innovative solutions to safeguard user privacy and content integrity.
+Granular Access Control: Future systems will need robust access management tools to define user permissions at more granular levels, ensuring that different content aspects are accessible according to precise security roles and protocols.
+Encrypted Annotations: Annotations will incorporate cryptographic measures to secure data while allowing authorized collaboration. This encryption ensures privacy while maintaining the flexibility of sharing and editing within trusted communities.
+Blockchain-Based Verification: Content authenticity and integrity will be enhanced through blockchain technology, offering decentralized and tamper-proof means to verify information provenance and historical modifications, increasing trust in digital content.
+The next decade will see a fundamental rethinking of how we create, store, and interact with content. The future of files lies not in their traditional, static form, but in a more dynamic, interconnected, and intelligent ecosystem of information. This vision is underpinned by the transformative role of intelligent annotations, AI-driven content management, and evolving paradigms that prioritize meaning, context, and collaboration. By embracing these changes, we can unlock deeper insights, nurture innovation, and foster richer digital experiences that keep pace with an ever-changing world.
+ + +Women’s equality remains a critical global issue, with significant variations across different continents. According to the Global Gender Gap Report 2023, the global gender gap has been closed by 68.4% as of 2023. Let’s explore the current state of women’s equality in each major continent.
+Europe has made significant strides in gender equality, with:
+North America shows mixed progress:
+The world’s largest continent shows diverse patterns:
+The African continent shows both progress and persistent challenges:
+South America demonstrates evolving dynamics:
+Oceania presents a unique context:
+While progress toward women’s equality varies significantly across continents, global trends show gradual improvement. At the current rate of progress, it will take 131 years to reach full gender parity globally. Continued efforts in policy-making, education, and cultural change are essential for achieving genuine gender equality worldwide.
+ + +p&&(p=e.lineIndent),J(a))f++;else{if(e.lineIndent
0){for(r=a,o=0;r>0;r--)(a=ee(l=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+a:ce(e,"expected hexadecimal character");e.result+=ne(o),e.position++}else ce(e,"unknown escape sequence");n=i=e.position}else J(l)?(pe(e,n,i,!0),ye(e,ge(e,!1,t)),n=i=e.position):e.position===e.lineStart&&me(e)?ce(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}ce(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?y=!0:!function(e){var t,n,i;if(42!==(i=e.input.charCodeAt(e.position)))return!1;for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!z(i)&&!X(i);)i=e.input.charCodeAt(++e.position);return e.position===t&&ce(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),P.call(e.anchorMap,n)||ce(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],ge(e,!0,-1),!0}(e)?function(e,t,n){var i,r,o,a,l,c,s,u,p=e.kind,f=e.result;if(z(u=e.input.charCodeAt(e.position))||X(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(z(i=e.input.charCodeAt(e.position+1))||n&&X(i)))return!1;for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==u;){if(58===u){if(z(i=e.input.charCodeAt(e.position+1))||n&&X(i))break}else if(35===u){if(z(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&me(e)||n&&X(u))break;if(J(u)){if(l=e.line,c=e.lineStart,s=e.lineIndent,ge(e,!1,-1),e.lineIndent>=t){a=!0,u=e.input.charCodeAt(e.position);continue}e.position=o,e.line=l,e.lineStart=c,e.lineIndent=s;break}}a&&(pe(e,r,o,!1),ye(e,e.line-l),r=o=e.position,a=!1),Q(u)||(o=e.position+1),u=e.input.charCodeAt(++e.position)}return pe(e,r,o,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,d,1===i)&&(y=!0,null===e.tag&&(e.tag="?")):(y=!0,null===e.tag&&null===e.anchor||ce(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===g&&(y=c&&be(e,h))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&ce(e,'unacceptable node kind for !> tag; it should be "scalar", not "'+e.kind+'"'),s=0,u=e.implicitTypes.length;s"),null!==e.result&&f.kind!==e.kind&&ce(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):ce(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||y}function ke(e){var t,n,i,r,o=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(r=e.input.charCodeAt(e.position))&&(ge(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!z(r);)r=e.input.charCodeAt(++e.position);for(i=[],(n=e.input.slice(t,e.position)).length<1&&ce(e,"directive name must not be less than one character in length");0!==r;){for(;Q(r);)r=e.input.charCodeAt(++e.position);if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!J(r));break}if(J(r))break;for(t=e.position;0!==r&&!z(r);)r=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==r&&he(e),P.call(ue,n)?ue[n](e,n,i):se(e,'unknown document directive "'+n+'"')}ge(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,ge(e,!0,-1)):a&&ce(e,"directives end mark is expected"),we(e,e.lineIndent-1,4,!1,!0),ge(e,!0,-1),e.checkLineBreaks&&H.test(e.input.slice(o,e.position))&&se(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&me(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,ge(e,!0,-1)):e.position=q){if(s=W.limit_backward,W.limit_backward=q,W.ket=W.cursor,e=W.find_among_b(P,7))switch(W.bra=W.cursor,e){case 1:if(l()){if(i=W.limit-W.cursor,!W.eq_s_b(1,"s")&&(W.cursor=W.limit-i,!W.eq_s_b(1,"t")))break;W.slice_del()}break;case 2:W.slice_from("i");break;case 3:W.slice_del();break;case 4:W.eq_s_b(2,"gu")&&W.slice_del()}W.limit_backward=s}}function b(){var e=W.limit-W.cursor;W.find_among_b(U,5)&&(W.cursor=W.limit-e,W.ket=W.cursor,W.cursor>W.limit_backward&&(W.cursor--,W.bra=W.cursor,W.slice_del()))}function d(){for(var e,r=1;W.out_grouping_b(F,97,251);)r--;if(r<=0){if(W.ket=W.cursor,e=W.limit-W.cursor,!W.eq_s_b(1,"é")&&(W.cursor=W.limit-e,!W.eq_s_b(1,"è")))return;W.bra=W.cursor,W.slice_from("e")}}function k(){if(!w()&&(W.cursor=W.limit,!f()&&(W.cursor=W.limit,!m())))return W.cursor=W.limit,void _();W.cursor=W.limit,W.ket=W.cursor,W.eq_s_b(1,"Y")?(W.bra=W.cursor,W.slice_from("i")):(W.cursor=W.limit,W.eq_s_b(1,"ç")&&(W.bra=W.cursor,W.slice_from("c")))}var p,g,q,v=[new r("col",-1,-1),new r("par",-1,-1),new r("tap",-1,-1)],h=[new r("",-1,4),new r("I",0,1),new r("U",0,2),new r("Y",0,3)],z=[new r("iqU",-1,3),new r("abl",-1,3),new r("Ièr",-1,4),new r("ièr",-1,4),new r("eus",-1,2),new r("iv",-1,1)],y=[new r("ic",-1,2),new r("abil",-1,1),new r("iv",-1,3)],C=[new r("iqUe",-1,1),new r("atrice",-1,2),new r("ance",-1,1),new r("ence",-1,5),new r("logie",-1,3),new r("able",-1,1),new r("isme",-1,1),new r("euse",-1,11),new r("iste",-1,1),new r("ive",-1,8),new r("if",-1,8),new r("usion",-1,4),new r("ation",-1,2),new r("ution",-1,4),new r("ateur",-1,2),new r("iqUes",-1,1),new r("atrices",-1,2),new r("ances",-1,1),new r("ences",-1,5),new r("logies",-1,3),new r("ables",-1,1),new r("ismes",-1,1),new r("euses",-1,11),new r("istes",-1,1),new r("ives",-1,8),new r("ifs",-1,8),new r("usions",-1,4),new r("ations",-1,2),new r("utions",-1,4),new r("ateurs",-1,2),new r("ments",-1,15),new r("ements",30,6),new r("issements",31,12),new r("ités",-1,7),new r("ment",-1,15),new r("ement",34,6),new r("issement",35,12),new r("amment",34,13),new r("emment",34,14),new r("aux",-1,10),new r("eaux",39,9),new r("eux",-1,1),new r("ité",-1,7)],x=[new r("ira",-1,1),new r("ie",-1,1),new r("isse",-1,1),new r("issante",-1,1),new r("i",-1,1),new r("irai",4,1),new r("ir",-1,1),new r("iras",-1,1),new r("ies",-1,1),new r("îmes",-1,1),new r("isses",-1,1),new r("issantes",-1,1),new r("îtes",-1,1),new r("is",-1,1),new r("irais",13,1),new r("issais",13,1),new r("irions",-1,1),new r("issions",-1,1),new r("irons",-1,1),new r("issons",-1,1),new r("issants",-1,1),new r("it",-1,1),new r("irait",21,1),new r("issait",21,1),new r("issant",-1,1),new r("iraIent",-1,1),new r("issaIent",-1,1),new r("irent",-1,1),new r("issent",-1,1),new r("iront",-1,1),new r("ît",-1,1),new r("iriez",-1,1),new r("issiez",-1,1),new r("irez",-1,1),new r("issez",-1,1)],I=[new r("a",-1,3),new r("era",0,2),new r("asse",-1,3),new r("ante",-1,3),new r("ée",-1,2),new r("ai",-1,3),new r("erai",5,2),new r("er",-1,2),new r("as",-1,3),new r("eras",8,2),new r("âmes",-1,3),new r("asses",-1,3),new r("antes",-1,3),new r("âtes",-1,3),new r("ées",-1,2),new r("ais",-1,3),new r("erais",15,2),new r("ions",-1,1),new r("erions",17,2),new r("assions",17,3),new r("erons",-1,2),new r("ants",-1,3),new r("és",-1,2),new r("ait",-1,3),new r("erait",23,2),new r("ant",-1,3),new r("aIent",-1,3),new r("eraIent",26,2),new r("èrent",-1,2),new r("assent",-1,3),new r("eront",-1,2),new r("ât",-1,3),new r("ez",-1,2),new r("iez",32,2),new r("eriez",33,2),new r("assiez",33,3),new r("erez",32,2),new r("é",-1,2)],P=[new r("e",-1,3),new r("Ière",0,2),new r("ière",0,2),new r("ion",-1,1),new r("Ier",-1,2),new r("ier",-1,2),new r("ë",-1,4)],U=[new r("ell",-1,-1),new r("eill",-1,-1),new r("enn",-1,-1),new r("onn",-1,-1),new r("ett",-1,-1)],F=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,128,130,103,8,5],S=[1,65,20,0,0,0,0,0,0,0,0,0,0,0,0,0,128],W=new s;this.setCurrent=function(e){W.setCurrent(e)},this.getCurrent=function(){return W.getCurrent()},this.stem=function(){var e=W.cursor;return n(),W.cursor=e,u(),W.limit_backward=e,W.cursor=W.limit,k(),W.cursor=W.limit,b(),W.cursor=W.limit,d(),W.cursor=W.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.fr.stemmer,"stemmer-fr"),e.fr.stopWordFilter=e.generateStopWordFilter("ai aie aient aies ait as au aura aurai auraient aurais aurait auras aurez auriez aurions aurons auront aux avaient avais avait avec avez aviez avions avons ayant ayez ayons c ce ceci celà ces cet cette d dans de des du elle en es est et eu eue eues eurent eus eusse eussent eusses eussiez eussions eut eux eûmes eût eûtes furent fus fusse fussent fusses fussiez fussions fut fûmes fût fûtes ici il ils j je l la le les leur leurs lui m ma mais me mes moi mon même n ne nos notre nous on ont ou par pas pour qu que quel quelle quelles quels qui s sa sans se sera serai seraient serais serait seras serez seriez serions serons seront ses soi soient sois soit sommes son sont soyez soyons suis sur t ta te tes toi ton tu un une vos votre vous y à étaient étais était étant étiez étions été étée étées étés êtes".split(" ")),e.Pipeline.registerFunction(e.fr.stopWordFilter,"stopWordFilter-fr")}});
\ No newline at end of file
diff --git a/packages/kbot/systems/workspace/docs.kbot.polymech.com/js/lunr/lunr.hi.min.js b/packages/kbot/systems/workspace/docs.kbot.polymech.com/js/lunr/lunr.hi.min.js
new file mode 100644
index 00000000..7dbc4140
--- /dev/null
+++ b/packages/kbot/systems/workspace/docs.kbot.polymech.com/js/lunr/lunr.hi.min.js
@@ -0,0 +1 @@
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hi=function(){this.pipeline.reset(),this.pipeline.add(e.hi.trimmer,e.hi.stopWordFilter,e.hi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hi.stemmer))},e.hi.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿa-zA-Za-zA-Z0-90-9",e.hi.trimmer=e.trimmerSupport.generateTrimmer(e.hi.wordCharacters),e.Pipeline.registerFunction(e.hi.trimmer,"trimmer-hi"),e.hi.stopWordFilter=e.generateStopWordFilter("अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने".split(" ")),e.hi.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.hi.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var t=i.toString().toLowerCase().replace(/^\s+/,"");return r.cut(t).split("|")},e.Pipeline.registerFunction(e.hi.stemmer,"stemmer-hi"),e.Pipeline.registerFunction(e.hi.stopWordFilter,"stopWordFilter-hi")}});
\ No newline at end of file
diff --git a/packages/kbot/systems/workspace/docs.kbot.polymech.com/js/lunr/lunr.hu.min.js b/packages/kbot/systems/workspace/docs.kbot.polymech.com/js/lunr/lunr.hu.min.js
new file mode 100644
index 00000000..ed9d909f
--- /dev/null
+++ b/packages/kbot/systems/workspace/docs.kbot.polymech.com/js/lunr/lunr.hu.min.js
@@ -0,0 +1,18 @@
+/*!
+ * Lunr languages, `Hungarian` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+
+!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hu=function(){this.pipeline.reset(),this.pipeline.add(e.hu.trimmer,e.hu.stopWordFilter,e.hu.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hu.stemmer))},e.hu.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.hu.trimmer=e.trimmerSupport.generateTrimmer(e.hu.wordCharacters),e.Pipeline.registerFunction(e.hu.trimmer,"trimmer-hu"),e.hu.stemmer=function(){var n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,n=L.cursor;if(d=L.limit,L.in_grouping(W,97,252))for(;;){if(e=L.cursor,L.out_grouping(W,97,252))return L.cursor=e,L.find_among(g,8)||(L.cursor=e,e
=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}});
\ No newline at end of file
diff --git a/packages/kbot/systems/workspace/docs.kbot.polymech.com/js/lunr/lunr.pt.min.js b/packages/kbot/systems/workspace/docs.kbot.polymech.com/js/lunr/lunr.pt.min.js
new file mode 100644
index 00000000..6c16996d
--- /dev/null
+++ b/packages/kbot/systems/workspace/docs.kbot.polymech.com/js/lunr/lunr.pt.min.js
@@ -0,0 +1,18 @@
+/*!
+ * Lunr languages, `Portuguese` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.pt=function(){this.pipeline.reset(),this.pipeline.add(e.pt.trimmer,e.pt.stopWordFilter,e.pt.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.pt.stemmer))},e.pt.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.pt.trimmer=e.trimmerSupport.generateTrimmer(e.pt.wordCharacters),e.Pipeline.registerFunction(e.pt.trimmer,"trimmer-pt"),e.pt.stemmer=function(){var r=e.stemmerSupport.Among,s=e.stemmerSupport.SnowballProgram,n=new function(){function e(){for(var e;;){if(z.bra=z.cursor,e=z.find_among(k,3))switch(z.ket=z.cursor,e){case 1:z.slice_from("a~");continue;case 2:z.slice_from("o~");continue;case 3:if(z.cursor>=z.limit)break;z.cursor++;continue}break}}function n(){if(z.out_grouping(y,97,250)){for(;!z.in_grouping(y,97,250);){if(z.cursor>=z.limit)return!0;z.cursor++}return!1}return!0}function i(){if(z.in_grouping(y,97,250))for(;!z.out_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}return g=z.cursor,!0}function o(){var e,r,s=z.cursor;if(z.in_grouping(y,97,250))if(e=z.cursor,n()){if(z.cursor=e,i())return}else g=z.cursor;if(z.cursor=s,z.out_grouping(y,97,250)){if(r=z.cursor,n()){if(z.cursor=r,!z.in_grouping(y,97,250)||z.cursor>=z.limit)return;z.cursor++}g=z.cursor}}function t(){for(;!z.in_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}for(;!z.out_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}return!0}function a(){var e=z.cursor;g=z.limit,b=g,h=g,o(),z.cursor=e,t()&&(b=z.cursor,t()&&(h=z.cursor))}function u(){for(var e;;){if(z.bra=z.cursor,e=z.find_among(q,3))switch(z.ket=z.cursor,e){case 1:z.slice_from("ã");continue;case 2:z.slice_from("õ");continue;case 3:if(z.cursor>=z.limit)break;z.cursor++;continue}break}}function w(){return g<=z.cursor}function m(){return b<=z.cursor}function c(){return h<=z.cursor}function l(){var e;if(z.ket=z.cursor,!(e=z.find_among_b(F,45)))return!1;switch(z.bra=z.cursor,e){case 1:if(!c())return!1;z.slice_del();break;case 2:if(!c())return!1;z.slice_from("log");break;case 3:if(!c())return!1;z.slice_from("u");break;case 4:if(!c())return!1;z.slice_from("ente");break;case 5:if(!m())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(j,4),e&&(z.bra=z.cursor,c()&&(z.slice_del(),1==e&&(z.ket=z.cursor,z.eq_s_b(2,"at")&&(z.bra=z.cursor,c()&&z.slice_del()))));break;case 6:if(!c())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(C,3),e&&(z.bra=z.cursor,1==e&&c()&&z.slice_del());break;case 7:if(!c())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(P,3),e&&(z.bra=z.cursor,1==e&&c()&&z.slice_del());break;case 8:if(!c())return!1;z.slice_del(),z.ket=z.cursor,z.eq_s_b(2,"at")&&(z.bra=z.cursor,c()&&z.slice_del());break;case 9:if(!w()||!z.eq_s_b(1,"e"))return!1;z.slice_from("ir")}return!0}function f(){var e,r;if(z.cursor>=g){if(r=z.limit_backward,z.limit_backward=g,z.ket=z.cursor,e=z.find_among_b(S,120))return z.bra=z.cursor,1==e&&z.slice_del(),z.limit_backward=r,!0;z.limit_backward=r}return!1}function d(){var e;z.ket=z.cursor,(e=z.find_among_b(W,7))&&(z.bra=z.cursor,1==e&&w()&&z.slice_del())}function v(e,r){if(z.eq_s_b(1,e)){z.bra=z.cursor;var s=z.limit-z.cursor;if(z.eq_s_b(1,r))return z.cursor=z.limit-s,w()&&z.slice_del(),!1}return!0}function p(){var e;if(z.ket=z.cursor,e=z.find_among_b(L,4))switch(z.bra=z.cursor,e){case 1:w()&&(z.slice_del(),z.ket=z.cursor,z.limit-z.cursor,v("u","g")&&v("i","c"));break;case 2:z.slice_from("c")}}function _(){if(!l()&&(z.cursor=z.limit,!f()))return z.cursor=z.limit,void d();z.cursor=z.limit,z.ket=z.cursor,z.eq_s_b(1,"i")&&(z.bra=z.cursor,z.eq_s_b(1,"c")&&(z.cursor=z.limit,w()&&z.slice_del()))}var h,b,g,k=[new r("",-1,3),new r("ã",0,1),new r("õ",0,2)],q=[new r("",-1,3),new r("a~",0,1),new r("o~",0,2)],j=[new r("ic",-1,-1),new r("ad",-1,-1),new r("os",-1,-1),new r("iv",-1,1)],C=[new r("ante",-1,1),new r("avel",-1,1),new r("ível",-1,1)],P=[new r("ic",-1,1),new r("abil",-1,1),new r("iv",-1,1)],F=[new r("ica",-1,1),new r("ância",-1,1),new r("ência",-1,4),new r("ira",-1,9),new r("adora",-1,1),new r("osa",-1,1),new r("ista",-1,1),new r("iva",-1,8),new r("eza",-1,1),new r("logía",-1,2),new r("idade",-1,7),new r("ante",-1,1),new r("mente",-1,6),new r("amente",12,5),new r("ável",-1,1),new r("ível",-1,1),new r("ución",-1,3),new r("ico",-1,1),new r("ismo",-1,1),new r("oso",-1,1),new r("amento",-1,1),new r("imento",-1,1),new r("ivo",-1,8),new r("aça~o",-1,1),new r("ador",-1,1),new r("icas",-1,1),new r("ências",-1,4),new r("iras",-1,9),new r("adoras",-1,1),new r("osas",-1,1),new r("istas",-1,1),new r("ivas",-1,8),new r("ezas",-1,1),new r("logías",-1,2),new r("idades",-1,7),new r("uciones",-1,3),new r("adores",-1,1),new r("antes",-1,1),new r("aço~es",-1,1),new r("icos",-1,1),new r("ismos",-1,1),new r("osos",-1,1),new r("amentos",-1,1),new r("imentos",-1,1),new r("ivos",-1,8)],S=[new r("ada",-1,1),new r("ida",-1,1),new r("ia",-1,1),new r("aria",2,1),new r("eria",2,1),new r("iria",2,1),new r("ara",-1,1),new r("era",-1,1),new r("ira",-1,1),new r("ava",-1,1),new r("asse",-1,1),new r("esse",-1,1),new r("isse",-1,1),new r("aste",-1,1),new r("este",-1,1),new r("iste",-1,1),new r("ei",-1,1),new r("arei",16,1),new r("erei",16,1),new r("irei",16,1),new r("am",-1,1),new r("iam",20,1),new r("ariam",21,1),new r("eriam",21,1),new r("iriam",21,1),new r("aram",20,1),new r("eram",20,1),new r("iram",20,1),new r("avam",20,1),new r("em",-1,1),new r("arem",29,1),new r("erem",29,1),new r("irem",29,1),new r("assem",29,1),new r("essem",29,1),new r("issem",29,1),new r("ado",-1,1),new r("ido",-1,1),new r("ando",-1,1),new r("endo",-1,1),new r("indo",-1,1),new r("ara~o",-1,1),new r("era~o",-1,1),new r("ira~o",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("ir",-1,1),new r("as",-1,1),new r("adas",47,1),new r("idas",47,1),new r("ias",47,1),new r("arias",50,1),new r("erias",50,1),new r("irias",50,1),new r("aras",47,1),new r("eras",47,1),new r("iras",47,1),new r("avas",47,1),new r("es",-1,1),new r("ardes",58,1),new r("erdes",58,1),new r("irdes",58,1),new r("ares",58,1),new r("eres",58,1),new r("ires",58,1),new r("asses",58,1),new r("esses",58,1),new r("isses",58,1),new r("astes",58,1),new r("estes",58,1),new r("istes",58,1),new r("is",-1,1),new r("ais",71,1),new r("eis",71,1),new r("areis",73,1),new r("ereis",73,1),new r("ireis",73,1),new r("áreis",73,1),new r("éreis",73,1),new r("íreis",73,1),new r("ásseis",73,1),new r("ésseis",73,1),new r("ísseis",73,1),new r("áveis",73,1),new r("íeis",73,1),new r("aríeis",84,1),new r("eríeis",84,1),new r("iríeis",84,1),new r("ados",-1,1),new r("idos",-1,1),new r("amos",-1,1),new r("áramos",90,1),new r("éramos",90,1),new r("íramos",90,1),new r("ávamos",90,1),new r("íamos",90,1),new r("aríamos",95,1),new r("eríamos",95,1),new r("iríamos",95,1),new r("emos",-1,1),new r("aremos",99,1),new r("eremos",99,1),new r("iremos",99,1),new r("ássemos",99,1),new r("êssemos",99,1),new r("íssemos",99,1),new r("imos",-1,1),new r("armos",-1,1),new r("ermos",-1,1),new r("irmos",-1,1),new r("ámos",-1,1),new r("arás",-1,1),new r("erás",-1,1),new r("irás",-1,1),new r("eu",-1,1),new r("iu",-1,1),new r("ou",-1,1),new r("ará",-1,1),new r("erá",-1,1),new r("irá",-1,1)],W=[new r("a",-1,1),new r("i",-1,1),new r("o",-1,1),new r("os",-1,1),new r("á",-1,1),new r("í",-1,1),new r("ó",-1,1)],L=[new r("e",-1,1),new r("ç",-1,2),new r("é",-1,1),new r("ê",-1,1)],y=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,3,19,12,2],z=new s;this.setCurrent=function(e){z.setCurrent(e)},this.getCurrent=function(){return z.getCurrent()},this.stem=function(){var r=z.cursor;return e(),z.cursor=r,a(),z.limit_backward=r,z.cursor=z.limit,_(),z.cursor=z.limit,p(),z.cursor=z.limit_backward,u(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.pt.stemmer,"stemmer-pt"),e.pt.stopWordFilter=e.generateStopWordFilter("a ao aos aquela aquelas aquele aqueles aquilo as até com como da das de dela delas dele deles depois do dos e ela elas ele eles em entre era eram essa essas esse esses esta estamos estas estava estavam este esteja estejam estejamos estes esteve estive estivemos estiver estivera estiveram estiverem estivermos estivesse estivessem estivéramos estivéssemos estou está estávamos estão eu foi fomos for fora foram forem formos fosse fossem fui fôramos fôssemos haja hajam hajamos havemos hei houve houvemos houver houvera houveram houverei houverem houveremos houveria houveriam houvermos houverá houverão houveríamos houvesse houvessem houvéramos houvéssemos há hão isso isto já lhe lhes mais mas me mesmo meu meus minha minhas muito na nas nem no nos nossa nossas nosso nossos num numa não nós o os ou para pela pelas pelo pelos por qual quando que quem se seja sejam sejamos sem serei seremos seria seriam será serão seríamos seu seus somos sou sua suas são só também te tem temos tenha tenham tenhamos tenho terei teremos teria teriam terá terão teríamos teu teus teve tinha tinham tive tivemos tiver tivera tiveram tiverem tivermos tivesse tivessem tivéramos tivéssemos tu tua tuas tém tínhamos um uma você vocês vos à às éramos".split(" ")),e.Pipeline.registerFunction(e.pt.stopWordFilter,"stopWordFilter-pt")}});
\ No newline at end of file
diff --git a/packages/kbot/systems/workspace/docs.kbot.polymech.com/js/lunr/lunr.ro.min.js b/packages/kbot/systems/workspace/docs.kbot.polymech.com/js/lunr/lunr.ro.min.js
new file mode 100644
index 00000000..72771401
--- /dev/null
+++ b/packages/kbot/systems/workspace/docs.kbot.polymech.com/js/lunr/lunr.ro.min.js
@@ -0,0 +1,18 @@
+/*!
+ * Lunr languages, `Romanian` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+
+!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ro=function(){this.pipeline.reset(),this.pipeline.add(e.ro.trimmer,e.ro.stopWordFilter,e.ro.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ro.stemmer))},e.ro.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.ro.trimmer=e.trimmerSupport.generateTrimmer(e.ro.wordCharacters),e.Pipeline.registerFunction(e.ro.trimmer,"trimmer-ro"),e.ro.stemmer=function(){var i=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,n=new function(){function e(e,i){L.eq_s(1,e)&&(L.ket=L.cursor,L.in_grouping(W,97,259)&&L.slice_from(i))}function n(){for(var i,r;;){if(i=L.cursor,L.in_grouping(W,97,259)&&(r=L.cursor,L.bra=r,e("u","U"),L.cursor=r,e("i","I")),L.cursor=i,L.cursor>=L.limit)break;L.cursor++}}function t(){if(L.out_grouping(W,97,259)){for(;!L.in_grouping(W,97,259);){if(L.cursor>=L.limit)return!0;L.cursor++}return!1}return!0}function a(){if(L.in_grouping(W,97,259))for(;!L.out_grouping(W,97,259);){if(L.cursor>=L.limit)return!0;L.cursor++}return!1}function o(){var e,i,r=L.cursor;if(L.in_grouping(W,97,259)){if(e=L.cursor,!t())return void(h=L.cursor);if(L.cursor=e,!a())return void(h=L.cursor)}L.cursor=r,L.out_grouping(W,97,259)&&(i=L.cursor,t()&&(L.cursor=i,L.in_grouping(W,97,259)&&L.cursor