feat: logs/ for pull-sync and ia_dev; document ia_dev as in-repo module
- Default PULL_SYNC_LOG to logs/git-pull-projects.log; add logs/README and gitignore - Add services/ia_dev integration README and .env.example - Replace docs/ia_dev-submodule.md with ia_dev-module.md; update ecosystem and README links - Point ia_dev submodule to commit with smart_ide_logs.sh
This commit is contained in:
parent
bc3c75e15f
commit
d98e6bce60
@ -6,11 +6,11 @@ alwaysApply: false
|
||||
|
||||
# smart_ide ↔ ia_dev (projet et environnement)
|
||||
|
||||
Quand le périmètre touche ce dépôt et le sous-module **`ia_dev/`** :
|
||||
Quand le périmètre touche ce dépôt et le module **`ia_dev/`** :
|
||||
|
||||
- **Identifiant projet ia_dev :** `smart_ide` ; conf versionnée : **`projects/smart_ide/conf.json`** à la racine du workspace ; `ia_dev/projects/smart_ide` doit être un **lien** vers ce dossier (script `scripts/ensure-ia-dev-smart-ide-project-link.sh`).
|
||||
- **Environnement :** `test` | `pprod` | `prod`. Le reprendre depuis le message utilisateur ; **demander** s’il manque avant des actions dépendantes du env.
|
||||
- **Exécution des scripts ia_dev :** répertoire courant = racine du clone **`ia_dev/`** (sous le workspace smart_ide). Pas de mélange avec la racine smart_ide pour `deploy/`, `gitea-issues/`, etc.
|
||||
- **Exécution des scripts ia_dev :** répertoire courant = racine **`ia_dev/`** (dans le workspace smart_ide). Pas de mélange avec la racine smart_ide pour `deploy/`, `gitea-issues/`, etc.
|
||||
- **Sélection projet pour les scripts :** `IA_PROJECT_ID=smart_ide` et/ou `--project smart_ide` selon le script ; détail : `ia_dev/projects/README.md`.
|
||||
- **MAIL_TO (ticketing / mails) :** lire `projects/smart_ide/conf.json` (racine workspace) → `tickets.authorized_emails.to` pour l’env choisi (ex. test → `AI.SMART_IDE.TEST@4nkweb.com`).
|
||||
- **Code et doc applicative :** racine du workspace smart_ide ; doc indexée sous `docs/` à la racine. `ia_dev/projects/smart_ide/docs` peut être absent.
|
||||
|
||||
@ -25,9 +25,9 @@ Pour chaque **projet**, un **workspace AnythingLLM** dédié est créé (ou ratt
|
||||
|
||||
Voir [docs/anythingllm-workspaces.md](./docs/anythingllm-workspaces.md).
|
||||
|
||||
## Dépôt `ia_dev` (sous-module Git)
|
||||
## Module `ia_dev` (dans ce dépôt)
|
||||
|
||||
Le dépôt [**ia_dev**](https://git.4nkweb.com/4nk/ia_dev.git) est intégré comme **sous-module** dans le répertoire [`./ia_dev`](./ia_dev) : équipe d’agents, scripts `deploy/`, ticketing Gitea, etc. Les **fichiers `conf.json`** pour ce monorepo sont sous [`./projects/<id>/`](./projects/README.md) (pas les clones Git ; ceux-ci ailleurs, ex. `../projects/`). Cloner avec `git clone --recurse-submodules` ou initialiser avec `git submodule update --init --recursive`. Détail : [docs/ia_dev-submodule.md](./docs/ia_dev-submodule.md). Les agents Cursor **pont** (`ia-dev-*`) sont décrits dans [docs/ia_dev-project-smart_ide.md](./docs/ia_dev-project-smart_ide.md).
|
||||
Le répertoire [`./ia_dev`](./ia_dev) contient l’**équipe d’agents**, les scripts `deploy/`, le ticketing Gitea, etc. (référence historique sur la forge : [**ia_dev**](https://git.4nkweb.com/4nk/ia_dev.git)). Les **fichiers `conf.json`** pour ce monorepo sont sous [`./projects/<id>/`](./projects/README.md) (pas les clones Git ; ceux-ci ailleurs, ex. `../projects/`). Un `git clone` du monorepo suffit. Détail : [docs/ia_dev-module.md](./docs/ia_dev-module.md), intégration [services/ia_dev/](services/ia_dev/README.md), journaux [logs/README.md](logs/README.md). Les agents Cursor **pont** (`ia-dev-*`) sont décrits dans [docs/ia_dev-project-smart_ide.md](./docs/ia_dev-project-smart_ide.md).
|
||||
|
||||
## Documentation
|
||||
|
||||
@ -44,7 +44,10 @@ Le dépôt [**ia_dev**](https://git.4nkweb.com/4nk/ia_dev.git) est intégré com
|
||||
| [docs/ecosystem-architecture-and-sync.md](./docs/ecosystem-architecture-and-sync.md) | smart_ide, clones projet, API IA, docv / données `../projects/<id>/data`, Git / Ollama / AnythingLLM |
|
||||
| [docs/deployment-target.md](./docs/deployment-target.md) | Client Linux + SSH : serveur = socle IA + repos |
|
||||
| [projects/README.md](./projects/README.md) | Confs `ia_dev` (`conf.json` seuls) — distinct des clones sous `../projects/` |
|
||||
| [docs/ia_dev-submodule.md](./docs/ia_dev-submodule.md) | Sous-module Git `ia_dev`, clone / mise à jour |
|
||||
| [cron/README.md](./cron/README.md) | Config `cron/config.env`, pull Git planifié (`projects/*/conf.json`) |
|
||||
| [scripts/install-git-pull-systemd-user.sh](./scripts/install-git-pull-systemd-user.sh) | Timer systemd **user** pour le pull automatique |
|
||||
| [docs/ia_dev-module.md](./docs/ia_dev-module.md) | Module `ia_dev`, liens projet, journaux |
|
||||
| [services/ia_dev/](services/ia_dev/README.md) | Contrat d’intégration `ia_dev` dans smart_ide |
|
||||
| [docs/ia_dev-project-smart_ide.md](./docs/ia_dev-project-smart_ide.md) | Projet `ia_dev` `smart_ide` : `conf.json`, wiki/issues forge 4nk, agents Cursor `ia-dev-*` |
|
||||
| [docs/features/langextract-api.md](./docs/features/langextract-api.md) | API locale LangExtract (extraction structurée) |
|
||||
| [docs/features/claw-harness-api.md](./docs/features/claw-harness-api.md) | Intégration claw-code (multi-modèles, sans Anthropic dans les gabarits) |
|
||||
|
||||
60
cron/README.md
Normal file
60
cron/README.md
Normal file
@ -0,0 +1,60 @@
|
||||
# Tirage Git planifié — clones `projects/*/conf.json`
|
||||
|
||||
## Comportement
|
||||
|
||||
Le script [`git-pull-project-clones.sh`](./git-pull-project-clones.sh) parcourt [`../projects/<id>/`](../projects/) (fichiers `conf.json`), lit **`project_path`**, et pour chaque dépôt Git :
|
||||
|
||||
1. **`git fetch origin <branche_courante>`**
|
||||
2. si **`origin/<branche>`** est en avance en **fast-forward** → **`git merge --ff-only origin/<branche>`**
|
||||
3. sinon → message explicite, **pas** de merge forcé
|
||||
|
||||
## Configuration centralisée
|
||||
|
||||
| Fichier | Rôle |
|
||||
|---------|------|
|
||||
| [`config.env`](./config.env) | **Versionné** : `PULL_SYNC_ENABLED`, `PULL_SYNC_MODE` (`all` \| `project`), `PULL_SYNC_PROJECT_ID`, `PULL_SYNC_LOG` |
|
||||
| `config.local.env` | **Optionnel, non versionné** (voir [`config.local.env.example`](./config.local.env.example)) — surcharge machine |
|
||||
|
||||
Le script [`git-pull-wrapper.sh`](./git-pull-wrapper.sh) charge ces fichiers puis appelle `git-pull-project-clones.sh` et **append** la sortie dans `PULL_SYNC_LOG` (défaut : **`logs/git-pull-projects.log`** à la racine du dépôt — voir [`logs/README.md`](../logs/README.md)).
|
||||
|
||||
## Mise en place recommandée : systemd utilisateur
|
||||
|
||||
Depuis la racine du dépôt **smart_ide** :
|
||||
|
||||
```bash
|
||||
./scripts/install-git-pull-systemd-user.sh
|
||||
```
|
||||
|
||||
Cela installe sous `~/.config/systemd/user/` :
|
||||
|
||||
- `git-pull-project-clones.service` (généré depuis [`../systemd/user/git-pull-project-clones.service.in`](../systemd/user/git-pull-project-clones.service.in))
|
||||
- `git-pull-project-clones.timer` ([`../systemd/user/git-pull-project-clones.timer`](../systemd/user/git-pull-project-clones.timer)) — **toutes les 15 minutes** (`OnCalendar=*:0/15`)
|
||||
|
||||
Commandes utiles :
|
||||
|
||||
```bash
|
||||
systemctl --user status git-pull-project-clones.timer
|
||||
systemctl --user list-timers | grep git-pull
|
||||
journalctl --user -u git-pull-project-clones.service -n 50 --no-pager
|
||||
```
|
||||
|
||||
Pour changer la fréquence : éditer le fichier **timer** dans le dépôt, relancer `install-git-pull-systemd-user.sh`, ou éditer directement `~/.config/systemd/user/git-pull-project-clones.timer` puis `systemctl --user daemon-reload`.
|
||||
|
||||
## Prérequis
|
||||
|
||||
- **`jq`**
|
||||
- Clones avec remote **`origin`** et branche suivie (ex. `test`)
|
||||
|
||||
## Désactiver un projet
|
||||
|
||||
Dans `projects/<id>/conf.json` : `"cron": { "git_pull": false }`.
|
||||
|
||||
Pour **tout** arrêter : `PULL_SYNC_ENABLED=0` dans `config.env` ou `config.local.env`, ou `systemctl --user disable --now git-pull-project-clones.timer`.
|
||||
|
||||
## Crontab (alternative)
|
||||
|
||||
Si tu préfères cron au lieu de systemd : une ligne qui appelle **`./cron/git-pull-wrapper.sh`** (pas besoin de redéfinir les variables si tu utilises uniquement `config.env`). Fragments : [`fragments/`](./fragments/) (à aligner sur le wrapper).
|
||||
|
||||
## Hooks AnythingLLM
|
||||
|
||||
Un **`post-merge`** sur un clone peut s’exécuter après un `merge --ff-only` : voir [`scripts/anythingllm-pull-sync`](../scripts/anythingllm-pull-sync/).
|
||||
17
cron/config.env
Normal file
17
cron/config.env
Normal file
@ -0,0 +1,17 @@
|
||||
# Configuration centralisée — tirage Git des clones (projects/*/conf.json)
|
||||
# Fichier versionné : modifier ici ou surcharger dans config.local.env (non versionné).
|
||||
#
|
||||
# Désactiver complètement l’exécution planifiée (systemd user timer) :
|
||||
# PULL_SYNC_ENABLED=0
|
||||
|
||||
PULL_SYNC_ENABLED=1
|
||||
|
||||
# all = tous les projets sous projects/*/conf.json (respecte cron.git_pull par projet)
|
||||
# project = un seul id (définir PULL_SYNC_PROJECT_ID)
|
||||
PULL_SYNC_MODE=all
|
||||
# PULL_SYNC_MODE=project
|
||||
# PULL_SYNC_PROJECT_ID=smart_ide
|
||||
|
||||
# Journal append : défaut = <racine smart_ide>/logs/git-pull-projects.log (voir git-pull-wrapper.sh)
|
||||
# Surcharge ex. : PULL_SYNC_LOG=/home/user/.local/log/smart_ide-pull.log
|
||||
# PULL_SYNC_LOG=
|
||||
5
cron/config.local.env.example
Normal file
5
cron/config.local.env.example
Normal file
@ -0,0 +1,5 @@
|
||||
# Copier vers config.local.env (ignoré par Git) pour surcharges machine locale.
|
||||
# Exemple :
|
||||
# PULL_SYNC_LOG=/chemin/perso/pull.log # défaut : <racine smart_ide>/logs/git-pull-projects.log
|
||||
# PULL_SYNC_MODE=project
|
||||
# PULL_SYNC_PROJECT_ID=enso
|
||||
5
cron/fragments/README.md
Normal file
5
cron/fragments/README.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Fragments crontab (alternative à systemd)
|
||||
|
||||
La configuration **centralisée** est dans [`../config.env`](../config.env). En **systemd utilisateur** (recommandé) : [`../../scripts/install-git-pull-systemd-user.sh`](../../scripts/install-git-pull-systemd-user.sh).
|
||||
|
||||
Si tu utilises **cron** à la place : une seule ligne qui appelle **`git-pull-wrapper.sh`** (il lit `config.env` / `config.local.env`). Les fichiers `*.cron` ici ne sont que des rappels commentés.
|
||||
2
cron/fragments/_template.cron
Normal file
2
cron/fragments/_template.cron
Normal file
@ -0,0 +1,2 @@
|
||||
# Préférer systemd + cron/config.env. Sinon crontab :
|
||||
# */15 * * * * USER cd SMART_IDE_ROOT && ./cron/git-pull-wrapper.sh
|
||||
4
cron/fragments/all-projects.cron
Normal file
4
cron/fragments/all-projects.cron
Normal file
@ -0,0 +1,4 @@
|
||||
# Tous les projets — utilise la config centralisée cron/config.env (PULL_SYNC_*).
|
||||
# Préférer systemd : ./scripts/install-git-pull-systemd-user.sh
|
||||
#
|
||||
# */15 * * * * USER cd SMART_IDE_ROOT && ./cron/git-pull-wrapper.sh
|
||||
3
cron/fragments/enso.cron
Normal file
3
cron/fragments/enso.cron
Normal file
@ -0,0 +1,3 @@
|
||||
# Voir cron/config.env : PULL_SYNC_MODE=project et PULL_SYNC_PROJECT_ID=enso + git-pull-wrapper.sh
|
||||
#
|
||||
# */15 * * * * USER cd SMART_IDE_ROOT && ./cron/git-pull-wrapper.sh
|
||||
4
cron/fragments/smart_ide.cron
Normal file
4
cron/fragments/smart_ide.cron
Normal file
@ -0,0 +1,4 @@
|
||||
# Un seul projet : préférer éditer cron/config.env (PULL_SYNC_MODE=project, PULL_SYNC_PROJECT_ID=smart_ide)
|
||||
# puis ./cron/git-pull-wrapper.sh depuis crontab, ou systemd (install-git-pull-systemd-user.sh).
|
||||
#
|
||||
# */15 * * * * USER cd SMART_IDE_ROOT && ./cron/git-pull-wrapper.sh
|
||||
90
cron/git-pull-project-clones.sh
Executable file
90
cron/git-pull-project-clones.sh
Executable file
@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env bash
|
||||
# For each projects/<id>/conf.json with project_path pointing to a Git clone under ../
|
||||
# (or anywhere), fetch origin and fast-forward the current branch if safe.
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
PROJECTS_CONF="$ROOT/projects"
|
||||
LOG_PREFIX="[git-pull-project-clones]"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [--all | --project <id>]" >&2
|
||||
echo " Reads projects/<id>/conf.json (jq required). Skips if cron.git_pull is false." >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
filter_id=""
|
||||
if [[ "${1:-}" == "--project" && -n "${2:-}" ]]; then
|
||||
filter_id="$2"
|
||||
elif [[ -n "${1:-}" && "$1" != "--all" ]]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
command -v jq >/dev/null 2>&1 || {
|
||||
echo "$LOG_PREFIX jq not found; install jq." >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
pull_clone() {
|
||||
local id="$1" path="$2"
|
||||
if [[ ! -d "$path" ]]; then
|
||||
echo "$LOG_PREFIX skip $id: project_path not a directory: $path"
|
||||
return 0
|
||||
fi
|
||||
if [[ ! -d "$path/.git" ]]; then
|
||||
echo "$LOG_PREFIX skip $id: not a git repository: $path"
|
||||
return 0
|
||||
fi
|
||||
local branch
|
||||
if ! branch="$(git -C "$path" symbolic-ref -q --short HEAD 2>/dev/null)"; then
|
||||
echo "$LOG_PREFIX skip $id: detached HEAD in $path"
|
||||
return 0
|
||||
fi
|
||||
if ! git -C "$path" remote get-url origin >/dev/null 2>&1; then
|
||||
echo "$LOG_PREFIX skip $id: no origin remote in $path"
|
||||
return 0
|
||||
fi
|
||||
echo "$LOG_PREFIX $id: fetch origin ($path, branch $branch)"
|
||||
if ! git -C "$path" fetch origin "$branch" 2>&1; then
|
||||
echo "$LOG_PREFIX $id: fetch failed" >&2
|
||||
return 1
|
||||
fi
|
||||
local head oref
|
||||
head="$(git -C "$path" rev-parse HEAD)"
|
||||
oref="origin/$branch"
|
||||
if ! git -C "$path" rev-parse --verify -q "$oref" >/dev/null 2>&1; then
|
||||
echo "$LOG_PREFIX skip $id: $oref missing after fetch"
|
||||
return 0
|
||||
fi
|
||||
local remote_sha
|
||||
remote_sha="$(git -C "$path" rev-parse "$oref")"
|
||||
if [[ "$head" == "$remote_sha" ]]; then
|
||||
echo "$LOG_PREFIX $id: up to date"
|
||||
return 0
|
||||
fi
|
||||
if ! git -C "$path" merge-base --is-ancestor "$head" "$remote_sha" 2>/dev/null; then
|
||||
echo "$LOG_PREFIX skip $id: not fast-forward (diverged or unrelated); manual merge required"
|
||||
return 0
|
||||
fi
|
||||
echo "$LOG_PREFIX $id: fast-forward to $oref"
|
||||
git -C "$path" merge --ff-only "$oref"
|
||||
echo "$LOG_PREFIX $id: done"
|
||||
}
|
||||
|
||||
for conf in "$PROJECTS_CONF"/*/conf.json; do
|
||||
[[ -f "$conf" ]] || continue
|
||||
id="$(basename "$(dirname "$conf")")"
|
||||
if [[ -n "$filter_id" && "$id" != "$filter_id" ]]; then
|
||||
continue
|
||||
fi
|
||||
if [[ "$(jq -r '.cron.git_pull // true' "$conf")" == "false" ]]; then
|
||||
echo "$LOG_PREFIX skip $id: cron.git_pull is false"
|
||||
continue
|
||||
fi
|
||||
path="$(jq -r '.project_path // empty' "$conf")"
|
||||
if [[ -z "$path" || "$path" == "null" ]]; then
|
||||
echo "$LOG_PREFIX skip $id: empty project_path"
|
||||
continue
|
||||
fi
|
||||
pull_clone "$id" "$path" || true
|
||||
done
|
||||
44
cron/git-pull-wrapper.sh
Executable file
44
cron/git-pull-wrapper.sh
Executable file
@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env bash
|
||||
# Charge cron/config.env (+ optionnel config.local.env) puis exécute git-pull-project-clones.sh.
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
load_env() {
|
||||
local f="$1"
|
||||
[[ -f "$f" ]] || return 0
|
||||
set -a
|
||||
# shellcheck source=/dev/null
|
||||
source "$f"
|
||||
set +a
|
||||
}
|
||||
|
||||
load_env "$ROOT/cron/config.env"
|
||||
load_env "$ROOT/cron/config.local.env"
|
||||
|
||||
if [[ "${PULL_SYNC_ENABLED:-1}" == "0" ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
LOG="${PULL_SYNC_LOG:-$ROOT/logs/git-pull-projects.log}"
|
||||
mkdir -p "$(dirname "$LOG")" 2>/dev/null || true
|
||||
|
||||
{
|
||||
echo "=== $(date -Iseconds) pull-sync ==="
|
||||
case "${PULL_SYNC_MODE:-all}" in
|
||||
all)
|
||||
"$ROOT/cron/git-pull-project-clones.sh" --all
|
||||
;;
|
||||
project)
|
||||
if [[ -z "${PULL_SYNC_PROJECT_ID:-}" ]]; then
|
||||
echo "[git-pull-wrapper] PULL_SYNC_PROJECT_ID requis quand PULL_SYNC_MODE=project" >&2
|
||||
exit 1
|
||||
fi
|
||||
"$ROOT/cron/git-pull-project-clones.sh" --project "$PULL_SYNC_PROJECT_ID"
|
||||
;;
|
||||
*)
|
||||
echo "[git-pull-wrapper] PULL_SYNC_MODE invalide: ${PULL_SYNC_MODE:-}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
echo "=== fin ==="
|
||||
} >>"$LOG" 2>&1
|
||||
@ -39,7 +39,9 @@ Index des documents à la racine de `docs/`. Les **fonctionnalités** détaillé
|
||||
|
||||
| Document | Contenu |
|
||||
|----------|---------|
|
||||
| [ia_dev-submodule.md](./ia_dev-submodule.md) | Sous-module `ia_dev` (forge 4NK), agents ; confs versionnées dans [`../projects/`](../projects/) |
|
||||
| [ia_dev-module.md](./ia_dev-module.md) | Module `ia_dev` dans le dépôt, agents ; confs dans [`../projects/`](../projects/) |
|
||||
| [../logs/README.md](../logs/README.md) | Journaux locaux : pull Git planifié, exécutions `ia_dev` |
|
||||
| [../services/ia_dev/README.md](../services/ia_dev/README.md) | Contrat d’intégration du module `ia_dev` |
|
||||
|
||||
## Fonctionnalités (`features/`)
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@ Références complémentaires : [system-architecture.md](./system-architecture.m
|
||||
|
||||
| Élément | Rôle | Où vit la vérité opérationnelle |
|
||||
|---------|------|----------------------------------|
|
||||
| **smart_ide** | Socle : doc, `services/*`, scripts, systemd, confs `ia_dev` (`./projects/<id>/conf.json`), sous-module **`ia_dev/`** | Dépôt Git **smart_ide** (forge interne) |
|
||||
| **smart_ide** | Socle : doc, `services/*`, scripts, systemd, confs `ia_dev` (`./projects/<id>/conf.json`), module **`ia_dev/`**, journaux **`logs/`** | Dépôt Git **smart_ide** (forge interne) |
|
||||
| **Projets développés** | Code métier (docv, autres produits) : sources, builds, tests | **Autres** dépôts Git ; clones sur disque en dehors de `./projects/` (convention : répertoire frère `../projects/<nom>/` ou équivalent) |
|
||||
| **Couche API IA** | Routage HTTP, auth, appels vers LLM, RAG, outils, agents | Processus sur l’**hôte** (systemd, ports locaux) ; contrats décrits sous `docs/API/` |
|
||||
| **Git (hôte)** | Historique des dépôts, hooks, branches par environnement | Chaque dépôt ; politique de branche documentée par projet |
|
||||
@ -67,7 +67,7 @@ flowchart TB
|
||||
|
||||
- **Source de vérité** pour le code et la documentation versionnée des projets.
|
||||
- **Branches** : alignement avec les environnements (test / pprod / prod) selon la politique du projet ; smart_ide documente les cibles dans [platform-target.md](./platform-target.md) et [deployment-target.md](./deployment-target.md).
|
||||
- **Sous-module `ia_dev`** : `git submodule update --init --recursive` sur smart_ide ; puis scripts de post-checkout documentés ([ia_dev-submodule.md](./ia_dev-submodule.md), [projects/README.md](../projects/README.md)).
|
||||
- **Module `ia_dev`** : présent dans l’arborescence du dépôt **smart_ide** ; liens `ia_dev/projects/*` et scripts documentés ([ia_dev-module.md](./ia_dev-module.md), [projects/README.md](../projects/README.md)).
|
||||
|
||||
### Ollama
|
||||
|
||||
@ -89,29 +89,28 @@ Objectif : après un changement **tracé dans Git**, les systèmes en aval (Anyt
|
||||
|
||||
### 4.1 Ordre de référence (nouvelle machine ou post-clone)
|
||||
|
||||
1. Cloner **smart_ide** avec sous-modules : `git clone --recurse-submodules …`.
|
||||
2. Initialiser / mettre à jour **`ia_dev`** : `git submodule update --init --recursive`.
|
||||
3. Recréer le lien conf projet : `./scripts/ensure-ia-dev-smart-ide-project-link.sh` ([projects/README.md](../projects/README.md)).
|
||||
4. Cloner les **projets applicatifs** à l’emplacement convenu (ex. `../projects/<id>/`) et vérifier les chemins **absolus** dans `projects/<id>/conf.json` si `ia_dev` doit les piloter.
|
||||
5. Démarrer **Ollama** et **AnythingLLM** sur l’hôte ([services.md](./services.md)) ; créer les **workspaces** et noter les **slugs**.
|
||||
6. Configurer l’environnement de synchro AnythingLLM : `~/.config/4nk/anythingllm-sync.env` (URL, clé API) — ne pas commiter les secrets.
|
||||
7. Par dépôt à indexer : fichier **`.anythingllm.json`** à la racine avec `{ "workspaceSlug": "…" }` (ou variable d’environnement équivalente), puis installer le hook **post-merge** : [features/anythingllm-pull-sync-after-pull.md](./features/anythingllm-pull-sync-after-pull.md), [scripts/anythingllm-pull-sync/README.md](../scripts/anythingllm-pull-sync/README.md).
|
||||
1. Cloner **smart_ide** : `git clone …` (le répertoire **`ia_dev/`** suit le même historique Git que le monorepo).
|
||||
2. Recréer le lien conf projet si besoin : `./scripts/ensure-ia-dev-smart-ide-project-link.sh` ([projects/README.md](../projects/README.md)).
|
||||
3. Cloner les **projets applicatifs** à l’emplacement convenu (ex. `../projects/<id>/`) et vérifier les chemins **absolus** dans `projects/<id>/conf.json` si `ia_dev` doit les piloter.
|
||||
4. Démarrer **Ollama** et **AnythingLLM** sur l’hôte ([services.md](./services.md)) ; créer les **workspaces** et noter les **slugs**.
|
||||
5. Configurer l’environnement de synchro AnythingLLM : `~/.config/4nk/anythingllm-sync.env` (URL, clé API) — ne pas commiter les secrets.
|
||||
6. Par dépôt à indexer : fichier **`.anythingllm.json`** à la racine avec `{ "workspaceSlug": "…" }` (ou variable d’environnement équivalente), puis installer le hook **post-merge** : [features/anythingllm-pull-sync-after-pull.md](./features/anythingllm-pull-sync-after-pull.md), [scripts/anythingllm-pull-sync/README.md](../scripts/anythingllm-pull-sync/README.md).
|
||||
|
||||
### 4.2 Cycle de travail développeur (projet applicatif)
|
||||
|
||||
1. `git pull` (ou `merge`) sur le clone du projet.
|
||||
1. `git pull` (ou `merge`) sur le clone du projet — peut être **automatisé** par [`cron/git-pull-project-clones.sh`](../cron/git-pull-project-clones.sh) à partir des `projects/<id>/conf.json` (voir [`cron/README.md`](../cron/README.md)).
|
||||
2. Le hook **post-merge** exécute **`scripts/anythingllm-pull-sync/sync.mjs`** : envoi des fichiers **modifiés ou ajoutés** vers le workspace AnythingLLM du projet, avec exclusions **`.4nkaiignore`**.
|
||||
3. Limites documentées : pas de suppression automatique des documents retirés du repo dans la version actuelle du script ; traiter les gros refactors par une **resynchro** manuelle ou évolution du script si le besoin est récurrent.
|
||||
|
||||
### 4.3 Cycle de travail sur smart_ide
|
||||
|
||||
1. `git pull` sur smart_ide ; mettre à jour le sous-module **`ia_dev`** si le pointeur parent a bougé.
|
||||
1. `git pull` sur smart_ide (inclut les mises à jour sous **`ia_dev/`**).
|
||||
2. Réexécuter **`ensure-ia-dev-smart-ide-project-link.sh`** si le répertoire `ia_dev/projects/` a été réinitialisé.
|
||||
3. Option : installer le même hook **post-merge** sur le dépôt **smart_ide** si un workspace AnythingLLM est dédié au monorepo (fichier `.anythingllm.json` + slug).
|
||||
|
||||
### 4.4 Agents, déploiement, ticketing (`ia_dev`)
|
||||
|
||||
- Exécution depuis la **racine** du sous-module `ia_dev/` ; résolution du projet : `IA_PROJECT_ID`, `--project`, `MAIL_TO`, `AI_AGENT_TOKEN` — voir `ia_dev/projects/README.md` dans le sous-module.
|
||||
- Exécution depuis la **racine** de `ia_dev/` ; résolution du projet : `IA_PROJECT_ID`, `--project`, `MAIL_TO`, `AI_AGENT_TOKEN` — voir [`ia_dev/projects/README.md`](../ia_dev/projects/README.md).
|
||||
- Les scripts **ne remplacent pas** Git : ils **lisent** `conf.json` pour savoir où sont les dépôts et comment déployer.
|
||||
|
||||
### 4.5 Cohérence « clone présent + workspace aligné »
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
## Objectif
|
||||
|
||||
Remplacer à terme l’appel **direct** au dépôt sous-module [`ia_dev`](../ia_dev-submodule.md) par un **service HTTP** sous [`services/ia-dev-gateway/`](../../services/ia-dev-gateway/) qui :
|
||||
Remplacer à terme l’appel **direct** au répertoire module [`ia_dev`](../ia_dev-module.md) par un **service HTTP** sous [`services/ia-dev-gateway/`](../../services/ia-dev-gateway/) qui :
|
||||
|
||||
- Pointe vers un **fork** de [4nk/ia_dev](https://git.4nkweb.com/4nk/ia_dev.git) (même historique Git, gouvernance dans le monorepo `smart_ide`).
|
||||
- **N’implémente pas** la logique métier des projets : il **oriente** les jobs vers `projects/<id>/`, `deploy/`, scripts existants, avec policy et journalisation.
|
||||
@ -21,7 +21,7 @@ Remplacer à terme l’appel **direct** au dépôt sous-module [`ia_dev`](../ia_
|
||||
|
||||
Aujourd’hui `./ia_dev` reste le **checkout canonique** sur l’hôte. Le binaire `ia-dev-gateway` reçoit `IA_DEV_ROOT` (défaut : répertoire parent du service ou chemin absolu vers `./ia_dev`).
|
||||
|
||||
**Trajectoire** : sous-module conservé jusqu’à ce que le fork soit **vendored** ou **cloné par le service** au déploiement ; puis documentation de migration dans [ia_dev-submodule.md](../ia_dev-submodule.md).
|
||||
**Trajectoire** : module `ia_dev` dans le monorepo jusqu’à ce qu’un fork soit **vendored** ou **cloné par le service** au déploiement ; documentation de migration dans [ia_dev-module.md](../ia_dev-module.md).
|
||||
|
||||
## API (spécification)
|
||||
|
||||
|
||||
37
docs/ia_dev-module.md
Normal file
37
docs/ia_dev-module.md
Normal file
@ -0,0 +1,37 @@
|
||||
# Module `ia_dev` dans smart_ide
|
||||
|
||||
Le répertoire **`./ia_dev`** à la racine du monorepo **smart_ide** contient l’**équipe d’agents** (définitions sous `.cursor/agents/`, `.cursor/rules/`), **`deploy/`**, **`gitea-issues/`**, etc. Il est **versionné dans ce dépôt** (plus de sous-module Git séparé pour le checkout standard).
|
||||
|
||||
Les **`conf.json` par projet** pour ce monorepo restent sous **`./projects/<id>/`** à la racine de **smart_ide** (voir [projects/README.md](../projects/README.md)), pas mélangés avec les clones applicatifs (`../projects/` ou autre). Un **lien symbolique** `ia_dev/projects/smart_ide` → `../../projects/smart_ide` permet aux scripts `ia_dev` de résoudre `projects/smart_ide/conf.json`. Après un clone neuf ou une réorganisation des dossiers, exécuter si besoin :
|
||||
|
||||
```bash
|
||||
./scripts/ensure-ia-dev-smart-ide-project-link.sh
|
||||
```
|
||||
|
||||
L’exécution des scripts reste **depuis la racine `ia_dev/`**, comme dans la documentation amont du dépôt historique [4nk/ia_dev](https://git.4nkweb.com/4nk/ia_dev.git) ; **smart_ide** fournit l’environnement IDE, les scripts hôte, les unités systemd et les journaux sous [`logs/`](../logs/README.md).
|
||||
|
||||
## Journaux
|
||||
|
||||
- Tirage Git planifié des clones : [`logs/git-pull-projects.log`](../logs/README.md) (via [`cron/git-pull-wrapper.sh`](../cron/git-pull-wrapper.sh)).
|
||||
- Scripts `ia_dev` : [`logs/ia_dev.log`](../logs/README.md) (via [`ia_dev/lib/smart_ide_logs.sh`](../ia_dev/lib/smart_ide_logs.sh)).
|
||||
|
||||
## Service d’intégration
|
||||
|
||||
Le périmètre « service » côté monorepo est documenté sous [`services/ia_dev/`](../services/ia_dev/README.md) (contrat, chemins, variables de référence).
|
||||
|
||||
## Relation aux dépôts
|
||||
|
||||
| Élément | Rôle |
|
||||
|---------|------|
|
||||
| **smart_ide** | Cible UX IDE, scripts socle, systemd, doc de déploiement, **`logs/`** |
|
||||
| **`ia_dev/`** (module dans ce dépôt) | Agents, déploiements, ticketing ; confs projet dans `./projects/` + liens sous `ia_dev/projects/` |
|
||||
|
||||
Le futur **agent gateway** doit traiter **`./ia_dev`** comme chemin canonique sur le serveur sauf configuration contraire. Voir [system-architecture.md](./system-architecture.md).
|
||||
|
||||
## Trajectoire : service `ia-dev-gateway`
|
||||
|
||||
Un service HTTP dédié ([features/ia-dev-service.md](./features/ia-dev-service.md), [API/ia-dev-gateway.md](./API/ia-dev-gateway.md)) prendra le relais pour les **clients** (Lapce, front, orchestrateur) : le répertoire **`./ia_dev`** reste la **source de fichiers** côté hôte jusqu’à une éventuelle extraction ou conteneurisation documentée ailleurs.
|
||||
|
||||
1. **Phase actuelle** : module dans **smart_ide** + exécution manuelle / scripts depuis la racine `ia_dev`.
|
||||
2. **Phase gateway** : binaire `ia-dev-gateway` sur l’hôte, `IA_DEV_ROOT` pointant vers `./ia_dev`.
|
||||
3. **Phase fork / mirror** : le dépôt amont `ia_dev` peut continuer à exister sur la forge ; la copie de travail dans **smart_ide** suit le flux Git habituel du monorepo.
|
||||
@ -40,5 +40,5 @@ Règle de contexte (fichiers sous `ia_dev/`, `docs/`, `services/`, etc.) : [`.cu
|
||||
## Liens
|
||||
|
||||
- Dépôt : `https://git.4nkweb.com/4nk/smart_ide`
|
||||
- Sous-module `ia_dev` : [docs/ia_dev-submodule.md](./ia_dev-submodule.md)
|
||||
- Module `ia_dev` : [docs/ia_dev-module.md](./ia_dev-module.md)
|
||||
- Gateway dev : [docs/features/ia-dev-service.md](./features/ia-dev-service.md)
|
||||
|
||||
@ -1,64 +0,0 @@
|
||||
# Submodule `ia_dev`
|
||||
|
||||
The repository [4nk/ia_dev](https://git.4nkweb.com/4nk/ia_dev.git) is integrated as a **Git submodule** at `./ia_dev`.
|
||||
|
||||
It holds the **centralized AI agent team** (definitions under `.cursor/agents/`, `.cursor/rules/`), `deploy/`, `gitea-issues/`, etc. Les **`conf.json` par projet** pour ce monorepo sont versionnés sous **`./projects/<id>/` à la racine de `smart_ide`** (voir [projects/README.md](../projects/README.md)), pas mélangés avec les clones applicatifs (`../projects/` ou autre). Un **lien symbolique** `ia_dev/projects/smart_ide` → `../../projects/smart_ide` permet aux scripts ia_dev de résoudre `projects/smart_ide/conf.json`. Après chaque `git submodule update --init`, exécuter :
|
||||
|
||||
```bash
|
||||
./scripts/ensure-ia-dev-smart-ide-project-link.sh
|
||||
```
|
||||
|
||||
Execution remains **from the `ia_dev` root** per upstream README; `smart_ide` provides the surrounding IDE vision, host scripts, and systemd units.
|
||||
|
||||
## Clone with submodule
|
||||
|
||||
```bash
|
||||
git clone --recurse-submodules https://git.4nkweb.com/4nk/smart_ide.git
|
||||
cd smart_ide
|
||||
```
|
||||
|
||||
## Submodule already present but empty
|
||||
|
||||
```bash
|
||||
git submodule update --init --recursive
|
||||
```
|
||||
|
||||
## Update to latest `ia_dev` commit
|
||||
|
||||
```bash
|
||||
cd ia_dev
|
||||
git fetch origin
|
||||
git checkout <branch-or-tag> # e.g. main
|
||||
cd ..
|
||||
git add ia_dev
|
||||
git commit -m "chore: bump ia_dev submodule"
|
||||
```
|
||||
|
||||
## SSH remote for `ia_dev` (optional)
|
||||
|
||||
If you use SSH instead of HTTPS for the submodule:
|
||||
|
||||
```bash
|
||||
git config submodule.ia_dev.url git@git.4nkweb.com:4nk/ia_dev.git
|
||||
```
|
||||
|
||||
(Requires host key and deploy key configured for Gitea.)
|
||||
|
||||
## Relation to `smart_ide`
|
||||
|
||||
| Repository | Role |
|
||||
|------------|------|
|
||||
| **smart_ide** | IDE target UX, local AI stack scripts, systemd, docs for deployment |
|
||||
| **ia_dev** (submodule) | Agent registry, deploy/ticketing/notary pipelines ; configs projet **smart_ide** dans `./projects/` (racine monorepo) + lien |
|
||||
|
||||
The future **agent gateway** should treat `./ia_dev` as the canonical checkout path on the server unless overridden by configuration. See [system-architecture.md](./system-architecture.md).
|
||||
|
||||
## Trajectoire : service `ia-dev-gateway`
|
||||
|
||||
Un service HTTP dédié ([features/ia-dev-service.md](./features/ia-dev-service.md), [API/ia-dev-gateway.md](./API/ia-dev-gateway.md)) prendra le relais pour les **clients** (Lapce, front, orchestrateur) : le sous-module reste la **source de vérité des fichiers** `ia_dev` jusqu’à migration vers un **fork** cloné ou embarqué au même chemin (`IA_DEV_ROOT`).
|
||||
|
||||
1. **Phase actuelle** : sous-module + exécution manuelle / scripts depuis la racine `ia_dev`.
|
||||
2. **Phase gateway** : binaire `ia-dev-gateway` sur l’hôte, `IA_DEV_ROOT` pointant vers `./ia_dev`.
|
||||
3. **Phase fork** : le fork `ia_dev` est référencé par `smart_ide` (sous-module mis à jour vers le fork ou remplacement documenté) ; le gateway ne change pas de contrat HTTP.
|
||||
|
||||
Ne pas supprimer le sous-module tant que la CI et les postes de dev ne sont pas alignés sur le fork et le service.
|
||||
@ -10,7 +10,7 @@ Ce document résume l’exécution du plan « Plateforme IDE multi-env » et les
|
||||
- [features/lapce-porting-roadmap.md](./features/lapce-porting-roadmap.md)
|
||||
- [features/sso-docv-enso.md](./features/sso-docv-enso.md)
|
||||
- [features/browser-automation-criteria.md](./features/browser-automation-criteria.md)
|
||||
- Mises à jour : [system-architecture.md](./system-architecture.md), [deployment-target.md](./deployment-target.md), [ia_dev-submodule.md](./ia_dev-submodule.md), [API/README.md](./API/README.md), [services.md](./services.md)
|
||||
- Mises à jour : [system-architecture.md](./system-architecture.md), [deployment-target.md](./deployment-target.md), [ia_dev-module.md](./ia_dev-module.md), [API/README.md](./API/README.md), [services.md](./services.md)
|
||||
|
||||
## Réalisé (code minimal)
|
||||
|
||||
|
||||
@ -19,7 +19,7 @@ Conséquences :
|
||||
|
||||
- Les répertoires sous `services/` font partie du **même cycle de vie** que le reste du monorepo (revue, déploiement, systemd).
|
||||
- **`core_ide/`** est un **clone local** de l’éditeur **Lapce** (socle applicatif), présent **dans l’arborescence du monorepo** sur disque ; il est **exclu de l’index Git du parent** par volumétrie (voir racine `.gitignore`). Mise à jour : procédure dans [core-ide.md](./core-ide.md).
|
||||
- `ia_dev` est aujourd’hui un **sous-module** pointant vers la forge 4NK ([ia_dev-submodule.md](./ia_dev-submodule.md)). Un service HTTP **`ia-dev-gateway`** ([features/ia-dev-service.md](./features/ia-dev-service.md)) exposera le registre et les exécutions agents ; trajectoire documentée dans le sous-module. Si la politique « un seul historique » devient stricte, la trajectoire possible est **fusion** du contenu agent dans ce dépôt (à planifier), en conservant la même séparation logique des dossiers.
|
||||
- `ia_dev` est un **répertoire versionné** dans ce monorepo (évolution historique depuis le dépôt forge [4nk/ia_dev](https://git.4nkweb.com/4nk/ia_dev.git)) ; intégration et journaux : [ia_dev-module.md](./ia_dev-module.md), [`services/ia_dev/`](../services/ia_dev/README.md), [`logs/README.md`](../logs/README.md). Un service HTTP **`ia-dev-gateway`** ([features/ia-dev-service.md](./features/ia-dev-service.md)) exposera le registre et les exécutions agents.
|
||||
- **Orchestrateur** HTTP : [features/orchestrator-api.md](./features/orchestrator-api.md) — serveur stub sous `services/smart-ide-orchestrator/` ; routage intentions → Ollama, AnythingLLM, micro-services, `ia-dev-gateway` (forward HTTP à compléter).
|
||||
|
||||
## Cartographie des ressources (arborescence)
|
||||
@ -34,10 +34,11 @@ Conséquences :
|
||||
| `core_ide/` | **Sources Lapce** — socle applicatif (build éditeur, personnalisations) — clone amont, hors index du parent |
|
||||
| `extensions/anythingllm-workspaces/` | Outils / modèles alignés AnythingLLM et workspaces par projet |
|
||||
| `scripts/` , `setup/` , `systemd/` | Installation hôte, scripts d’exploitation, unités utilisateur pour services |
|
||||
| `cron/` | Pull **Git** planifié des clones décrits par `projects/<id>/conf.json` (`project_path`) — [cron/README.md](../cron/README.md) |
|
||||
| `services/local-office/` | **API REST** Office (upload, commandes docx, stockage SQLite + fichiers) ; complément programmatique à ONLYOFFICE |
|
||||
| `services/docv/` | **Contrat d’intégration** docv (hors monorepo) ; données projet sous `../projects/<id>/data/` ; pas de code applicatif docv ici — [features/docv-service-integration.md](./features/docv-service-integration.md) |
|
||||
| `projects/<id>/` (racine monorepo) | **Confs seules** pour `ia_dev` (`conf.json`) — **pas** les clones Git ; clones typiquement sous `../projects/` ou autre racine ; voir [projects/README.md](../projects/README.md) |
|
||||
| `ia_dev/` | Agents, déploiements — exécution sous policy ; `projects/<id>/` du sous-module peut pointer vers `../../projects/<id>` (lien) ; voir sous-module |
|
||||
| `ia_dev/` | Agents, déploiements — exécution sous policy ; `ia_dev/projects/<id>` peut pointer vers `../../projects/<id>` (lien) ; voir [ia_dev-module.md](./ia_dev-module.md) |
|
||||
| `services/ia-dev-gateway/` | Gateway HTTP (stub runner) : registre agents `.md`, runs, SSE — [features/ia-dev-service.md](./features/ia-dev-service.md) |
|
||||
| `services/smart-ide-orchestrator/` | Routage intentions (stub forward) — [features/orchestrator-api.md](./features/orchestrator-api.md) |
|
||||
|
||||
@ -45,9 +46,9 @@ Conséquences :
|
||||
|
||||
Chaque environnement possède ses **URLs**, **secrets** et **politiques** (AnythingLLM, tokens micro-services, OIDC front — docv). Pas de configuration sensible dans le dépôt : `.secrets/<env>/` ou variables d’hébergement. Détail : [platform-target.md](./platform-target.md).
|
||||
|
||||
## Checkout `ia_dev` dans ce dépôt
|
||||
## Module `ia_dev` dans ce dépôt
|
||||
|
||||
Le dépôt [**ia_dev**](https://git.4nkweb.com/4nk/ia_dev.git) est relié à `smart_ide` comme **sous-module Git** sous `./ia_dev` (forge 4NK, pas GitHub). Sur le serveur SSH, l’**agent gateway** et les outils peuvent pointer vers ce chemin comme racine d’exécution des agents (tout script invoqué depuis la racine `ia_dev`, comme documenté en amont). Voir [ia_dev-submodule.md](./ia_dev-submodule.md).
|
||||
Le répertoire **`./ia_dev`** fait partie du dépôt **smart_ide** (référence historique : [4nk/ia_dev](https://git.4nkweb.com/4nk/ia_dev.git) sur la forge). Sur le serveur SSH, l’**agent gateway** et les outils peuvent pointer vers ce chemin comme racine d’exécution des agents (scripts invoqués depuis la racine `ia_dev`). Voir [ia_dev-module.md](./ia_dev-module.md) et [services/ia_dev/](../services/ia_dev/README.md).
|
||||
|
||||
## Répartition physique (première cible)
|
||||
|
||||
@ -175,7 +176,7 @@ flowchart TB
|
||||
docs[docs]
|
||||
svc[services]
|
||||
coreIde[core_ide]
|
||||
ia[ia_dev_submodule]
|
||||
ia[ia_dev_module]
|
||||
ext[extensions]
|
||||
scr[scripts_setup_systemd]
|
||||
end
|
||||
|
||||
2
ia_dev
2
ia_dev
@ -1 +1 @@
|
||||
Subproject commit e8c0db220005ca7e670e496931e293b57bc63d9c
|
||||
Subproject commit 756bab0cd8d4d77dd2e83eaf108efc4c9d132fa1
|
||||
2
logs/.gitignore
vendored
Normal file
2
logs/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
# Fichiers de journal locaux uniquement
|
||||
*.log
|
||||
12
logs/README.md
Normal file
12
logs/README.md
Normal file
@ -0,0 +1,12 @@
|
||||
# Journaux smart_ide (tâches de fond et ia_dev)
|
||||
|
||||
Les fichiers `*.log` sous ce répertoire sont **produits localement** par la machine qui exécute les timers systemd utilisateur, les cron, ou les scripts `ia_dev`. Ils ne sont **pas versionnés** (voir `.gitignore`).
|
||||
|
||||
| Fichier | Origine |
|
||||
|---------|---------|
|
||||
| `git-pull-projects.log` | Tirage Git planifié des clones ([`cron/git-pull-wrapper.sh`](../cron/git-pull-wrapper.sh)), variable `PULL_SYNC_LOG` dans [`cron/config.env`](../cron/config.env). |
|
||||
| `ia_dev.log` | Exécutions des scripts shell sous `ia_dev/` lorsque ce dépôt est un checkout **smart_ide** avec `ia_dev` au bon emplacement (détection via `cron/git-pull-wrapper.sh` ou `projects/smart_ide/`). |
|
||||
|
||||
Variable interne utilisée par les scripts : `SMART_IDE_LOG_IA_DEV_ROOT` (racine `ia_dev`), posée par [`ia_dev/lib/smart_ide_logs.sh`](../ia_dev/lib/smart_ide_logs.sh).
|
||||
|
||||
Service métier associé : [`services/ia_dev/`](../services/ia_dev/README.md).
|
||||
@ -6,14 +6,30 @@ Ce répertoire, à la **racine du monorepo `smart_ide`**, ne contient que les **
|
||||
|
||||
Les dépôts sources des produits (ex. backend **docv** sous un chemin du type `…/enso/docv`, autres apps) doivent vivre **ailleurs**, selon la convention du poste — typiquement un répertoire **frère** du monorepo, par ex. **`../projects/<nom>/`** (relatif à la racine `smart_ide`), **distinct** de `./projects/` ici.
|
||||
|
||||
- **`./projects/`** (ce dossier) → uniquement `conf.json` (+ métadonnées légères) pour que `ia_dev` résolve `projects/<id>/conf.json` via le lien symbolique décrit dans [docs/ia_dev-submodule.md](../docs/ia_dev-submodule.md).
|
||||
- **`./projects/`** (ce dossier) → uniquement `conf.json` (+ métadonnées légères) pour que `ia_dev` résolve `projects/<id>/conf.json` via le lien symbolique décrit dans [docs/ia_dev-module.md](../docs/ia_dev-module.md).
|
||||
- **`../projects/`** (ou autre racine configurée) → arborescences Git complètes, builds, etc. ; `project_path` dans chaque `conf.json` pointe vers ces chemins **absolus**.
|
||||
|
||||
## `smart_ide`
|
||||
|
||||
- Fichier : [`smart_ide/conf.json`](./smart_ide/conf.json)
|
||||
- Après `git submodule update`, exécuter [`scripts/ensure-ia-dev-smart-ide-project-link.sh`](../scripts/ensure-ia-dev-smart-ide-project-link.sh) pour recréer le lien `ia_dev/projects/smart_ide` → `../../projects/smart_ide`.
|
||||
- Après clone ou réorganisation des dossiers, exécuter si besoin [`scripts/ensure-ia-dev-smart-ide-project-link.sh`](../scripts/ensure-ia-dev-smart-ide-project-link.sh) pour recréer le lien `ia_dev/projects/smart_ide` → `../../projects/smart_ide`.
|
||||
|
||||
## `enso`
|
||||
|
||||
- Fichier : [`enso/conf.json`](./enso/conf.json) — monorepo **enso** (`project_path` typique `/home/ncantu/code/enso`), déploiement `deploy/scripts_v2`, forge **4nk/enso** (wiki / issues), mails ticketing `AI.ENSO.*@4nkweb.com`.
|
||||
- Cron fragment : [`cron/fragments/enso.cron`](../cron/fragments/enso.cron).
|
||||
- Pour que **`ia_dev`** résolve `projects/enso/conf.json`, créer sous `ia_dev/projects/` un lien symbolique `enso` → `../../projects/enso` (même principe que `smart_ide`).
|
||||
|
||||
## Synchronisation Git planifiée (`cron/`)
|
||||
|
||||
Pour **chaque** `projects/<id>/conf.json`, le tirage automatique utilise la **config centralisée** [`cron/config.env`](../cron/config.env) (`PULL_SYNC_*`) et le wrapper [`cron/git-pull-wrapper.sh`](../cron/git-pull-wrapper.sh), qui appelle [`cron/git-pull-project-clones.sh`](../cron/git-pull-project-clones.sh) (`git fetch` / **`merge --ff-only`** si possible).
|
||||
|
||||
- **Activer le timer systemd utilisateur** (recommandé) : [`scripts/install-git-pull-systemd-user.sh`](../scripts/install-git-pull-systemd-user.sh)
|
||||
- Désactiver pour un id projet : `"cron": { "git_pull": false }` dans le `conf.json` concerné.
|
||||
- Désactiver tout le mécanisme : `PULL_SYNC_ENABLED=0` dans `config.env` ou `cron/config.local.env`.
|
||||
|
||||
Détail : [`cron/README.md`](../cron/README.md). Les clones restent sous le chemin **absolu** `project_path`.
|
||||
|
||||
## Référence amont
|
||||
|
||||
Schéma des champs : `ia_dev/projects/README.md` dans le sous-module (documentation ia_dev).
|
||||
Schéma des champs : `ia_dev/projects/README.md` dans le sous-module (documentation ia_dev). Le bloc optionnel **`cron`** est une extension **smart_ide** pour les scripts locaux ; `ia_dev` peut l’ignorer s’il ne le lit pas.
|
||||
|
||||
27
scripts/install-git-pull-systemd-user.sh
Executable file
27
scripts/install-git-pull-systemd-user.sh
Executable file
@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
# Installe le timer systemd utilisateur pour git-pull (config centralisée : cron/config.env).
|
||||
# Usage : ./scripts/install-git-pull-systemd-user.sh
|
||||
# Puis : systemctl --user status git-pull-project-clones.timer
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
UNIT_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user"
|
||||
SERVICE_IN="${ROOT}/systemd/user/git-pull-project-clones.service.in"
|
||||
TIMER_SRC="${ROOT}/systemd/user/git-pull-project-clones.timer"
|
||||
SERVICE_OUT="${UNIT_DIR}/git-pull-project-clones.service"
|
||||
TIMER_OUT="${UNIT_DIR}/git-pull-project-clones.timer"
|
||||
|
||||
mkdir -p "$UNIT_DIR"
|
||||
sed "s|@SMART_IDE_ROOT@|$ROOT|g" "$SERVICE_IN" >"$SERVICE_OUT"
|
||||
cp -f "$TIMER_SRC" "$TIMER_OUT"
|
||||
chmod 0644 "$SERVICE_OUT" "$TIMER_OUT"
|
||||
chmod +x "${ROOT}/cron/git-pull-wrapper.sh" "${ROOT}/cron/git-pull-project-clones.sh"
|
||||
|
||||
systemctl --user daemon-reload
|
||||
systemctl --user enable git-pull-project-clones.timer
|
||||
systemctl --user start git-pull-project-clones.timer
|
||||
|
||||
echo "Installé : $SERVICE_OUT"
|
||||
echo "Timer : $(systemctl --user is-active git-pull-project-clones.timer) (next: $(systemctl --user list-timers git-pull-project-clones.timer --no-legend 2>/dev/null | awk '{print $1,$2}' || true))"
|
||||
echo "Config : $ROOT/cron/config.env (+ optionnel cron/config.local.env)"
|
||||
echo "Logs : voir PULL_SYNC_LOG dans config.env (défaut <racine smart_ide>/logs/git-pull-projects.log)"
|
||||
6
services/ia_dev/.env.example
Normal file
6
services/ia_dev/.env.example
Normal file
@ -0,0 +1,6 @@
|
||||
# Référence d’intégration (valeurs réelles hors dépôt).
|
||||
# Racine d’exécution des scripts agents / deploy (souvent …/smart_ide/ia_dev).
|
||||
# IA_DEV_ROOT=/chemin/vers/smart_ide/ia_dev
|
||||
|
||||
# Journal agrégé smart_ide (optionnel ; défaut résolu par ia_dev/lib/smart_ide_logs.sh).
|
||||
# SMART_IDE_LOG_IA_DEV_ROOT=/chemin/vers/smart_ide/ia_dev
|
||||
21
services/ia_dev/README.md
Normal file
21
services/ia_dev/README.md
Normal file
@ -0,0 +1,21 @@
|
||||
# ia_dev — module smart_ide
|
||||
|
||||
Le répertoire **`ia_dev/`** à la racine du monorepo **smart_ide** est le **module agents / déploiement / ticketing** (équivalent historique du dépôt [4nk/ia_dev](https://git.4nkweb.com/4nk/ia_dev.git) lorsqu’il était sous-module Git). Il est **versionné dans ce dépôt** ; il n’y a plus de `git submodule update` pour l’obtenir.
|
||||
|
||||
## Rôle
|
||||
|
||||
- Scripts **`deploy/`**, **`gitea-issues/`**, outillage **`tools/`**, définitions **`.cursor/`**.
|
||||
- Résolution des projets via **`projects/<id>/conf.json`** à la racine **smart_ide** et liens sous `ia_dev/projects/` (voir [projects/README.md](../../projects/README.md), [docs/ia_dev-module.md](../../docs/ia_dev-module.md)).
|
||||
|
||||
## Journaux smart_ide
|
||||
|
||||
Les exécutions shell concernées écrivent des événements dans **`logs/ia_dev.log`** à la racine **smart_ide** lorsque la détection du monorepo réussit (présence de `cron/git-pull-wrapper.sh` ou de `projects/smart_ide/` au-dessus de `ia_dev/`). Détail : [`logs/README.md`](../../logs/README.md), implémentation [`ia_dev/lib/smart_ide_logs.sh`](../../ia_dev/lib/smart_ide_logs.sh).
|
||||
|
||||
## Variables (référence)
|
||||
|
||||
Les chemins réels restent hors dépôt (secrets, clones). Pour l’intégration orchestrateur / gateway, voir [`.env.example`](./.env.example).
|
||||
|
||||
## Liens
|
||||
|
||||
- Architecture : [docs/system-architecture.md](../../docs/system-architecture.md)
|
||||
- Gateway HTTP cible : [docs/features/ia-dev-service.md](../../docs/features/ia-dev-service.md)
|
||||
8
systemd/user/git-pull-project-clones.service.in
Normal file
8
systemd/user/git-pull-project-clones.service.in
Normal file
@ -0,0 +1,8 @@
|
||||
[Unit]
|
||||
Description=smart_ide — git fetch/ff pour clones (projects/*/conf.json)
|
||||
Documentation=file://@SMART_IDE_ROOT@/cron/README.md
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
WorkingDirectory=@SMART_IDE_ROOT@
|
||||
ExecStart=@SMART_IDE_ROOT@/cron/git-pull-wrapper.sh
|
||||
10
systemd/user/git-pull-project-clones.timer
Normal file
10
systemd/user/git-pull-project-clones.timer
Normal file
@ -0,0 +1,10 @@
|
||||
[Unit]
|
||||
Description=smart_ide — timer tirage Git clones (toutes les 15 minutes)
|
||||
|
||||
[Timer]
|
||||
# Calendrier : modifier ici puis reinstall (scripts/install-git-pull-systemd-user.sh)
|
||||
OnCalendar=*:0/15
|
||||
Persistent=true
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
Loading…
x
Reference in New Issue
Block a user