diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..6966336 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,22 @@ +{ + "permissions": { + "allow": [ + "Bash(git:*)", + "Bash(make:*)", + "Bash(python3:*)", + "Bash(pip:*)", + "Bash(ls:*)", + "Bash(cat:*)", + "Read(*)", + "Edit(*)", + "Write(*)", + "Glob(*)", + "Grep(*)" + ], + "deny": [ + "Bash(rm -rf:*)", + "Bash(curl *password*:*)", + "Bash(ssh:*)" + ] + } +} diff --git a/.gitea/AGENTS.md b/.gitea/AGENTS.md new file mode 100644 index 0000000..af99234 --- /dev/null +++ b/.gitea/AGENTS.md @@ -0,0 +1,24 @@ +# AGENTS — Identités et permissions + +## Comptes Gitea actifs + +| Username | Rôle | Périmètre | +|---|---|---| +| `floppyrj45` | Admin / Owner | Tous les repos, valide les PR sur `main` | +| `agent-surfer` | Agent principal OpenClaw | Tous les repos du Labo | +| `agent-watcher` | Gitea watcher / CI | Lecture + commentaires issues | +| `agent-claude-cli` | Claude Code CLI local | Repos assignés par Flag | +| `agent-codex` | Codex / OpenCode | Repos assignés par Flag | + +## Créer un nouveau compte agent + +```bash +./scripts/gitea-agent-setup.sh +``` + +Le script crée le compte Gitea, génère un token, et l'ajoute à `~/.agent-gitea-tokens`. + +## Règle de moindre privilège + +Un agent ne touche qu'aux repos explicitement listés dans `AI_CONTEXT.md` de chaque projet. +Il ne lit pas, ne fork pas, ne clone pas les repos hors de son périmètre. diff --git a/.gitea/WORKFLOW.md b/.gitea/WORKFLOW.md new file mode 100644 index 0000000..7a7b0bd --- /dev/null +++ b/.gitea/WORKFLOW.md @@ -0,0 +1,54 @@ +# WORKFLOW — Règles Git multi-agent + +## Branches + +| Branche | Usage | Qui push | +|---|---|---| +| `main` | Production stable | Flag uniquement (via PR) | +| `develop` | Intégration continue | Agents via PR | +| `feat//` | Nouvelle fonctionnalité | Agent concerné | +| `fix//` | Correction de bug | Agent concerné | +| `chore//` | Maintenance, docs, config | Agent concerné | + +**Jamais de push direct sur `main` ou `develop`.** Toujours via Pull Request. + +## Format de commit + +``` +[agent:] +``` + +Exemples : +- `[agent:surfer] ajout endpoint /mission pour dashboard` +- `[agent:claude-cli] fix calcul distance waypoints` +- `[flag] merge feat/surfer/telemetry-endpoint` + +Le nom d'agent doit correspondre à un compte Gitea listé dans `AGENTS.md`. + +## Pull Requests + +- Titre : `[agent:] ` +- Body : utiliser le template `.gitea/pull_request_template.md` +- Reviewer : `floppyrj45` (Flag) pour toute PR vers `main` +- PR vers `develop` : peut être mergée par un autre agent si les checks passent + +## Issues + +- Ouvrir une issue avant tout travail non trivial +- Assigner l'agent qui prend en charge +- Labels : `bug`, `feat`, `chore`, `blocked`, `agent:` + +## Protection de branche + +- `main` : PR obligatoire, 1 approbation humaine minimum +- `develop` : PR obligatoire, checks CI requis + +## Identité Git locale (agents) + +Chaque agent configure : +```bash +git config user.name "agent-" +git config user.email "agent-@labo.local" +``` + +Token d'authentification : voir `~/.agent-gitea-tokens` sur `.82`, ou demander via `gitea-agent-setup.sh`. diff --git a/.gitea/pull_request_template.md b/.gitea/pull_request_template.md new file mode 100644 index 0000000..2f3617f --- /dev/null +++ b/.gitea/pull_request_template.md @@ -0,0 +1,25 @@ +## Résumé + + + +## Type de changement + +- [ ] `feat` — nouvelle fonctionnalité +- [ ] `fix` — correction de bug +- [ ] `chore` — maintenance / docs / config +- [ ] `refactor` — refactoring sans changement de comportement + +## Agent / Auteur + +`agent:` + +## Checklist + +- [ ] Code testé localement +- [ ] Docs mises à jour si besoin (`docs/`) +- [ ] Pas de secret en clair dans le diff +- [ ] Commit messages au format `[agent:] verbe description` + +## Contexte + + diff --git a/AI_CONTEXT.md b/AI_CONTEXT.md new file mode 100644 index 0000000..866020f --- /dev/null +++ b/AI_CONTEXT.md @@ -0,0 +1,58 @@ +# AI_CONTEXT.md — Handoff agent + +> **Premier fichier à lire.** Ce fichier permet à n'importe quel agent IA de reprendre le projet sans briefing humain. + +## Projet + +| Champ | Valeur | +|---|---| +| **Nom** | cosma-log-analyzer | +| **Description** | Détecteur anomalies logs AUV COSMA (règles déterministes + NATS) | +| **Statut** | `wip` / `active` / `paused` / `archived` | +| **Owner humain** | Flag (`floppyrj45`) | +| **Agent principal** | `agent-surfer` | + +## Ressources + +| Ressource | URL / Chemin | +|---|---| +| **Gitea** | `http://192.168.0.82:3000/floppyrj45/cosma-log-analyzer` | +| **Nextcloud** | `/mnt/nas-nextcloud/cosma-log-analyzer/` (sur `.82`) | +| **Docs Sphinx** | `http://192.168.0.82/cosma-log-analyzer-docs/` | +| **Channel Discord** | `#PROJECT_CHANNEL` | + +## Architecture courte + +*À compléter — 5-10 lignes max. Stack, composants principaux, ports exposés.* + +## État actuel + +*Résumé de l'état du projet au moment de la dernière mise à jour de ce fichier.* + +## Tâches ouvertes + +- [ ] tâche 1 +- [ ] tâche 2 + +## Décisions clés + +*Décisions d'architecture ou de design importantes à connaître.* + +## Comment démarrer (agent) + +```bash +# 1. Configurer ton identité Git +git config user.name "agent-" +git config user.email "agent-@labo.local" + +# 2. Lire les règles workflow +cat .gitea/WORKFLOW.md + +# 3. Créer ta branche de travail +git checkout -b feat/agent-/ + +# 4. Push et ouvrir une PR vers develop +git push origin feat/agent-/ +``` + +Token Gitea : voir `~/.agent-gitea-tokens` sur `.82` ou demander à Flag. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..ab111e1 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,37 @@ +# CLAUDE.md — Instructions pour agents Claude + +## Contexte projet + +Voir `AI_CONTEXT.md` pour le contexte complet. + +## Règles de développement + +- Lire `.gitea/WORKFLOW.md` avant tout commit +- Branche de travail : `feat/agent-claude-cli/` +- Commit format : `[agent:claude-cli] verbe description` +- Jamais de push direct sur `main` ou `develop` +- Jamais de secret en clair dans le code ou les commits + +## Stack technique + +*À compléter selon le projet.* + +## Commandes utiles + +```bash +# Tests +# make test + +# Docs +make -C docs html + +# Linter +# make lint +``` + +## Périmètre autorisé + +- Modifier le code dans ce repo uniquement +- Ouvrir des PRs vers `develop` +- Créer des issues si bloqué +- Ne pas toucher aux secrets, credentials, ou config infra diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..23cac69 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,9 @@ +SPHINXBUILD = sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +html: + $(SPHINXBUILD) -b html $(SOURCEDIR) $(BUILDDIR)/html + +clean: + rm -rf $(BUILDDIR) diff --git a/docs/architecture.rst b/docs/architecture.rst new file mode 100644 index 0000000..6468882 --- /dev/null +++ b/docs/architecture.rst @@ -0,0 +1,4 @@ +Architecture +============ + +*À documenter.* diff --git a/docs/changelog.rst b/docs/changelog.rst new file mode 100644 index 0000000..0ff43a6 --- /dev/null +++ b/docs/changelog.rst @@ -0,0 +1,6 @@ +Changelog +========= + +v0.1 — init +----------- +- Scaffold initial diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..7dd08c3 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,6 @@ +project = "cosma-log-analyzer" +author = "Flag / OpenClaw agents" +release = "0.1" +extensions = ["myst_parser", "sphinx.ext.autodoc", "sphinx.ext.viewcode"] +html_theme = "sphinx_rtd_theme" +source_suffix = {".rst": "restructuredtext", ".md": "markdown"} diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..6b7d200 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,15 @@ +cosma-log-analyzer +============ + +.. toctree:: + :maxdepth: 2 + :caption: Documentation + + architecture + changelog + api + +Overview +-------- + +*À compléter — voir AI_CONTEXT.md pour le contexte agent.*