أعلن Gitea Runner عن إطلاق الإصدار 2.0.0، الذي يجلب تحسينات هامة تشمل دعمًا لملخصات المهام ومعالجة محسنة بشكل كبير لعمليات الإلغاء، مستفيدًا من قدرات Gitea 1.27. يتضمن التحديث الآن احترامًا لحقول سير العمل المتعلقة بمهل المهام وتحمل الأخطاء التي كانت تُتجاهل سابقًا. كما يفرض هذا الإصدار تغييرًا جوهريًا يتطلب من المستخدمين توفير بيانات اعتماد سحب Docker صريحة، ليحل محل استخدام أسرار DOCKER_USERNAME و DOCKER_PASSWORD السابقة.

#Gitea #GiteaRunner #Docker

#OSGeo #Gitea service is now upgraded to 1.26.4.

Join the OSGeo System Administration Committee (SAC) now to defend the foundation's body !

https://wiki.osgeo.org/wiki/SAC

#OSGeo_SAC

SAC - OSGeo

Warum wird eigentlich (gefühlt) mehr #Forgejo als #Gitea empfohlen? #selfhosted

How We Built an AI Usage Report for Our OpenCode Platform

We built a custom HTML report generator that extracts AI usage statistics from OpenCode (sessions, tokens, costs, MCP tool calls) and delivers it daily via email. The data comes from two sources — a REST API for session-level metrics and direct SQLite access for MCP tool call telemetry.

The Challenge

We run OpenCode as our primary AI agent platform in our infrastructure. It handles dozens of AI sessions daily — from infrastructure management to code reviews, DNS changes, and security patching. But we had no visibility into:

  • How many AI sessions run per day?
  • Which models are used (DeepSeek v4 Flash vs Pro)?
  • How many tokens are consumed?
  • What does it cost?
  • Which subagents are most active?
  • Which MCP tools are used most?

The data was there — stored in OpenCode’s SQLite database — but there was no built-in dashboard or report.

Two Data Sources

1. The REST API (Session-level data)

OpenCode runs an HTTP API on port 3099. With proper authentication and the X-Requested-With: XMLHttpRequest header, it returns session data in JSON:

import urllib.request, base64, json url = "http://opencode-server.example.com:3099/api/session?limit=500" auth = base64.b64encode(f"{username}:{password}".encode()).decode() req = urllib.request.Request(url, headers={ "X-Requested-With": "XMLHttpRequest", "Authorization": f"Basic {auth}", }) with urllib.request.urlopen(req) as resp: sessions = json.loads(resp.read())["data"]

Each session object contains:

FieldDescriptionidUnique session IDtitleSession title (the user’s prompt)agentSubagent used (build, project-manager, vault-manager, etc.)modelModel object with id, providerID, variantcostTotal cost in USDtokens.inputInput tokens consumedtokens.outputOutput tokens generatedtokens.reasoningReasoning tokenstokens.cache.readCache readstokens.cache.writeCache writestime.createdSession creation timestamp (ms)

What you get: Daily session counts, token usage per model, cost tracking, agent activity breakdown, most expensive sessions.

Authentication: HTTP Basic Auth with credentials from the OPENCODE_SERVER_USERNAME and OPENCODE_SERVER_PASSWORD environment variables set in the Docker Compose configuration.

2. SQLite Database (MCP tool call telemetry)

The REST API is great for session metrics, but it doesn’t expose the individual MCP tool calls. For that, you need direct access to the SQLite database at /home/opencode/data/share/opencode.db.

The part table stores every tool call made during AI sessions:

SELECT json_extract(p.data, '$.tool') as tool_name, COUNT(*) as call_count FROM part p JOIN session s ON p.session_id = s.id WHERE json_extract(p.data, '$.type') = 'tool' AND s.time_created >= ? AND s.time_created < ? GROUP BY tool_name ORDER BY call_count DESC;

This reveals which MCP servers are used most. In our case: bash (6,472 calls), read (826), taiga_getUserStory (609), task (348), and 185 other tools.

The Report Generator

We built a Python script (generate_opencode_report.py) with dual-mode support:

  • --api mode: Uses the REST API (no SSH needed, runs anywhere)
  • Default mode: Reads SQLite directly (run on the OpenCode server, includes MCP data)

The script produces a self-contained HTML file with:

# API mode (remote, no SSH): python3 generate_opencode_report.py --api \ --api-url http://opencode-server.example.com:3099 \ --api-username "$USERNAME" --api-password "$PASSWORD" # SQLite mode (direct on server, includes MCP data): python3 generate_opencode_report.py \ --db /home/opencode/data/share/opencode.db

Report Sections

Executive Summary — Four key metrics at a glance: total AI sessions, total tokens consumed (input + output), total estimated cost, and total MCP tool calls.

