55 lines
3.3 KiB
Markdown
55 lines
3.3 KiB
Markdown
# MEMORY.md — Memória Curada
|
|
|
|
## 🧠 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
|
|
|
|
## ⚙️ 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)
|
|
|
|
## 🔑 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
|
|
|
|
## 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
|
|
- `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
|