Creates ai/paperclip/ with: - Dockerfile: extends upstream paperclip image, pre-installs hermes-paperclip-adapter@0.3.0 npm package as seed data - docker-entrypoint.sh: seeds the adapter plugin on first boot if the persistent volume is empty, then runs original startup This ensures the Hermes adapter is available on first boot without requiring network access — no npm install needed at runtime. The adapter persists on the Docker volume across restarts.
48 lines
1.7 KiB
Docker
48 lines
1.7 KiB
Docker
# syntax=docker/dockerfile:1.20
|
|
FROM ghcr.io/paperclipai/paperclip:v2026.517.0
|
|
|
|
# ── Install Hermes adapter npm package into seed directory ──────────
|
|
# This seed data gets copied to the persistent volume on first boot
|
|
# so the adapter is available without network access.
|
|
USER root
|
|
|
|
RUN npm install --no-save --prefix /opt/paperclip-seed/adapter-plugins \
|
|
hermes-paperclip-adapter@0.3.0
|
|
|
|
# Create adapter-plugins.json metadata (Paperclip reads this on startup
|
|
# to discover which external adapters to load)
|
|
RUN mkdir -p /opt/paperclip-seed && python3 -c "
|
|
import json
|
|
record = {
|
|
'packageName': 'hermes-paperclip-adapter',
|
|
'version': '0.3.0',
|
|
'type': 'hermes',
|
|
'installedAt': '2026-05-18T00:00:00.000Z',
|
|
}
|
|
with open('/opt/paperclip-seed/adapter-plugins.json', 'w') as f:
|
|
json.dump([record], f, indent=2)
|
|
"
|
|
|
|
# Ensure the adapter-plugins dir has a package.json (Paperclip expects one)
|
|
RUN python3 -c "
|
|
import json
|
|
pkg = {
|
|
'name': 'paperclip-adapter-plugins',
|
|
'version': '0.0.0',
|
|
'private': True,
|
|
'description': 'Managed directory for Paperclip external adapter plugins.',
|
|
}
|
|
with open('/opt/paperclip-seed/adapter-plugins/package.json', 'w') as f:
|
|
json.dump(pkg, f, indent=2)
|
|
"
|
|
|
|
# ── Custom entrypoint ──────────────────────────────────────────────
|
|
# Seeds the Hermes adapter on fresh volumes, then runs original logic.
|
|
COPY docker-entrypoint.sh /usr/local/bin/paperclip-entrypoint.sh
|
|
RUN chmod +x /usr/local/bin/paperclip-entrypoint.sh
|
|
|
|
USER node
|
|
|
|
ENTRYPOINT ["/usr/local/bin/paperclip-entrypoint.sh"]
|
|
CMD ["node", "--import", "./server/node_modules/tsx/dist/loader.mjs", "server/dist/index.js"]
|