Daily Breakdown — A day-by-day table showing sessions, tokens (split by input/output/reasoning), and cost, with visual progress bars.

Session & Token Rate — Tokens-per-session and cost-per-session trends, helping identify efficiency patterns.

Model Distribution — Which models are being used (DeepSeek v4 Flash vs Pro), with session counts, token volumes, and costs.

Agent/Subagent Activity — Each subagent’s usage broken down: project-manager, system-manager, vault-manager, build, devops-manager, monitor, web-search, and more.

Most Expensive Sessions — Top 20 sessions by cost, useful for cost optimization.

Most Token-Heavy Sessions — Top 20 sessions by total token count, useful for understanding peak usage patterns.

Recent Sessions — Last 50 sessions with full details.

MCP Tool Usage — A grid of all 189 tools used, sorted by call count, with visual bars. Top tools include bash, read, taiga_getUserStory, task, glob, grep, webfetch, edit, write, todowrite.

Automated Delivery

The report is delivered via a CI/CD pipeline (e.g., Gitea Actions, GitHub Actions, or similar) on a daily schedule (06:00 UTC / 08:00 Central European time):

on: schedule: - cron: '0 6 * * *' workflow_dispatch: inputs: month: description: 'Report month (YYYY-MM)' email_to: description: 'Email recipient'

