Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
bf3171a
fase-1(loop): nucleo do Loop Engine (report-only, puro, testado)
zodyprado-web Sep 7, 2026
94cb14f
fase-1(buzz): ponte tipada Buzz (outbox/inbox idempotente, puro, test…
zodyprado-web Sep 7, 2026
5835ee2
fase-1(persistencia+flags): migracao 175 (loop/buzz) + flags LOOP_ENG…
zodyprado-web Sep 7, 2026
2913b12
fase-1(repo): Loop e Buzz FUNCIONAIS — repositorios DB (persistencia …
zodyprado-web Sep 7, 2026
8f26366
fase-1(loop): runner + endpoints /api/loop (usavel pelo painel e harn…
zodyprado-web Sep 7, 2026
6eeb688
fase-1(buzz): WebSocketBuzzAdapter real — OmniRoute fala com o buzz-r…
zodyprado-web Sep 7, 2026
7f84ee1
fase-1(buzz): buzzService — integra o Buzz ao OmniRoute (identidade +…
zodyprado-web Sep 7, 2026
f00f242
fase-1(docs): changelog fragment — Loop Engine + Buzz Hub
zodyprado-web Sep 7, 2026
77c0330
feat(panel): cards de Loop Engine e Buzz Hub no painel único
zodyprado-web Sep 7, 2026
d0f5ed4
docs(changelog): registra os cards de Loop/Buzz no painel único
zodyprado-web Sep 7, 2026
1f4349c
fix(loop,buzz,panel): correções da auditoria de 3 agentes (0 CRIT/0 H…
zodyprado-web Sep 7, 2026
8ffc8a6
feat(buzz,loop): tenant_id + wiring produtor/consumidor (fecha M3/ten…
zodyprado-web Sep 7, 2026
3c731ba
audit: open mission 2 (Loop Engine + Buzz Hub on the published base) …
zodyprado-web Sep 12, 2026
74927a4
chore(deps): allowlist @noble/curves and @noble/hashes (Nostr signing…
zodyprado-web Sep 12, 2026
c5b534b
docs: migrations count 171 → 172 after migration 175 (loop engine + b…
zodyprado-web Sep 12, 2026
6986295
fix(dashboard): load the Loop and Buzz pages without synchronous setS…
zodyprado-web Sep 12, 2026
4b70d75
audit: Loop/Buzz review — Auditor A (architecture/engineering) report
zodyprado-web Sep 12, 2026
88fa0ff
audit: Loop/Buzz review — Auditor B (security/DevSecOps) report
zodyprado-web Sep 12, 2026
6b17748
fix(loop-engine): escalate on rejection, measure wall-clock from crea…
zodyprado-web Sep 12, 2026
559ef58
fix(loop): validate the loop API bodies, guard advance with an optimi…
zodyprado-web Sep 12, 2026
55dd4dc
fix(authz,gates): loop/buzz mutations require the admin scope; route-…
zodyprado-web Sep 12, 2026
cfc7028
test(flags): expected catalogue size 54 → 56 (LOOP_ENGINE_ENABLED, BU…
zodyprado-web Sep 12, 2026
b830db7
fix(buzz): encrypt the Nostr identity at rest, validate the relay URL…
zodyprado-web Sep 12, 2026
be4d039
fix(buzz): retry failed outbox entries with backoff and wire the inbo…
zodyprado-web Sep 12, 2026
1d77db1
docs: document BUZZ_RELAY_URL (opt-in, TLS off loopback, private host…
zodyprado-web Sep 12, 2026
0f18708
fix(buzz): give permanently failed outbox entries their own dead status
zodyprado-web Sep 12, 2026
9ef4585
feat(dashboard): translate the Loop and Buzz pages, confirm destructi…
zodyprado-web Sep 12, 2026
8076c05
docs(api): document the six Loop Engine and Buzz Hub endpoints in the…
zodyprado-web Sep 12, 2026
df638fa
docs(env): document the LOOP_ENGINE_ENABLED and BUZZ_HUB_ENABLED flag…
zodyprado-web Sep 12, 2026
1fd1e8f
fix(ci): stop the catalog yield probe racing the 8s build bound, drop…
zodyprado-web Sep 12, 2026
2d3161c
docs(catalog): point the yield-probe reference at the test's new seri…
zodyprado-web Sep 12, 2026
bf0539d
docs(audit): checkpoint the PR #8 CI fixes and the pre-existing cold-…
zodyprado-web Sep 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -1499,6 +1499,19 @@ CURSOR_USER_AGENT="Cursor/3.4"
# FIRECRAWL_BASE_URL=https://api.firecrawl.dev
# FIRECRAWL_TIMEOUT_MS=30000 # Per-request timeout (default: 30000 = 30s)

# Loop Engine and Buzz Hub feature flags (DB override > env > default false). Both ship OFF:
# with the flag off the /api/loop routes answer 404 and nothing connects to a relay.
# LOOP_ENGINE_ENABLED=false
# BUZZ_HUB_ENABLED=false
# ── Buzz Hub (optional Nostr relay bridge, behind the BUZZ_HUB_ENABLED flag) ──
# WebSocket URL of the buzz-relay. Default: EMPTY = bridge disabled until configured
# (the former ws://localhost:3000 default collided with OmniRoute's own port).
# Enforced rules: wss:// is mandatory beyond loopback (ws:// only for localhost /
# 127.0.0.1 / ::1); private/LAN hosts and cloud-metadata endpoints are always
# rejected; no userinfo, query string or fragment. The dashboard override (Buzz Hub
# card) takes precedence; an invalid value is ignored and the bridge stays disabled.
# BUZZ_RELAY_URL=wss://relay.example.com

# ── Claude TLS transport (Chromium-fingerprinted client) ──
# Used by: open-sse/services/claudeTlsClient.ts — native wreq-js request timeout
# plus the absolute JS hard-deadline grace when the native request is wedged.
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ Repository map and Reference Documentation sections below.
| Translators | `open-sse/translator/` | Format conversion (OpenAI↔Claude↔Gemini) |
| Transformer | `open-sse/transformer/` | Responses API ↔ Chat Completions |
| Services | `open-sse/services/` | Combo routing, rate limits, caching, etc |
| Database | `src/lib/db/` | SQLite domain modules (171 migrations) |
| Database | `src/lib/db/` | SQLite domain modules (173 migrations) |
| Domain/Policy | `src/domain/` | Policy engine, cost rules, fallback logic |
| MCP Server | `open-sse/mcp-server/` | 110 tools (45 canonical + memory/skill/GitHub/pool/gamification/plugin/Notion/Obsidian/local-corpus/RTK modules), 3 transports (stdio / SSE / Streamable HTTP), 33 scopes |
| A2A Server | `src/lib/a2a/` | JSON-RPC 2.0 agent protocol |
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1262,7 +1262,7 @@ Métricas canônicas em 2026-08-24: **1.029 vídeos únicos** · **11.132.922 vi
<tr><td nowrap><b>Runtime</b></td><td>Node.js 22.x / 24.x LTS — <code>&gt;=22.22.2 &lt;23 || &gt;=24.0.0 &lt;27</code></td></tr>
<tr><td nowrap><b>Language</b></td><td>TypeScript 6.0 — <b>100% TypeScript</b> across <code>src/</code> and <code>open-sse/</code> (zero <code>any</code> in core since v2.0)</td></tr>
<tr><td nowrap><b>Framework</b></td><td>Next.js 16 + React 19 + Tailwind CSS 4</td></tr>
<tr><td nowrap><b>Database</b></td><td>better-sqlite3 (SQLite, WAL journaling) + LowDB (JSON legacy) — 122 domain modules, 171 migrations</td></tr>
<tr><td nowrap><b>Database</b></td><td>better-sqlite3 (SQLite, WAL journaling) + LowDB (JSON legacy) — 122 domain modules, 173 migrations</td></tr>
<tr><td nowrap><b>Memory</b></td><td>SQLite FTS5 full-text + int8-quantized vector embeddings, typed decay</td></tr>
<tr><td nowrap><b>Schemas</b></td><td>Zod 4 — MCP tool I/O validation + API contracts</td></tr>
<tr><td nowrap><b>Protocols</b></td><td>MCP (stdio / HTTP / SSE) + A2A v0.3 (JSON-RPC 2.0 + SSE)</td></tr>
Expand Down
16 changes: 16 additions & 0 deletions audit/AUTONOMOUS_MISSION_STATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,22 @@
- **último_progresso_real:** 2026-09-12 — `docker-publish.yml` passou a publicar no GHCR sem credenciais do Docker Hub (PR #6); run 34682777453 verde; `docker manifest inspect ghcr.io/lmprado-dz23/omniroute:next` responde sem login
- **toolchain:** node v24.16.0 · npm 11.13.0 · `node_modules` **real** (`npm ci` — junction removida em 2026-09-11 porque Turbopack e o standalone a recusavam); worktree baseline `../OmniRoute-v3851-baseline` (HEAD inicial, ainda com junction) só para classificar falhas

## Missão 2 — Loop Engine + Buzz Hub sobre a base publicada (iniciada 2026-09-12)

- **autorização do operador:** "PODE FAZER" (2026-09-12) — integrar Loop e Buzz da branch `fase-1-loop-buzz` sobre `release/v3.8.51`; mesmas regras da missão 1 (push + PR + imagem GHCR ao final; nada de npm/Docker Hub/Release/deploy; testes nunca enfraquecidos).
- **branch:** `feat/loop-buzz-on-v3851` a partir de `a94c72bbe` (release/v3.8.51 após PR #7).
- **estado:** RETESTING (CI) — transplante seletivo concluído: 12 commits (`ae4755525…f42d0083b`: núcleo do Loop, ponte Buzz, migração 175 + flags LOOP_ENGINE/BUZZ_HUB, repositórios, `/api/loop`, adaptador WebSocket/Nostr, buzzService, painel, correções da auditoria anterior, tenant_id) aplicados por `cherry-pick -x` **sem conflito**. Deixados de fora, por decisão de escopo: vendor chatgpt-web v4.0.7 (R3), correções de CI já cobertas ou irrelevantes, "superpowers" da Fase 2 (PII BR, MCP review gate, Browser Guard/AG-UI, OTel) e o endpoint `/api/loop/[id]/stream` (depende do módulo AG-UI da Fase 2), docs SUPERPOWERS, fixes de OAuth (avaliar separadamente).
- **dependências novas:** `@noble/curves@2.4.0`, `@noble/hashes@2.4.0` (assinatura Nostr) — lock consistente (`npm install` não alterou o lock); allowlist de `check:deps` a verificar.
- **verificado até aqui:** 7 suítes próprias (`tests/unit/{loop,buzz}-*.test.ts`) → 36/36.
- **auditorias:** Auditor A (arquitetura, veredito COM RESSALVAS) e Auditor B (segurança ofensiva, veredito REPROVADO) concluídos sem verem as conclusões um do outro; relatórios em `audit/LOOP_BUZZ_REVIEW.md` §1 e §2. Todos os achados corrigidos na causa raiz, um problema por commit, RED-first.
- **PR #8** (`feat/loop-buzz-on-v3851` → `release/v3.8.51`): https://github.com/LMPrado-DZ23/OmniRoute/pull/8
- **CI (run 34690758019, HEAD `df638fa39`):** 12 checks verdes, 2 vermelhos, ambos corrigidos na causa raiz em `1fd1e8fa4` + `2d3161c38`:
1. **Unit Tests fast-path (1/4)** — `9147-catalog-eventloop-yield` devolveu HTTP 500 onde exige 200. Não era o builder quebrando: o teste semeia um catálogo propositalmente gigante (60 conexões / 720 modelos) e o build levou 8349 ms no runner, cruzando o teto de 8 s da espera coalescida de `catalogCache.ts`. A espera rejeita com `catalog_build_timeout`, um cache frio não tem corpo "last-good" para servir, e o endpoint responde 500 sanitizado **sem logar** — por isso o log do shard não trazia erro nenhum. Correção: o teste passa a fixar `CATALOG_BUILD_TIMEOUT_MS` no próprio processo (o teto e o fallback last-good continuam cobertos por `12627-catalog-inflight-timeout`, que o fixa em 40 ms) e mudou para `tests/unit/serial/` (`--test-concurrency=1`, convenção #6803), porque a métrica é quanto o builder prende o event loop e três processos irmãos no mesmo runner faziam a folga medida deixar de ser do builder. O limite de 800 ms **não** foi afrouxado; medido após a mudança: 425–433 ms.
2. **Fast Quality Gates (dead-code)** — o barrel `open-sse/buzz-bridge/index.ts` reexportava 7 símbolos que ninguém importa por ele (limites de forma de evento, as duas interfaces de evento Nostr, a união de resultado da URL de relay). Todo consumidor real os importa do módulo que os define. Removidos do barrel; os módulos continuam exportando. `tsc -p open-sse` → 0; knip → 0 mortos na pasta; 153/153 testes buzz+loop verdes.
- **achado pré-existente registrado (fora do escopo desta PR):** com um catálogo muito grande e cache frio, o **primeiro** chamador de `/v1/models` recebe 500 depois de 8 s, enquanto os seguintes recebem o corpo last-good. É comportamento deliberado de #12627 (o teto protege clientes com timeout curto — o Claude Code aceita 3 s) e é idêntico na base; alterá-lo aqui seria mexer em subsistema não relacionado. Registrado para decisão do operador, não corrigido nesta branch.
- **próxima ação:** CI verde no PR #8 → merge em `release/v3.8.51` → conferir `docker-publish.yml` republicando `ghcr.io/lmprado-dz23/omniroute:next` com Loop/Buzz → registrar evidência (URL do PR, run id, digest) em `audit/RELEASE_READINESS.md`.
- **retomada:** `git log --oneline origin/release/v3.8.51..HEAD` na branch; relatórios dos auditores em `audit/LOOP_BUZZ_REVIEW.md` (a criar na consolidação).

## Autorizações (desta missão)

- PODE: auditar; branch de correção; modificar código/testes/docs/migrations/workflows/scripts; instalar deps do lockfile; lint/typecheck/testes/build/pack local; commits locais pequenos; subagentes.
Expand Down
Loading
Loading