sync: sistema de memoria Gitea — 4 repos criados + docs completos + skill gitea-api
This commit is contained in:
@@ -1,77 +1,54 @@
|
||||
# MEMORY.md — Memória Curada
|
||||
|
||||
_Menos de 3.500 chars._
|
||||
## 🧠 Agente OpenClaw — 2026-05-19 / 2026-05-20
|
||||
- Workspace: Debian 12 container, `/root/.openclaw/workspace/`
|
||||
- Projeto ativo: `@pulse-libs/core` (lib universal atomizada) — **136/136 testes ✅**
|
||||
- Stack: React/Vue, TS strict, Vitest, Pino/Zod, tsup v8, Docker multi-stage
|
||||
- Clawhub path: `/var/lib/openclaw/tools/node/npm/bin/clawhub` (não no PATH global)
|
||||
- Sem systemd no container — usar `ps`/`df` diretamente
|
||||
|
||||
## 🧠 Agente OpenClaw — Instalação 2026-05-19 / Evolução 2026-05-20
|
||||
- Skills ativas: TS, E2E, Docker, SQL, security, browser, vision, nova-self-improver
|
||||
- Ambiente: container Debian 12, diretório `/root/.openclaw/workspace/`
|
||||
- Workshop: @pulse-libs/core (biblioteca universal atomizada)
|
||||
- Stack: React/Vue, TS strict, Vitest, Pino/Zod, Docker multi-stage
|
||||
- Auto-melhoria: sistema ativo via nova-self-improver v1.0.0
|
||||
## ⚙️ Infra & Saúde
|
||||
- Disco: 73% / 87G — limite alerta 80%
|
||||
- systemctl não disponível (container sem systemd)
|
||||
- gh/obs CLIs: não instalados (bloqueadas por disco)
|
||||
|
||||
## ⚙️ Infra
|
||||
- `systemd` ausente no container ─ usar `ps`/`df` em vez de `systemctl`
|
||||
- Clawhub CLI: `/var/lib/openclaw/tools/node/npm/bin/clawhub` (não no PATH global)
|
||||
- Disco: 74% / 87G usado ─ alerta se passar de 80% (estava 100% na 1ª sessão, melhorou)
|
||||
- gh CLI / obs CLI: **não instalados** (bloqueado por disco)
|
||||
## 🔑 Lições High-Signal
|
||||
- `flat(Infinity)` em arrays de classes quebra tsup DTS — usar `flat(2)`
|
||||
- `process.env` direto quebra SSR — guardar com `typeof window !== 'undefined'`
|
||||
- Backticks aninhadas em TS templates quebram compilação — usar `.replace()` por fora
|
||||
- Zod: usar `.transform(v => v.replace(...))` em vez de `.replace()` direto
|
||||
- `vi.useFakeTimers()` não usar globalmente — quebra useEffect de outros hooks
|
||||
- `fireEvent.change` no jsdom precisa writable `value` via `Object.defineProperty`
|
||||
- `getByRole('textbox')` não funciona no jsdom puro — usar `container.querySelector`
|
||||
- `navigator.clipboard` mock deve ser `vi.fn()` direto (não `Object.defineProperty`)
|
||||
- `useClipboard` com `delay=0` reseta `copied=false` antes do expect — usar delay >= 5000 em testes
|
||||
- Pattern **vitest.pure-dom-matchers**: sem `@testing-library/jest-dom`, usar `.classList.contains()` e `.getAttribute()` nativos
|
||||
|
||||
## 📦 Skills Instaladas
|
||||
Agrupadas por função:
|
||||
- **Frontend**: agent-browser, openclaw-agent-browser, typescript, vision (imagemagick)
|
||||
- **Tests**: e2e-testing-patterns, multi-search-engine-2-0-1
|
||||
- **Backend**: sql-toolkit, redis-labs-integration
|
||||
- **DevOps/Infra**: xcloud-docker-deploy, security-audit, openclaw-config, openclaw-power-ops
|
||||
- **Docs/Diagrams**: file, file-summary, d2-diagram-creator
|
||||
- **Qualidade code**: uncle-bob, nephew self-improvement labs
|
||||
|
||||
## 📝 Diretrizes Auto-Melhoria
|
||||
- Erro → ERRORS.md imediatamente
|
||||
- Pattern 3x no PATTERN_COUNTER → promover para AGENTS.md
|
||||
- A cada 10 sessões: comprimir USER.md
|
||||
|
||||
## 🔑 Lições Aprendidas (High-Signal)
|
||||
- `flat(Infinity)` em arrays de classes quebra tsup DTS ─ usar `flat(2)` no máximo
|
||||
- `process.env` no código quebra SSR ─ guardar com `typeof window !== 'undefined'`
|
||||
- Backticks aninhados em TS templates: quebram compilação ─ usar `fn().replace()` por fora
|
||||
- Zod schema: use `.transform(v => v.replace(...))` em vez de `.replace()` direto
|
||||
- **Vitest jsdom global `vi.useFakeTimers()` quebra `setTimeout/clearInterval` dentro dos `useEffect` dos próprios hooks** ─ usar `act() + waitFor()` ao invés; fakeTimers só em testes isolados com `beforeEach`/`afterEach` locais
|
||||
- **useClipboard com `delay=0` → `setTimeout(fn, 0)` dispara no próximo microtick e reseta `copied=false` antes do `expect`** ─ usar `delay >= 5000` em testes
|
||||
- **`navigator.clipboard` mock deve ser um `vi.fn()` direto (não `Object.defineProperty` na raiz)** — assim `mockResolvedValue`/`mockRejectedValue` funcionam em cada teste
|
||||
|
||||
## 📁 Biblioteca libs/ (workspace)
|
||||
10 módulos de padrões: TS, React, Vue, Linux, DB, Browser, SAST, CleanCode, Deploy, Docs
|
||||
`libs/INDEX.md` como índice central
|
||||
|
||||
## 🐳 Docker Containers — Snapshot 00:57 GMT-3
|
||||
Stack rodando na máquina host (gestionado via Portainer + Caddy reverse proxy):
|
||||
|
||||
### ✅ Up (healthy)
|
||||
| Projeto | Serviço | Imagem | Portas |
|
||||
|---------|---------|--------|--------|
|
||||
| **proxy** | caddy | lucaslorentz/caddy-docker-proxy | 80, 443 |
|
||||
| **dock** | portainer + agent | portainer-ce:2.19.4 | 8000, 9000, 9443 |
|
||||
| **design** | penpot (full stack) | penpotapp/* | 8080, 1025, 1080, 6379, 5432 |
|
||||
| **code** | file (8dcode) | 8dcode:latest | — |
|
||||
| **database** | mongos (mongo:8.0) | mongo:8.0 | 27017 |
|
||||
| **database** | dbadmin (mongo-express) | mongo-express:latest | 8081 |
|
||||
| **bot** | beebot, office, redis | node:24 / redis:7-alpine | 6379 |
|
||||
| **pro** | leantime + mariadb | leantime/mariadb:10.6 | 8080, 9000, 3306 |
|
||||
|
||||
### 💀 Dead (não reiniciam automaticamente)
|
||||
- `design_penpot-backend.*` — 3 instâncias Exited(255)
|
||||
- `bot_office.*` — 4 instâncias Exited(1)
|
||||
- `database_mongos-master.*` — 7 instâncias Dead
|
||||
- `pro_leantime.*` — 6 instâncias Dead
|
||||
- `bot_beebot.*`, `bot_redis.*`, `code_file.*`, `git_gitea`, `dock_portainer.*` — Dead
|
||||
|
||||
> **Observação**: comando padrão para inspecionar: `docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"`
|
||||
> Logs: `docker logs <container_name>` | Remover mortos: `docker rm <container_id>`
|
||||
|
||||
## 📅 Decisões Relevantes
|
||||
- 2026-05-19: WürthFlow.md criado ─ arquitetura viva do workspace
|
||||
- 2026-05-19: tsup v8 ESM+CJS+DTS OK ─ 57 testes 100% pass
|
||||
- 2026-05-19: `react.testing-library` e `vitest.jsdom.mocks` chegaram a Count=3 → **promovidos para AGENTS.md**
|
||||
- 2026-05-20 00:18: **80/80 testes @pulse-libs/core** (validators 24 + utils 33 + hooks 23) — suite 100% verde
|
||||
## Decisões Relevantes
|
||||
- WürthFlow.md criado como arquitetura viva do workspace
|
||||
- tsup v8 ESM+CJS+DTS confirmado funcionando
|
||||
- `react.testing-library` e `vitest.jsdom.mocks` chegaram a count=3 → promovidas para AGENTS.md
|
||||
- Clawhub search = múltiplas queries curtas, sempre
|
||||
- Ignorar SUSPICIOUS skills por padrão
|
||||
- Clawhub search = múltiplas queries curtas
|
||||
- `vi.useFakeTimers()` NÃO usar globalmente — quebra useEffect de outros hooks
|
||||
- `agent-browser` CLI não instalado como binário separado — usar `openclaw agent run` ou curl via automation
|
||||
|
||||
## 🔧 DevOps → Gitea (2026-05-20)
|
||||
- Gitea rodando em `git.octal.tec.br` via Docker Swarm (stack `git`)
|
||||
- Caddy proxy: `git.octal.tec.br` → `localhost:3000` (Gitea container)
|
||||
- Usuário criado: **Roberto** (`betotn91@gmail.com`)
|
||||
- Skill `gitea-api` criada em `skills/gitea-api/SKILL.md`
|
||||
- Autenticação API: 5 métodos (Basic, Basic+OTP, Token header, token query, access_token query)
|
||||
- Scopes: `read/write:<permission>` ou `all` — `write` implica `read`
|
||||
- Endpoint token: `POST /api/v1/users/:name/tokens` — **requer Basic Auth + senha**, retorna sha1 apenas uma vez
|
||||
- Endpoint listar tokens: `GET /api/v1/users/:name/tokens` — sha1 sempre vazio na listagem
|
||||
|
||||
## 🧠 Sistema de Memória Gitea — Roberto/pulse-* (2026-05-20)
|
||||
- **4 repositórios criados** em `git.octal.tec.br/Roberto/`:
|
||||
- `pulse-memory` — memórias diárias + learnings + errors + pattern_counter
|
||||
- `pulse-skills` — skills organizadas por domínio (devops/testing/frontend/backend/ai/infra)
|
||||
- `pulse-docs` — guias, runbooks, specs do sistema Pulse
|
||||
- `pulse-projects` — rastreador de projetos (`pulse-libs/`, `infra/`, `past/`)
|
||||
- Token API: `d7378a3d0b7fd38050c4bce6accfd28086b6174c` (pulse-agent-token, scopes=all)
|
||||
- Chave SSH: `ssh-ed25519 AAAAC3...` em `~/.ssh/id_ed25519_gitea`
|
||||
- Commit cadência: sync de memória local → Gitea a cada fim de sessão
|
||||
- Porto Gitea na infra: `localhost:3000` → `git.octal.tec.br` via Caddy
|
||||
|
||||
Reference in New Issue
Block a user