Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
1ca6e1f
feat: PDF, PPTX, and DOCX renderers
amir-ghasemi Jan 16, 2026
e76a0af
fix: close fullscreen pptx when clicking outside
amir-ghasemi Jan 17, 2026
6cc0b27
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Jan 17, 2026
702e55f
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Jan 21, 2026
25fe1b9
feat: DOCX and PPTX rendering via PDF conversion
amir-ghasemi Jan 21, 2026
3d30c9b
feat: add document conversion service
amir-ghasemi Jan 21, 2026
fcc655f
fix: import doc conversion router
amir-ghasemi Jan 21, 2026
05fe313
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Jan 27, 2026
0b7e4fe
fix: allow text selection in addition to pan mode
amir-ghasemi Jan 27, 2026
b38b5a0
feat: snip tool
amir-ghasemi Jan 27, 2026
a75a957
fix: add feature flag and default to false
amir-ghasemi Jan 28, 2026
72d04b4
fix: snip-to-chat
amir-ghasemi Jan 29, 2026
7c52279
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Feb 11, 2026
557c117
fix: add LRU cache and max conversion file size
amir-ghasemi Feb 11, 2026
6b773c2
fix: Add LibreOffice licence notice
amir-ghasemi Feb 11, 2026
5788473
chore: unit tests
amir-ghasemi Feb 11, 2026
bccf90c
fix: update package lock
amir-ghasemi Feb 11, 2026
d220ad4
fix: update package-lock.json
amir-ghasemi Feb 11, 2026
c2671ab
fix: address review feedback
amir-ghasemi Feb 11, 2026
5e7a09c
chore: remove redundant comments
amir-ghasemi Feb 11, 2026
e7f39f7
fix: switch from CDN to local worker
amir-ghasemi Feb 11, 2026
ab5a852
fix: sync tests with code update
amir-ghasemi Feb 11, 2026
0da4dc2
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Feb 11, 2026
aff4153
Merge branch 'main' of github.com:SolaceLabs/solace-agent-mesh into a…
amir-ghasemi Feb 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,8 @@ jobs:
cache-to: ${{ steps.image_name.outputs.cache_to }}
provenance: false
sbom: false
build-args: |
INSTALL_LIBREOFFICE=${{ secrets.INSTALL_LIBREOFFICE || 'false' }}

# ----------------------------------------------------
# PHASE 3: Merge Multi-Platform Manifest (Always)
Expand Down
36 changes: 30 additions & 6 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -129,24 +129,48 @@
ENV PYTHONUNBUFFERED=1
ENV PATH="/opt/venv/bin:$PATH"

# Build argument to control LibreOffice installation for binary artifact preview
# LibreOffice is NOT installed by default to keep image size smaller
# To enable binary artifact preview (DOCX/PPTX), set:
# docker build --build-arg INSTALL_LIBREOFFICE=true -t sam .
# Or via environment variable:
# INSTALL_LIBREOFFICE=true docker build --build-arg INSTALL_LIBREOFFICE -t sam .
#
# IMPORTANT: LibreOffice is a separate open-source application licensed under MPL-2.0.
# See THIRD_PARTY_LICENSES/LIBREOFFICE.md for full license and attribution details.
# Source code: https://www.libreoffice.org/download/source-code/
ARG INSTALL_LIBREOFFICE

# Copy Node.js 25 from the official node image
COPY --from=node-binaries /usr/local/bin/node /usr/local/bin/node
COPY --from=node-binaries /usr/local/bin/npm /usr/local/bin/npm
COPY --from=node-binaries /usr/local/bin/npx /usr/local/bin/npx
COPY --from=node-binaries /usr/local/lib/node_modules /usr/local/lib/node_modules

# Install minimal runtime dependencies (no uv for licensing compliance, no curl - due to vulnerabilities)
# Install minimal runtime dependencies
# Add unstable repo with APT pinning to only upgrade libtasn1-6 (CVE-2025-13151 fix)
# LibreOffice is optionally installed for document conversion (DOCX/PPTX to PDF for preview)
RUN echo "deb http://deb.debian.org/debian unstable main" > /etc/apt/sources.list.d/unstable.list && \
printf "Package: *\nPin: release a=unstable\nPin-Priority: 50\n\nPackage: libtasn1-6\nPin: release a=unstable\nPin-Priority: 900\n" > /etc/apt/preferences.d/99pin-libtasn1 && \
apt-get update && \
apt-get install -y --no-install-recommends \
ffmpeg=7:7.1.3-0+deb13u1 \
git \
libatomic1 \
libtasn1-6/unstable \
libssl3t64=3.5.4-1~deb13u2 \
openssl=3.5.4-1~deb13u2 && \
git && \
if [ "${INSTALL_LIBREOFFICE}" = "true" ]; then \
echo "============================================================" && \
echo "NOTICE: Installing LibreOffice - a separate open-source application" && \
echo "LibreOffice is licensed under Mozilla Public License 2.0 (MPL-2.0)" && \
echo "License: https://www.mozilla.org/en-US/MPL/2.0/" && \
echo "Source: https://www.libreoffice.org/download/source-code/" && \
echo "See THIRD_PARTY_LICENSES/LIBREOFFICE.md for full attribution" && \
echo "============================================================" && \
apt-get install -y --no-install-recommends \
libreoffice-writer-nogui \
libreoffice-impress-nogui \
libreoffice-calc-nogui; \
else \
echo "Skipping LibreOffice installation (set INSTALL_LIBREOFFICE=true to enable binary artifact preview)"; \
fi && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/unstable.list /etc/apt/preferences.d/99pin-libtasn1

