fix: scoate gitlink-urile care rup pagina Gitea si muta claude-agent in repo propriu
Repo-ul avea 4 intrari de tip submodul (gitlink) fara .gitmodules: gomag-vending, roaauto, space-booking, vending_data_intelligence_report. Gitea 1.24.3 face panic pe listarea radacinii in acest caz (modules/git/commit_info.go:21 -> nil pointer), deci https://gitea.romfast.ro/romfast/workspace raspundea cu 500 Internal Server Error din commit-ul6d6a5b0(2026-04-06). Verificat: commit-urile fara gitlink (0854308,b8123b6) se randau cu 200. Toate cele patru directoare sunt repo-uri independente pe disc; raman neatinse, doar nu mai sunt urmarite aici. La fel si claude-agent/, care fusese comis din greseala aici in loc de repo propriu (vezi /workspace/claude-agent, acum repo separat). .gitignore: sectiunea de proiecte rescrisa exhaustiv (toate subdirectoarele din /workspace au propriul .git) si normalizata la LF. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4uzvgm7AyJch5WH8QHRhY
This commit is contained in:
142
.gitignore
vendored
142
.gitignore
vendored
@@ -1,63 +1,85 @@
|
|||||||
# Exclude project directories
|
# Exclude project directories
|
||||||
romfastsql/
|
|
||||||
test/
|
# Claude Code
|
||||||
|
.claude-logs/
|
||||||
# Claude Code
|
.claude-work/
|
||||||
.claude-logs/
|
.claude/
|
||||||
.claude-work/
|
|
||||||
.claude/
|
# Node.js
|
||||||
|
node_modules/
|
||||||
# Node.js
|
package-lock.json
|
||||||
node_modules/
|
npm-debug.log*
|
||||||
package-lock.json
|
yarn-debug.log*
|
||||||
npm-debug.log*
|
yarn-error.log*
|
||||||
yarn-debug.log*
|
.npm/
|
||||||
yarn-error.log*
|
.yarn/
|
||||||
.npm/
|
|
||||||
.yarn/
|
# Python
|
||||||
|
__pycache__/
|
||||||
# Python
|
*.py[cod]
|
||||||
__pycache__/
|
*$py.class
|
||||||
*.py[cod]
|
.Python
|
||||||
*$py.class
|
*.egg-info/
|
||||||
.Python
|
.eggs/
|
||||||
*.egg-info/
|
*.egg
|
||||||
.eggs/
|
.venv/
|
||||||
*.egg
|
venv/
|
||||||
.venv/
|
ENV/
|
||||||
venv/
|
.env
|
||||||
ENV/
|
|
||||||
.env
|
# IDE & Editors
|
||||||
|
.idea/
|
||||||
# IDE & Editors
|
.vscode/
|
||||||
.idea/
|
*.swp
|
||||||
.vscode/
|
*.swo
|
||||||
*.swp
|
*~
|
||||||
*.swo
|
.DS_Store
|
||||||
*~
|
|
||||||
.DS_Store
|
# Build outputs
|
||||||
|
dist/
|
||||||
# Build outputs
|
build/
|
||||||
dist/
|
*.o
|
||||||
build/
|
*.so
|
||||||
*.o
|
|
||||||
*.so
|
# Logs
|
||||||
|
*.log
|
||||||
# Logs
|
logs/
|
||||||
*.log
|
|
||||||
logs/
|
# Temporary files
|
||||||
|
*.tmp
|
||||||
# Temporary files
|
*.temp
|
||||||
*.tmp
|
.cache/
|
||||||
*.temp
|
tmp/
|
||||||
.cache/
|
|
||||||
tmp/
|
# Exclude any other project directories that might be added
|
||||||
|
# Keep only workspace-level files (.sh, .md)
|
||||||
# Exclude any other project directories that might be added
|
|
||||||
# Keep only workspace-level files (.sh, .md)
|
|
||||||
|
|
||||||
# Project directories (separate repos)
|
# Project directories (separate repos)
|
||||||
autonomous-coding/
|
# Fiecare are propriul .git; NU se urmaresc aici (nici ca submodul --
|
||||||
claude-plugins/
|
# gitlink fara .gitmodules face pagina repo-ului sa dea 500 pe Gitea).
|
||||||
roa2web/
|
|
||||||
.gstack/
|
.gstack/
|
||||||
|
.worktrees/
|
||||||
|
atm/
|
||||||
|
autonomous-coding/
|
||||||
|
autopass/
|
||||||
|
city-discovery/
|
||||||
|
claude-agent/
|
||||||
|
claude-plugins/
|
||||||
|
efactura-generator/
|
||||||
|
escape-builder/
|
||||||
|
game-library/
|
||||||
|
gomag-vending/
|
||||||
|
icon-generator/
|
||||||
|
paula-escape/
|
||||||
|
qr-generator/
|
||||||
|
qrpdf/
|
||||||
|
roa2web-agent-ai/
|
||||||
|
roa2web/
|
||||||
|
roaauto/
|
||||||
|
romfast-website/
|
||||||
|
romfastsql/
|
||||||
|
service-auto/
|
||||||
|
space-booking/
|
||||||
|
test/
|
||||||
|
vending_data_intelligence_report/
|
||||||
|
vfp_roaauto/
|
||||||
|
|||||||
5
claude-agent/.gitignore
vendored
5
claude-agent/.gitignore
vendored
@@ -1,5 +0,0 @@
|
|||||||
__pycache__/
|
|
||||||
*.pyc
|
|
||||||
.venv/
|
|
||||||
node_modules/
|
|
||||||
.env
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
# CLAUDE.md — claude-agent (spațiul puntii Discord)
|
|
||||||
|
|
||||||
Vezi `README.md` pentru context general.
|
|
||||||
|
|
||||||
## Canal principal
|
|
||||||
|
|
||||||
Utilizatorul comunică cu acest agent în principal prin **Discord**, prin puntea Discord → Claude Code
|
|
||||||
(cod sursă: `romfastsql/proxmox/lxc171-claude-agent/discord-bridge/`, vezi și `docs/echo-roa2web.md`
|
|
||||||
pentru diferența față de Echo/MoltBot). Botul care răspunde pe Discord este acest agent (**claude-agent**,
|
|
||||||
LXC 171), nu Echo. Atașamentele (imagini, fișiere) trimise pe Discord nu sunt încă citite automat de
|
|
||||||
punte — doar textul mesajului ajunge la Claude (vezi limitarea cunoscută mai jos, în lucru).
|
|
||||||
|
|
||||||
## Documentație
|
|
||||||
|
|
||||||
| Subiect | Fișier |
|
|
||||||
|---------|--------|
|
|
||||||
| Infrastructură Proxmox (noduri, LXC, VM, proiecte) | [docs/infrastructure.md](docs/infrastructure.md) |
|
|
||||||
| Echo (LXC 110 moltbot) — acces și comenzi pentru roa2web | [docs/echo-roa2web.md](docs/echo-roa2web.md) |
|
|
||||||
| Maria — punte WhatsApp + RAG (LXC 171, servicii + dashboard comun) | [docs/maria-whatsapp-rag-prototype.md](docs/maria-whatsapp-rag-prototype.md) |
|
|
||||||
|
|
||||||
Detalii complete Proxmox (config, troubleshooting, incidente): `/workspace/romfastsql/proxmox/`.
|
|
||||||
|
|
||||||
## Convenții de lucru
|
|
||||||
|
|
||||||
- Pentru sarcini care se pot repeta (ex: extragere transcript video, procesare de fișiere), scrie un script reutilizabil (bash/python) în `tools/` în loc de comenzi ad-hoc de unică folosință.
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
# claude-agent — spatiul de lucru al puntii Discord
|
|
||||||
|
|
||||||
Directorul implicit (`DEFAULT_CWD`) al firelor din puntea Discord -> Claude Code.
|
|
||||||
Ce ceri botului in `#claude-agent` ateriza aici, nu direct in `/workspace`.
|
|
||||||
|
|
||||||
Repo propriu, ca lucrurile facute din Discord sa aiba istoric separat de proiectele
|
|
||||||
reale si sa se poata da inapoi fara sa atinga altceva.
|
|
||||||
|
|
||||||
- Codul puntii NU e aici: e in `romfastsql/proxmox/lxc171-claude-agent/discord-bridge/`.
|
|
||||||
- Pentru a lucra pe alt proiect dintr-un fir: `!cd /workspace/<proiect>`.
|
|
||||||
- Fiecare fir Discord isi tine propriul director; `!status` il arata.
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
# Puntea Discord — cum se acumulează și se golește contextul
|
|
||||||
|
|
||||||
Sursă: `romfastsql/proxmox/lxc171-claude-agent/discord-bridge/` (`bot.py`, `runner.py`, `session_store.py`).
|
|
||||||
|
|
||||||
## Model
|
|
||||||
|
|
||||||
Fiecare fir de Discord (thread) e mapat pe o sesiune Claude Code reală, nu pe o
|
|
||||||
fereastră de memorie proprie (spre deosebire de chatbot-ul Maria/Flowise, care
|
|
||||||
folosește Buffer Window Memory cu `k=5`).
|
|
||||||
|
|
||||||
- `session_store.py` ține în `state.json` câte o înregistrare per `thread_id`,
|
|
||||||
cu câmpul `sid` = session id-ul Claude Code.
|
|
||||||
- La fiecare tur nou pe același fir, `runner.py` pornește procesul cu
|
|
||||||
`claude --resume <sid> --autocompact auto` — deci **contextul se acumulează
|
|
||||||
la nesfârșit** în sesiunea Claude Code, cu compactare automată (`--autocompact
|
|
||||||
auto`) gestionată de Claude Code însuși când se apropie de limita de context
|
|
||||||
(nu e o ștergere, e un sumar intern).
|
|
||||||
- Dacă procesul moare/repornește, se reia cu `--resume` pe același `sid` —
|
|
||||||
contextul supraviețuiește restart-urilor botului.
|
|
||||||
|
|
||||||
## Când se golește efectiv
|
|
||||||
|
|
||||||
Nu există curățare automată pe timp (nu e un TTL/cron). Contextul unui fir se
|
|
||||||
resetează DOAR manual, din Discord:
|
|
||||||
|
|
||||||
- **`/new`** — pornește o sesiune nouă (`sid = None`), fir „curat".
|
|
||||||
- **`/new fork:True`** — sesiune nouă, dar pornită dintr-un fork al
|
|
||||||
contextului curent (păstrează istoricul până la acel punct, apoi ramifică).
|
|
||||||
|
|
||||||
`bot.py:645` apelează `runner.reset(tid, fork=...)`, care în `runner.py:333`
|
|
||||||
oprește procesul curent și șterge `proc.sid` (la fork, marchează following
|
|
||||||
`--resume` cu fork în loc de resume simplu).
|
|
||||||
|
|
||||||
## De reținut
|
|
||||||
|
|
||||||
- Nu confunda acest mecanism cu Maria (Flowise): acolo fereastra e fixă (ultimele
|
|
||||||
5 schimburi, per `sessionId`), aici fereastra e "tot" + auto-compact intern
|
|
||||||
Claude Code, golit doar la `/new`.
|
|
||||||
- Comanda `/cleanup` (`cleanup.py`) NU are legătură cu contextul conversației —
|
|
||||||
curăță procese orfane rămase în urma firelor (memorie RAM), nu istoricul de chat.
|
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
# Echo (LXC 110 moltbot) — acces și comenzi pentru roa2web
|
|
||||||
|
|
||||||
„Echo" nu face parte din codul roa2web — e un bot AI separat (Echo Core, Claude Opus 4.5),
|
|
||||||
rulat pe LXC 110 (moltbot), care are acces la `/workspace` și deci „știe" despre roa2web ca
|
|
||||||
orice alt agent Claude cu acces la filesystem (a generat chiar câteva documente
|
|
||||||
roa2web — vezi bylines „Generated by: Echo" în `roa2web-agent-ai/tasks/prd-roa2web-telegram-bonuri.md`
|
|
||||||
și `roa2web-agent-ai/backend/scripts/whatsapp_import/README.md`).
|
|
||||||
|
|
||||||
Sursa completă: `/workspace/romfastsql/proxmox/lxc110-moltbot/README.md`.
|
|
||||||
|
|
||||||
## Ce este
|
|
||||||
|
|
||||||
| | |
|
|
||||||
|---|---|
|
|
||||||
| Nume proces | `echo-core` (Python), `/home/moltbot/echo-core`, `python3 src/main.py` |
|
|
||||||
| Container | LXC 110 „moltbot", pve1 |
|
|
||||||
| IP | `10.0.20.173` (intern) / `100.120.119.70` (Tailscale) |
|
|
||||||
| Model | Anthropic `claude-opus-4-5`, context 200k |
|
|
||||||
| Canale | Telegram (ON), WhatsApp (ON, +40723197939), Discord (inclus în descrierea serviciului) |
|
|
||||||
|
|
||||||
⚠️ Stack-ul vechi **clawdbot/OpenClaw** (CLI, comenzi `clawdbot ...`) **nu mai e funcțional**
|
|
||||||
(verificat 2026-08-30) — folosește comenzile `echo-core` de mai jos, nu pe cele vechi.
|
|
||||||
|
|
||||||
## Servicii systemd (pe container, user `moltbot`)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
systemctl --user status echo-core
|
|
||||||
systemctl --user restart echo-core
|
|
||||||
journalctl --user -u echo-core -f
|
|
||||||
```
|
|
||||||
|
|
||||||
Servicii înrudite: `echo-taskboard.service` (dashboard API), `echo-whatsapp-bridge.service`
|
|
||||||
(punte WhatsApp, Node/Baileys).
|
|
||||||
|
|
||||||
## Acces
|
|
||||||
|
|
||||||
### SSH direct
|
|
||||||
```bash
|
|
||||||
ssh moltbot@10.0.20.173 # rețea internă
|
|
||||||
ssh moltbot@100.120.119.70 # Tailscale, de oriunde
|
|
||||||
```
|
|
||||||
|
|
||||||
### Dashboard web
|
|
||||||
```bash
|
|
||||||
ssh -L 18789:127.0.0.1:18789 -N moltbot@10.0.20.173 &
|
|
||||||
# apoi: http://localhost:18789
|
|
||||||
```
|
|
||||||
Sau prin Tailscale: `https://moltbot.tailf7372d.ts.net/echo/`.
|
|
||||||
|
|
||||||
### Chat (Telegram / WhatsApp / Discord)
|
|
||||||
Scrii direct botului pe canalul respectiv — nu există un CLI de invocat local pentru asta.
|
|
||||||
|
|
||||||
## Client roa2web al lui Echo (`tools/roa2web_client.py`)
|
|
||||||
|
|
||||||
Pe lângă chat, Echo are un client CLI propriu pentru API-ul financiar roa2web:
|
|
||||||
`~/echo-core/tools/roa2web_client.py` (pe moltbot). Autentificare: user/parolă Oracle +
|
|
||||||
2FA email la primul login; după primul login cu `trust_device=True`, token-urile
|
|
||||||
(access/refresh/trusted-device) stau în keyring-ul local (`service="echo-core"`,
|
|
||||||
`src/credential_store.py`) — sesiunile următoare nu mai cer OTP.
|
|
||||||
|
|
||||||
Config (`~/echo-core/config.json` → cheia `roa2web`):
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"base_url": "https://roa2web.romfast.ro/roa2web/api",
|
|
||||||
"default_company": "114",
|
|
||||||
"default_company_name": "ROMFAST SRL"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Comenzi client (rulate pe moltbot, în `~/echo-core`, cu `.venv/bin/python3`):
|
|
||||||
|
|
||||||
| Comandă | Ce face |
|
|
||||||
|---|---|
|
|
||||||
| `companies` | Listează toate firmele (`id_firma` + nume) |
|
|
||||||
| `summary [--company <cod\|nume>] [--luna N] [--an N]` | Dashboard financiar: clienți, furnizori, trezorerie (`/reports/dashboard/summary`) |
|
|
||||||
| `get <path> [--company ...] [--param k=v ...]` | Query generic pe orice endpoint, ex. `/reports/treasury/bank-cash-register`, `/reports/invoices` |
|
|
||||||
| `verify-2fa <cod> <email>` | Finalizează login-ul cu un cod OTP primit pe email (doar dacă tokenul a expirat și cere reautentificare) |
|
|
||||||
|
|
||||||
Endpoint-uri disponibile sub `/api/reports/...` (din `roa2web-agent-ai/backend/modules/reports/routers/`):
|
|
||||||
`dashboard/summary`, `dashboard/trends`, `dashboard/cashflow`, `dashboard/maturity`,
|
|
||||||
`dashboard/treasury-breakdown`, `invoices/`, `invoices/summary`, `invoices/{numar}`,
|
|
||||||
`treasury/bank-cash-register`, `treasury/bank-cash-accounts`, `trial-balance/`.
|
|
||||||
|
|
||||||
### Integrare în claude-agent — `tools/roa2web.sh`
|
|
||||||
|
|
||||||
Wrapper în acest repo (`/workspace/claude-agent/tools/roa2web.sh`) care rulează clientul de
|
|
||||||
mai sus pe moltbot prin SSH, **fără să dubleze credențialele** aici — folosește token-ul deja
|
|
||||||
în keyring-ul lui echo-core:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
tools/roa2web.sh companies
|
|
||||||
tools/roa2web.sh summary # firma implicită: ROMFAST SRL (114)
|
|
||||||
tools/roa2web.sh summary --company 114 --luna 8 --an 2026
|
|
||||||
tools/roa2web.sh get /reports/treasury/bank-cash-register --company 114
|
|
||||||
```
|
|
||||||
|
|
||||||
Necesită SSH fără parolă către `moltbot@10.0.20.173` (deja funcțional din acest container).
|
|
||||||
|
|
||||||
## Alt canal: comenzi financiare directe în roa2web (fără Echo)
|
|
||||||
|
|
||||||
Independent de Echo, aplicația roa2web are propriul bot Telegram
|
|
||||||
(`roa2web-agent-ai/backend/modules/telegram/`, vezi `docs/telegram/README.md` din acel repo)
|
|
||||||
cu comenzi ca `/dashboard`, `/sold`, `/facturi`, `/trezorerie` — util dacă ai cont Oracle
|
|
||||||
legat direct la Telegram, fără să treci prin Echo/moltbot.
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
# Infrastructură Proxmox
|
|
||||||
|
|
||||||
Sursă completă: `/workspace/romfastsql/proxmox/README.md` (și subdirectoarele `lxc*/`, `vm*/`, `cluster/`).
|
|
||||||
Acest fișier e un rezumat rapid — pentru detalii (config, troubleshooting, incidente) mergi la sursă.
|
|
||||||
|
|
||||||
## Noduri Cluster (3 noduri, quorum activ)
|
|
||||||
|
|
||||||
| Nod | IP | Rol |
|
|
||||||
|-----|-----|-----|
|
|
||||||
| pve1 | 10.0.20.200 | Nod cluster |
|
|
||||||
| pvemini | 10.0.20.201 | Nod principal (majoritatea LXC-urilor) |
|
|
||||||
| pveelite | 10.0.20.202 | Nod cluster |
|
|
||||||
|
|
||||||
## LXC-uri
|
|
||||||
|
|
||||||
| VMID | Nume | Nod | IP |
|
|
||||||
|------|------|-----|-----|
|
|
||||||
| 100 | portainer | pvemini | 10.0.20.170 |
|
|
||||||
| 101 | minecraft | pve1 | - |
|
|
||||||
| 102 | docker.romfast.ro | pvemini | 10.0.20.113 |
|
|
||||||
| 103 | dokploy | pvemini | 10.0.20.167 |
|
|
||||||
| 104 | flowise | pvemini | 10.0.20.161 |
|
|
||||||
| 106 | gitea | pvemini | 10.0.20.165 |
|
|
||||||
| 108 | central-oracle | pvemini | 10.0.20.121 |
|
|
||||||
| 110 | moltbot | pve1 | 10.0.20.173 |
|
|
||||||
| **171** | **claude-agent (acest container)** | pvemini | 10.0.20.171 |
|
|
||||||
| 301 | docker-portainer-template | pveelite | - (stopped) |
|
|
||||||
|
|
||||||
## VM-uri (QEMU)
|
|
||||||
|
|
||||||
| VMID | Nume | Nod | IP |
|
|
||||||
|------|------|-----|-----|
|
|
||||||
| 109 | oracle-dr-windows | pveelite | 10.0.20.37 (stopped) |
|
|
||||||
| 201 | roacentral | pvemini | 10.0.20.122 |
|
|
||||||
| 302 | oracle-test-302 | pvemini | - (stopped) |
|
|
||||||
| 303 | Win11-Adina | pvemini | DHCP |
|
|
||||||
| 310 | Win11-Template-Sysprep | pvemini | template |
|
|
||||||
|
|
||||||
## Proiecte în /workspace
|
|
||||||
|
|
||||||
atm, autopass, city-discovery, claude-agent, efactura-generator, escape-builder, game-library, gomag-vending, icon-generator, paula-escape, qr-generator, qrpdf, roa2web, roa2web-agent-ai, roaauto, romfastsql, romfast-website, service-auto, space-booking, vending_data_intelligence_report, vfp_roaauto
|
|
||||||
@@ -1,146 +0,0 @@
|
|||||||
# Maria — punte WhatsApp + RAG (LXC 171), acum serviciu în git
|
|
||||||
|
|
||||||
Sursa: `romfastsql/proxmox/lxc171-claude-agent/maria-whatsapp-bridge/` (repo
|
|
||||||
`ROMFASTSQL`, commit „Add Maria WhatsApp+RAG bridge as a service (LXC 171)").
|
|
||||||
|
|
||||||
A pornit ca prototip nefinalizat în `/tmp/maria-bridge/` (fără git, fără
|
|
||||||
serviciu systemd — vezi istoricul acestei conversații). A fost mutat integral
|
|
||||||
în git, ca proiect sibling lui `discord-bridge/`, cu servicii `systemctl --user`
|
|
||||||
proprii și dashboard de control.
|
|
||||||
|
|
||||||
Nu trebuie confundat cu:
|
|
||||||
- **Maria pe Flowise** (`vfp_roaauto/COMUN/utile/chatbot/`) — chatbot web,
|
|
||||||
memorie Buffer Window (`k=5`) în Flowise.
|
|
||||||
- **Echo / `echo-whatsapp-bridge.service`** (LXC 110 moltbot) — bridge WhatsApp
|
|
||||||
Baileys separat, al lui Echo Core (Claude Opus 4.5).
|
|
||||||
- **Punte Discord -> Claude Code** (`discord-bridge/`, același container) —
|
|
||||||
alt scop (comandă Claude Code de pe Discord), vezi
|
|
||||||
[`discord-bridge-context.md`](discord-bridge-context.md).
|
|
||||||
|
|
||||||
## Arhitectură
|
|
||||||
|
|
||||||
```
|
|
||||||
WhatsApp (self-chat implicit)
|
|
||||||
-> whatsapp/index.js (Baileys, port 8099)
|
|
||||||
-> rag/consumer.py (polling, RAG STATELESS — fara chat_history)
|
|
||||||
-> rag/store.py (depozit .txt/.md in ~/.maria-bridge/documents/)
|
|
||||||
-> rag/indexer.py (chunking + embeddings Ollama -> rag_index.json)
|
|
||||||
-> rag/sync.py (rclone pull din Google Drive + reindexare conditionata)
|
|
||||||
dashboard/api.py (stdlib, port 18792) — control total din browser
|
|
||||||
```
|
|
||||||
|
|
||||||
## Servicii `systemctl --user` (pe LXC 171, sub `~/.config/systemd/user/`)
|
|
||||||
|
|
||||||
| Unitate | Rol |
|
|
||||||
|---|---|
|
|
||||||
| `maria-whatsapp.service` | Puntea Baileys (Node), port 8099 |
|
|
||||||
| `maria-rag.service` | Consumer RAG (Python venv), răspunde la mesaje |
|
|
||||||
| `maria-sync.service` + `maria-sync.timer` | Sincronizare Drive + reindexare, la 10 min |
|
|
||||||
|
|
||||||
Instalare: `ops/install.sh` (idempotent, mirror al `discord-bridge/ops/install.sh`
|
|
||||||
— creează `~/.maria-bridge/`, venv, `npm install`, symlink-uri unit,
|
|
||||||
`systemctl --user enable`). Bridge-ul **nu pornește automat** — cere scanarea
|
|
||||||
unui cod QR (pas manual, o singură dată); vezi `README.md` din proiect.
|
|
||||||
|
|
||||||
## Control — dashboard COMUN cu puntea Discord (nu unul separat)
|
|
||||||
|
|
||||||
**Decizie ulterioară** (la cererea explicită a utilizatorului): Maria NU are
|
|
||||||
dashboard propriu. Controlul se face din **dashboard-ul punții Discord**
|
|
||||||
(`discord-bridge/dashboard/`, `https://claude-agent.tailf7372d.ts.net/claude`),
|
|
||||||
secțiunea „Maria — WhatsApp + RAG", adăugată direct în `dashboard/api.py` și
|
|
||||||
`index.html` ale acelui proiect. Rutele Maria (`/api/maria/*`) rulează în
|
|
||||||
ACELAȘI proces Python ca puntea Discord, dar comunică cu Maria doar prin
|
|
||||||
subprocess (`systemctl`, scripturi din `rag/`) și HTTP către bridge — fără
|
|
||||||
import de module Python din `maria-whatsapp-bridge`, ca să nu coliseze cu
|
|
||||||
`discord-bridge/config.py` (ambele s-ar numi `config`).
|
|
||||||
|
|
||||||
Ce oferă secțiunea Maria din acel panou:
|
|
||||||
- start/stop/restart pentru `maria-whatsapp` și `maria-rag` (unități fixe,
|
|
||||||
aceeași protecție ca la Discord — niciun nume de unit nu vine din request)
|
|
||||||
- stare conexiune WhatsApp + cod QR de asociere (când nu e conectat)
|
|
||||||
- listă documente din depozit, adăugare/ștergere text, reindexare manuală
|
|
||||||
- buton „sincronizează din Drive acum" (`rag/sync.py`, apelat și de timer)
|
|
||||||
- loguri (tail) pentru `whatsapp.log`/`rag.log`
|
|
||||||
|
|
||||||
Autentificare: aceeași sesiune/cookie ca restul dashboard-ului Discord
|
|
||||||
(`DASHBOARD_TOKEN` din `~/.claude-discord/env`) — un singur login pentru
|
|
||||||
ambele punți.
|
|
||||||
|
|
||||||
## Depozit de documente + Google Drive
|
|
||||||
|
|
||||||
Documentele (`.txt`/`.md`) stau în `~/.maria-bridge/documents/` pe container.
|
|
||||||
Se pot administra manual din dashboard, sau sincroniza automat cu dosarul
|
|
||||||
Google Drive de pe Windows (`D:\GoogleDrive\romfast\document_store`) prin
|
|
||||||
**rclone cu un cont de serviciu Google** (nu OAuth interactiv — containerul
|
|
||||||
e headless). Pași de configurare completi în README-ul proiectului
|
|
||||||
(`maria-whatsapp-bridge/README.md`, secțiunea „Sincronizare cu Google Drive").
|
|
||||||
`DRIVE_REMOTE` gol în env = sincronizare dezactivată, doar upload manual.
|
|
||||||
|
|
||||||
## Context conversațional — neschimbat față de prototip
|
|
||||||
|
|
||||||
`rag/consumer.py` tot NU ține memorie între mesaje — fiecare întrebare e o
|
|
||||||
interogare RAG independentă (system prompt + top-K chunk-uri din index +
|
|
||||||
întrebare). Nu există nimic de "golit"; comparativ:
|
|
||||||
- Maria/Flowise: fereastră fixă de 5 schimburi;
|
|
||||||
- Discord bridge: context nelimitat (autocompact), golit doar cu `/new`;
|
|
||||||
- Maria WhatsApp+RAG: zero memorie, fiecare mesaj e independent.
|
|
||||||
|
|
||||||
## Embeddings — Ollama local pe LXC 171
|
|
||||||
|
|
||||||
Inițial `OLLAMA_URL=http://127.0.0.1:11434` din `env` era un placeholder
|
|
||||||
nefuncțional (niciun Ollama instalat nicăieri, nici local nici pe alt LXC —
|
|
||||||
verificat explicit, nu există server Ollama documentat în infrastructură).
|
|
||||||
**Rezolvat 2026-08-31**: instalat Ollama direct pe acest container
|
|
||||||
(`curl -fsSL https://ollama.com/install.sh | sh`, plus `zstd` ca dependință),
|
|
||||||
pornit ca `ollama.service` (systemd la nivel de sistem, nu `--user`), și
|
|
||||||
tras modelul `nomic-embed-text` (`ollama pull nomic-embed-text`, ~274 MB,
|
|
||||||
rulează CPU-only, fără GPU pe container). Cu asta `rag/indexer.py` și
|
|
||||||
`rag/consumer.py` au un backend de embeddings funcțional local, fără nicio
|
|
||||||
dependință externă de rețea.
|
|
||||||
|
|
||||||
## Sincronizare Google Drive — status real
|
|
||||||
|
|
||||||
`rclone` a fost instalat pe container (`apt-get install rclone`), dar
|
|
||||||
`DRIVE_REMOTE` rămâne **negol configurat**: pasul care lipsește e crearea
|
|
||||||
unui cont de serviciu Google (GCP Console → IAM → Service Accounts) și
|
|
||||||
partajarea folderului `document_store` cu adresa lui de email — acțiuni
|
|
||||||
care cer acces la consola Google Cloud a utilizatorului, deci nu pot fi
|
|
||||||
automatizate din container. Vezi README, secțiunea „Sincronizare cu Google
|
|
||||||
Drive", pentru pașii exacți rămași.
|
|
||||||
|
|
||||||
**Testare imediată a indexării** (fără să aștepte configurarea rclone):
|
|
||||||
s-au adus manual 6 documente reale din folderul Drive `document_store`
|
|
||||||
(`romfast_info.md`, `erori_generale_knowledge.md`, `bilant_knowledge.md`,
|
|
||||||
`import_knowledge.md`, `roafacturare_manual.md`, `spv_semnatura_knowledge.md`)
|
|
||||||
folosind uneltele MCP Google Drive disponibile agentului (cont
|
|
||||||
`mmarius28@gmail.com`, folder id `1C4e75zgH1_7ZK-_oBP5ZZBvUPh3iEo1O`), scrise
|
|
||||||
direct în `~/.maria-bridge/documents/` și indexate cu `rag/indexer.py` —
|
|
||||||
**25 de chunk-uri, index de ~400 KB, reconstruit cu succes** folosind Ollama-ul
|
|
||||||
local de mai sus. Asta confirmă că pipeline-ul store → indexer → embeddings
|
|
||||||
funcționează capăt-la-capăt; rămâne doar conectarea automată la Drive prin
|
|
||||||
`rclone` (pasul manual al utilizatorului, de mai sus).
|
|
||||||
|
|
||||||
## Stare la momentul scrierii (actualizat 2026-08-31)
|
|
||||||
|
|
||||||
`maria-whatsapp`, `maria-rag` și `maria-sync.timer` sunt `active (running)`/
|
|
||||||
`enabled`. Dashboard-ul propriu (`maria-dashboard.service`) a fost **oprit,
|
|
||||||
dezactivat și eliminat din cod** — controlul e acum consolidat în
|
|
||||||
dashboard-ul punții Discord (secțiunea „Maria — WhatsApp + RAG", verificată
|
|
||||||
funcțională prin `curl` direct pe `/api/maria/status`). Bridge-ul a generat
|
|
||||||
cod QR și așteaptă scanarea din telefon (`connected: false` până atunci).
|
|
||||||
|
|
||||||
Rămâne de făcut manual:
|
|
||||||
- **scanarea codului QR** din dashboard (cardul „Conectare WhatsApp") — pas fizic,
|
|
||||||
nu poate fi automatizat;
|
|
||||||
- **contul de serviciu Google + `DRIVE_REMOTE`** — vezi secțiunea de mai sus;
|
|
||||||
fără el, sincronizarea automată din Drive rămâne inactivă (dar upload-ul
|
|
||||||
manual de documente + reindexare funcționează deja, testat);
|
|
||||||
- **file picker în dashboard** — cerut explicit de utilizator: secțiunea
|
|
||||||
„Adaugă document" din panoul Maria permite azi doar scrierea manuală de
|
|
||||||
text într-un textarea; de înlocuit/completat cu un input de tip fișier
|
|
||||||
care acceptă selecția mai multor fișiere deodată (upload multipart, nu
|
|
||||||
JSON), pentru administrare mai rapidă a depozitului. **Neimplementat încă.**
|
|
||||||
|
|
||||||
Bug reparat în timpul instalării inițiale (înainte de consolidare): `install.sh`
|
|
||||||
lega unitatea dashboard-ului propriu la o cale greșită — devenit irelevant
|
|
||||||
odată cu eliminarea acelui dashboard.
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# Wrapper peste clientul roa2web deja autentificat pe moltbot (LXC 110, echo-core).
|
|
||||||
# Nu duplica credentiale aici: ruleaza tools/roa2web_client.py de pe moltbot prin SSH,
|
|
||||||
# folosind token-ul din keyring-ul lui echo-core.
|
|
||||||
#
|
|
||||||
# Uz:
|
|
||||||
# tools/roa2web.sh companies
|
|
||||||
# tools/roa2web.sh summary [--company <cod|nume>] [--luna N] [--an N]
|
|
||||||
# tools/roa2web.sh get <path> [--company <cod|nume>] [--param k=v ...]
|
|
||||||
#
|
|
||||||
# Firma implicita (daca omiti --company): ROMFAST SRL (114), din config.json de pe moltbot.
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
HOST="moltbot@10.0.20.173"
|
|
||||||
REMOTE_CMD="cd ~/echo-core && .venv/bin/python3 tools/roa2web_client.py"
|
|
||||||
|
|
||||||
for arg in "$@"; do
|
|
||||||
REMOTE_CMD+=" $(printf '%q' "$arg")"
|
|
||||||
done
|
|
||||||
|
|
||||||
exec ssh -o BatchMode=yes -o ConnectTimeout=10 "$HOST" "$REMOTE_CMD"
|
|
||||||
Submodule gomag-vending deleted from 51910148ef
1
roaauto
1
roaauto
Submodule roaauto deleted from d93a7b2903
Submodule space-booking deleted from 953f3121cf
Submodule vending_data_intelligence_report deleted from 3f410c3fb8
Reference in New Issue
Block a user