- Python 58.8%
- Dockerfile 41.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| recipes | ||
| third_party/patches/sentry-mcp/0.42.0 | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| Dockerfile | ||
| README.md | ||
asami-sentry
Image Docker autonome du serveur MCP Sentry d'Asami : @sentry/mcp-server 0.42.0 (source getsentry/toolkit, patch Asami « update-issue-structured »), compilé et servi depuis une base node:22.13.1-bookworm-slim.
Ce dépôt porte le cycle de vie distinct de l'image asami-sentry — externalisation du stage sentry-mcp-build du cœur Asami (carte Planka « asami-sentry : extraire sentry-mcp et node dans leur propre image », branche feature/lifecycle-v2). Sentry est une intégration externe désactivée par défaut dans Asami ; son image vit et se versionne ici, indépendamment des releases du cœur. Le code CORE/WMI (lancement, SecretRef, gates, télémétrie sentry-sdk) reste dans lodlp/asami/asami.
Pins
| Composant | Pin | Preuve |
|---|---|---|
| Base (build + service) | node:22.13.1-bookworm-slim |
stage qualifié du cœur (feature/lifecycle-v2, run #25/#26) |
| Source | getsentry/toolkit tag 0.42.0, commit 54f66d8d77bdee0d036d4754806d782b58217ef7 |
MANIFEST, carte 1892205611702027586 |
| Patch local | third_party/patches/sentry-mcp/0.42.0/0001-update-issue-structured.patch — SHA-256 1962297d…cd2d8 |
vérifié à chaque build |
| Lockfile | pnpm-lock.yaml — SHA-256 15fec7b2…bc2c2 |
vérifié à chaque build (clone + image finale) |
| pnpm | 11.8.0 tarball, SRI sha512-wfXnxMsk…VfJg== |
vérifié avant installation |
| Node | v22.13.1 (fourni par la base, /usr/local/bin/node) |
vérifié à chaque build |
Provenance complète : third_party/patches/sentry-mcp/0.42.0/MANIFEST.md (inclus dans l'image en /opt/asami/sentry-mcp/ASAMI-PROVENANCE.md).
Politique
- Fail-closed : toute dérive de source, d'empreinte de patch ou de lockfile fait échouer le build ; une montée de version (toolkit, patch, pnpm, node) est un rebuild candidat + requalification, jamais un auto-update.
- Le conteneur servi n'effectue aucun téléchargement npm/Git et n'applique aucun patch : il ne contient que le résultat compilé et ses dépendances verrouillées.
- Non-root : l'
ASAMI_RUNTIME_UID/ASAMI_RUNTIME_GID(entiers positifs non nuls) sont obligatoires à la construction ; le conteneur tourne sous l'utilisateurasami. - Pas de ports publiés : le serveur parle MCP sur STDIO, sous supervision du CORE Asami.
Contrat avec le cœur Asami
| Élément | Valeur |
|---|---|
| Exécutable node | /usr/local/bin/node (ENV SENTRY_NODE) |
| Point d'entrée serveur | /opt/asami/sentry-mcp/dist/index.js (ENV SENTRY_ENTRYPOINT) |
Côté cœur (branche feature/lifecycle-v2, reste à converger par le chantier lifecycle) : src/asami/core/sentry_launch.py doit consommer /usr/local/bin/node (ou une valeur configurable) au lieu de /opt/asami/sentry-node/bin/node ; le rôle sentry doit être ajouté à composition-manifest-v1.schema.json ; les étapes sentry-dist, COPY node, COPY sentry-mcp du Dockerfile cœur et le fichier resources/ci/sentry_mcp_*smoke.py peuvent être supprimés une fois cette image qualifiée. Le pin de production consommé par Asami provient du digest immuable de l'image publiée, jamais d'un tag flottant.
Build
Sur un Atelier provisionné (identité GitLab du projet) :
# 1. Stage de build seul (clone toolkit + pnpm, ~3 Go de couches de build)
docker build --target sentry-mcp-build -t asami-sentry:stage-c1 .
# 2. Smoke STDIO hors réseau sur le stage
python3 recipes/sentry_mcp_offline_smoke.py asami-sentry:stage-c1
# 3. Image de service (UID/GID non-root obligatoires)
docker build \
--build-arg ASAMI_RUNTIME_UID=1000 --build-arg ASAMI_RUNTIME_GID=1000 \
--build-arg ASAMI_GIT_COMMIT=$(git rev-parse HEAD) \
--build-arg ASAMI_IMAGE_TAG=c1 \
-t asami-sentry:c1 .
# 4. Smoke image finale (non-root, labels, intégrité, protocole MCP offline)
python3 recipes/sentry_image_smoke.py asami-sentry:c1 --expected-revision $(git rev-parse HEAD)
Les deux smokes doivent se terminer par SENTRY_MCP_OFFLINE/SENTRY_IMAGE_OFFLINE PASS. La qualification complète (schema, SecretRef, permissions des outils métier) appartient au cœur Asami et n'est pas couverte ici.
Cycle de vie du dépôt
- Définition de l'image, recettes de build/smoke, et à terme publication au GitLab Container Registry de ce projet en référence/digest immuables — même frontière que
lodlp/asami-tools/asami-browsers(§19.7 de la carte Explorations) : la construction d'Asami ne reconstruit jamais le serveur Sentry. - Les montées de version upstream (toolkit 0.42.x → suivants) : mise à jour des pins du Dockerfile + du patch (dans
third_party/patches/sentry-mcp/<version>/), rebuild candidat, smokes, requalification.
Versionnage
Livraisons en CalVer date : YYYY.M.D (décision opérateur du 28 octobre 2026, alignée sur asami-browsers).
- Un numéro = une livraison de contenu requalifié ; le tag git annoté et le tag d'image portent le même numéro ; suffixe incrémental
.Npour plusieurs livraisons le même jour. - Un tag n'est jamais muté,
latestn'existe pas : la référence canonique est le digest immuable de l'image publiée. - Tag annoté créé par l'agent : Tagger
Ventoline <ventdunord@asami.rocks>(GIT.md §1.3).
Historique
- 2026-11-03 : création du dépôt ; externalisation du build depuis
lodlp/asami/asamifeature/lifecycle-v2(commit55b9e681). Fichiers importés depuis le cœur : le patch épinglé et son MANIFEST (SHA vérifiés identiques), les étapes de build du stagesentry-mcp-build, et les deux smokes CI adaptés aux chemins de l'image autonome. - 2026-11-03 — livraison
2026.11.3: première image publiqueregistry.gitlab.com/lodlp/asami-tools/asami-sentry:2026.11.3, digest d'index immuablesha256:7416e4b92722cca96cc27d173764f398763785dc6855d1d8e115b92a1d5b3fdd, revisione20d4e6bf1aa8ee422c3e5f02074c97e2ac5cc52(tag annoté git2026.11.3). Smokes offline stage et image PASS sur ces bytes exacts ; index relu anonymement depuis Atelier-H2 et Terry, digest identique. Ce digest est la référence canonique à pinner par le CORE (lifecycle v2).