Expand Down Expand Up @@ -189,9 +213,9 @@
ENV SOLACE_DEV_MODE=True

# Set the following environment variables to appropriate values before deploying
ENV SESSION_SECRET_KEY="REPLACE_WITH_SESSION_SECRET_KEY"

Check warning on line 216 in Dockerfile

View workflow job for this annotation

GitHub Actions / Build linux/amd64

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "SESSION_SECRET_KEY") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/

Check warning on line 216 in Dockerfile

View workflow job for this annotation

GitHub Actions / Build linux/arm64

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "SESSION_SECRET_KEY") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENV LLM_SERVICE_ENDPOINT="REPLACE_WITH_LLM_SERVICE_ENDPOINT"
ENV LLM_SERVICE_API_KEY="REPLACE_WITH_LLM_SERVICE_API_KEY"

Check warning on line 218 in Dockerfile

View workflow job for this annotation

GitHub Actions / Build linux/amd64

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "LLM_SERVICE_API_KEY") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/

Check warning on line 218 in Dockerfile

View workflow job for this annotation

GitHub Actions / Build linux/arm64

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "LLM_SERVICE_API_KEY") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENV LLM_SERVICE_PLANNING_MODEL_NAME="REPLACE_WITH_PLANNING_MODEL_NAME"
ENV LLM_SERVICE_GENERAL_MODEL_NAME="REPLACE_WITH_GENERAL_MODEL_NAME"

Expand Down
49 changes: 49 additions & 0 deletions THIRD_PARTY_LICENSES/LIBREOFFICE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# LibreOffice Third-Party License Notice
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to make this visible in the UI? (under About?)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we have provided attribution and link to source code as well as notice during installation. That seems to be checking off all the boxes but, if we still want more assurance, UI visibility can be added. Would need a consult with UX perhaps?


## About LibreOffice

LibreOffice is a free and open-source office productivity software suite developed by The Document Foundation. When the SAM Docker image is built with `INSTALL_LIBREOFFICE=true`, the unmodified LibreOffice packages from Debian are installed as a **separate application** alongside SAM to provide document conversion capabilities (DOCX, PPTX, XLSX to PDF).

**Important:** LibreOffice is NOT bundled by default. It is only installed when explicitly requested via the `INSTALL_LIBREOFFICE=true` build argument.

## License

LibreOffice is licensed under the **Mozilla Public License Version 2.0 (MPL-2.0)**.

Some components may also be available under the GNU Lesser General Public License (LGPL).

### Mozilla Public License Version 2.0

The full text of the MPL-2.0 license can be found at:
- https://www.mozilla.org/en-US/MPL/2.0/

### LGPL License

The full text of the LGPL can be found at:
- https://www.gnu.org/licenses/lgpl-3.0.html

## Source Code

LibreOffice source code is available from:
- **Official website:** https://www.libreoffice.org/download/source-code/
- **Git repository:** https://git.libreoffice.org/core
- **Debian source packages:** Available via `apt-get source libreoffice-writer-nogui` (when using Debian-based images)

## How LibreOffice is Used

SAM uses LibreOffice in **headless mode** via command-line interface to convert Office documents (DOCX, PPTX, XLSX) to PDF format for in-browser preview. The conversion is performed by calling the `soffice` binary with the `--headless --convert-to pdf` flags.

No modifications have been made to LibreOffice's source code. The standard Debian packages are installed as-is:
- `libreoffice-writer-nogui`
- `libreoffice-impress-nogui`
- `libreoffice-calc-nogui`

## Additional Information

- **LibreOffice Official Website:** https://www.libreoffice.org/
- **The Document Foundation:** https://www.documentfoundation.org/
- **LibreOffice License FAQ:** https://www.libreoffice.org/about-us/licenses/

---

*This notice is provided in compliance with LibreOffice's licensing requirements. LibreOffice is a trademark of The Document Foundation.*
Loading
Loading