The workflow:

  • Fetches the SSH key from a password vault (e.g., Bitwarden/Vaultwarden CLI)
  • SSHes into the OpenCode server
  • Runs the report generator in SQLite mode (full MCP data)
  • Downloads the generated HTML report
  • Emails it as an attachment via SMTP
  • Uploads it as a workflow artifact (retention depends on configuration)
  • # The vault credential pattern (adapt to your setup) VAULT_CREDENTIALS='{"api_key_id":"...","api_key_secret":"...","master_password":"..."}' export BW_CLIENTID API_KEY_ID npx @bitwarden/cli login --apikey npx @bitwarden/cli get item "<vault-item-uuid>" --session $SESSION

    Key Takeaways

  • OpenCode has two data layers: a REST API for session-level metrics and a SQLite database for detailed telemetry (MCP calls, parts).
  • The REST API is great for remote monitoring — just HTTP Basic Auth and the right header (X-Requested-With: XMLHttpRequest).
  • MCP tool telemetry requires direct database access — there’s no API endpoint for the part table yet.
  • The same CI/CD pattern (vault → SSH → script execution → email) works for multiple report types — you can use it for both performance monitoring and AI usage analytics.
  • Cost visibility is critical — identifying that DeepSeek v4 Pro accounts for 87% of costs while only handling 38% of sessions was an actionable insight.
  • #ai #devops #gitea #monitoring #opencode #reporting

    Hogyan építettünk egy AI használati reportot OpenCode platformunkhoz

    Építettünk egy egyedi HTML reportot generáló scriptet, amely összegyűjti az AI használati statisztikákat az OpenCode-ból (munkamenetek, tokenek, költségek, MCP eszközhívások), és naponta e-mailben kézbesíti. Az adatok két forrásból származnak — egy REST API-ból a munkamenet-szintű mérőszámokhoz és közvetlen SQLite hozzáférésből az MCP eszközhívás telemetriához.

    Az igények

    OpenCode servert használunk elsődleges AI agentként. Naponta több tucat AI munkamenetet kezel — az infrastruktúra menedzsmenttől kezdve a kódreview-kon át a DNS-változtatásokig és biztonsági javításokig. De nem volt rálátásunk a következőkre:

    • Hány AI munkamenet fut naponta?
    • Mely modellek használatosak (DeepSeek v4 Flash vs Pro)?
    • Hány token fogy?
    • Mennyibe kerül?
    • Mely alügynökök a legaktívabbak?
    • Mely MCP eszközöket használják a legtöbbet?

    Az adatok ott voltak — az OpenCode SQLite adatbázisában tárolva — de nem volt beépített dashboard vagy jelentés.

    Két Adatforrás

    1. A REST API (Munkamenet-szintű adatok)

    Az OpenCode egy HTTP API-t futtat a 3099-es porton. Megfelelő hitelesítéssel és a X-Requested-With: XMLHttpRequest fejléccel JSON formátumban adja vissza a munkamenet adatokat:

    import urllib.request, base64, json url = "http://opencode-server.example.com:3099/api/session?limit=500" auth = base64.b64encode(f"{username}:{password}".encode()).decode() req = urllib.request.Request(url, headers={ "X-Requested-With": "XMLHttpRequest", "Authorization": f"Basic {auth}", }) with urllib.request.urlopen(req) as resp: sessions = json.loads(resp.read())["data"]

    Minden munkamenet objektum a következőket tartalmazza:

    MezőLeírásidEgyedi munkamenet azonosítótitleMunkamenet címe (a felhasználó promptja)agentHasznált alügynök (build, project-manager, vault-manager, stb.)modelModell objektum id, providerID, variant mezőkkelcostTeljes költség USD-bentokens.inputBeviteli tokenek fogyasztásatokens.outputGenerált kimeneti tokenektokens.reasoningGondolkodási tokenektokens.cache.readGyorsítótár olvasásoktokens.cache.writeGyorsítótár írásoktime.createdMunkamenet létrehozási időbélyeg (ms)

    Amit kapsz: Napi munkamenet számok, tokenhasználat modellenként, költségkövetés, ügynökaktivitás bontás, legdrágább munkamenetek.

    Hitelesítés: HTTP Basic Auth a Docker Compose konfigurációban beállított OPENCODE_SERVER_USERNAME és OPENCODE_SERVER_PASSWORD környezeti változók hitelesítő adataival.

    2. SQLite Adatbázis (MCP eszközhívás telemetria)

    A REST API kiváló a munkamenet mérőszámokhoz, de nem fedi fel az egyes MCP eszközhívásokat. Ehhez közvetlen hozzáférésre van szükség az SQLite adatbázishoz a /home/opencode/data/share/opencode.db elérési úton.

    A part tábla tárolja az AI munkamenetek során végrehajtott összes eszközhívást:

    SELECT json_extract(p.data, '$.tool') as tool_name, COUNT(*) as call_count FROM part p JOIN session s ON p.session_id = s.id WHERE json_extract(p.data, '$.type') = 'tool' AND s.time_created >= ? AND s.time_created < ? GROUP BY tool_name ORDER BY call_count DESC;

    Ez felfedi, hogy mely MCP szervereket használják a legtöbbet. A mi esetünkben: bash (6,472 hívás), read (826), taiga_getUserStory (609), task (348), és 185 egyéb eszköz.

    A Jelentésgenerátor

    Létrehoztunk egy Python szkriptet (generate_opencode_report.py) két módú támogatással:

    • --api mód: A REST API-t használja (nincs szükség SSH-ra, bárhol fut)
    • Alapértelmezett mód: SQLite közvetlen olvasása (az OpenCode szerveren futtatva, MCP adatokat is tartalmaz)

    A szkript egy önálló HTML fájlt hoz létre a következőkkel:

    # API mód (távoli, nincs SSH): python3 generate_opencode_report.py --api \ --api-url http://opencode-server.example.com:3099 \ --api-username "$USERNAME" --api-password "$PASSWORD" # SQLite mód (közvetlen a szerveren, MCP adatokat is tartalmaz): python3 generate_opencode_report.py \ --db /home/opencode/data/share/opencode.db

    Jelentés Szekciók

    Vezetői Összefoglaló — Négy kategória egy táblázatban összefoglalva: összes AI munkamenet, összes felhasznált token (bevitel + kimenet), összes becsült költség, és összes MCP eszközhívás.

    Napi Bontás — Napi táblázat a munkamenetekről, tokenekről (bevitel/kimenet/gondolkodás szerint bontva), és költségről, vizuális folyamatjelző sávokkal.

    Munkamenet & Token Arány — Token-per-munkamenet és költség-per-munkamenet trendek, segítve a hatékonysági minták azonosítását.

    Modell Eloszlás — Mely modellek használatosak (DeepSeek v4 Flash vs Pro), munkamenet számokkal, token mennyiségekkel és költségekkel.

    Ügynök/Alügynök Tevékenység — Az egyes alügynökök használatának bontása: project-manager, system-manager, vault-manager, build, devops-manager, monitor, web-search, és továbbiak.

    Legdrágább Munkamenetek — Top 20 munkamenet költség szerint, hasznos a költségoptimalizáláshoz.

    Legtöbb Token-t Használó Munkamenetek — Top 20 munkamenet teljes token szám szerint, hasznos a csúcshasználati minták megértéséhez.

    Legutóbbi Munkamenetek — Utolsó 50 munkamenet teljes részletekkel.

    MCP Eszközhasználat — Az összes 189 használt eszköz rácsa, hívási szám szerint rendezve, vizuális sávokkal. Legnépszerűbb eszközök: bash, read, taiga_getUserStory, task, glob, grep, webfetch, edit, write, todowrite.

    Automatizált Kézbesítés

    A jelentés egy CI/CD pipeline-m keresztül kerül kézbesítésre (pl. Gitea Actions, GitHub Actions, vagy hasonló) napi ütemezés szerint (06:00 UTC / 08:00 közép-európai idő):

    on: schedule: - cron: '0 6 * * *' workflow_dispatch: inputs: month: description: 'Jelentés hónapja (YYYY-MM)' email_to: description: 'E-mail címzett'

    A munkafolyamat:

  • Lekéri az SSH kulcsot egy jelszókezelőből (pl. Bitwarden/Vaultwarden CLI)
  • SSH-zik az OpenCode szerverre
  • Futtatja a scriptet SQLite módban (teljes MCP adat)
  • Letölti a generált HTML reportot
  • E-mailben elküldi csatolmányként SMTP-n keresztül
  • Feltölti repostory részeként (a megőrzés a konfigurációtól függ)
  • # A jelszókezelő hitelesítési minta (igazítsd a saját beállításodhoz) VAULT_CREDENTIALS='{"api_key_id":"...","api_key_secret":"...","master_password":"..."}' export BW_CLIENTID API_KEY_ID npx @bitwarden/cli login --apikey npx @bitwarden/cli get item "<vault-item-uuid>" --session $SESSION

    Főbb Tanulságok

  • Az OpenCode-nak két adatrétege van: egy REST API a munkamenet-szintű mérőszámokhoz és egy SQLite adatbázis a részletes telemetriához (MCP hívások, részek).
  • A REST API kiváló távoli monitorozáshoz — csak HTTP Basic Auth és a megfelelő fejléc (X-Requested-With: XMLHttpRequest).
  • MCP eszköz telemetria közvetlen adatbázis hozzáférést igényel — még nincs API végpont a part táblához.
  • Ugyanaz a CI/CD minta (jelszókezelő → SSH → szkript futtatás → e-mail) több jelentéstípushoz is működik — használható teljesítmény monitorozáshoz és AI használati elemzéshez is.
  • A költségek láthatósága kritikus — annak felismerése, hogy a DeepSeek v4 Pro a költségek 87%-át teszi ki, miközben csak a munkamenetek 38%-át kezeli, egy hasznosítható felismerés volt.
  • #ai #devops #gitea #monitoring #opencode #reporting
    Version 1.26.4 of the #OSGeo #Gitea service is up in staging, please report any issue (join the SAC chat channel to know more).
    CVE-2026-58053 (CRITICAL, CVSS 9.9) in Gitea act_runner: Improper privilege management lets workflow users escape Docker containers to host as root. Restrict workflow rights & watch for patches. https://radar.offseq.com/threat/cve-2026-58053-improper-privilege-management-in-gi-9dae0ab1a83a7575 #OffSeq #CVE202658053 #Gitea #containers #security

    GitNex 14.0.0 is out now.

    - Bookmarks (app-only feature)
    - Exclusive labels support
    - Forgejo actions (CI)
    - Context-aware sharing
    - Improvements to markdown rendering
    - many more..

    https://codeberg.org/gitnex/GitNex/releases

    #gitnex #git #android #app #foss #opensource #codeberg #gitea #forgejo

    GitNex

    Android client for Forgejo(https://codeberg.org), Gitea(https://gitea.com) [OR your custom hosted server]

    Codeberg.org
    Looking for a practical alternative to large commercial developer platforms? @makkes examines the lightweight, self-hosted Git platform @forgejo that offers a familiar workflow without requiring a large operational footprint.
    https://www.admin-it.io/your-code-your-server-self-hosted-collaboration-with-forgejo/?utm_source=mam
    #SelfHosting #Forgejo #Git #infrastructure #Gitea #repository #Golang

    🚨 Three Gitea/Gogs vulnerabilities just dropped — and one is a CVSS 9.8 authentication bypass.

    If you self-host Gitea or Gogs, this is not a “patch later” situation:

    ⚠️ CVE-2026-20896 — Gitea Docker auth bypass
    Anyone can impersonate any user with one HTTP header: `X-WEBAUTH-USER: admin`

    ⚠️ CVE-2026-52807 — Stored DOM XSS
    A malicious milestone name can survive escaping and execute through Semantic UI.

    ⚠️ CVE-2026-22874 — Webhook SSRF
    Gitea webhooks can become a path to AWS IMDS, cloud credentials, S3, Secrets Manager, ECR, and full cloud privilege abuse.

    Self-hosted Git platforms hold source code, CI/CD secrets, deploy keys, webhooks, tokens, and internal infrastructure access.

    Your code. Your secrets. Their access.

    Upgrade now:
    Gitea 1.26.3+
    Gogs 0.14.3+

    Full technical breakdown 👇
    https://thecybersecguru.com/news/cve-2026-20896-gitea-authentication-bypass-dom-xss-ssrf/

    #Gitea #Gogs #CyberSecurity #InfoSec #AppSec #DevSecOps #CVE #SSRF #XSS #Docker #CloudSecurity #AWS #IAM #AuthenticationBypass #Vulnerability #SelfHosted #Security