feat(@pulse-libs/core): WürthFlow completo — docs, CI/CD, Docker, arquitetura, WürthFlow
- __docs__/docker/build-guide.md — guia docker multi-stage
- __docs__/docker/architecture.md — fluxograma ASCII + camadas de dependencia
- __docs__/ci/github-actions.md — CI completo com jobs test/build/docker/publish/release
- .github/workflows/ci.yml — workflow GitHub Actions gerado
- README.md reescrito com estrutura real do pacote
- WürthFlow.md — documento vivo da arquitetura do workspace
🤖 Pulse + nova-self-improver
This commit is contained in:
@@ -13,25 +13,28 @@ _Menos de 3.500 chars._
|
||||
- **Busca clawhub**: termos curtos, múltiplas queries
|
||||
- **SUSPICIOUS skills**: ignorar por padrão
|
||||
|
||||
## 📦 Skills Instaladas (16)
|
||||
## 📦 Skills Instaladas (22)
|
||||
| Skill | Versão | Uso |
|
||||
|-------|--------|-----|
|
||||
| agent-browser-clawdbot | 0.1.0 | Browser headless (navegação, login, screenshot, raspagem) |
|
||||
| openclaw-agent-browser | 1.0.0 | CLI Chromium — @refs, interação, state save/load, download |
|
||||
| agent-browser-clawdbot | 0.1.0 | Browser headless |
|
||||
| openclaw-agent-browser | 1.0.0 | CLI Chromium — @refs, state save/load |
|
||||
| multi-search-engine-2-0-1 | 1.0.0 | 17 motores de busca |
|
||||
| redis-labs-integration | 1.0.2 | Redis Labs API |
|
||||
| self-improvement | 1.0.0 | Log de erros e aprendizados |
|
||||
| self-improvement | 1.0.0 | Log básico erros/aprendizados |
|
||||
| nova-self-improver | 1.0.0 | Auto-melhoria completo — 4 camadas de memória |
|
||||
| vision | 3.5.0 | Processamento de imagens |
|
||||
| **typescript** | **1.0.2** | **TS seguro: satisfies, narrowing, generics, utility types** |
|
||||
| **e2e-testing-patterns** | **1.0.0** | **Playwright/Cypress — pirâmide de testes, selectors estáveis** |
|
||||
| **xcloud-docker-deploy** | **1.2.1** | **Deploy multi-stack (PHP/Python/Node/NextJS/Laravel/Go/Rust)** |
|
||||
| **openclaw-config** | **0.1.0** | **Edição segura do openclaw.json com $include modular** |
|
||||
| **openclaw-power-ops** | **1.0.0** | **CLI OpenClaw (channels, agents, security audit, gateway)** |
|
||||
| **skill-security-audit** | **1.0.0** | **Análise de vulnerabilidades (SAST, injection, secrets, prompt injection)** |
|
||||
| **typescript** | **1.0.2** | **TS seguro: satisfies, narrowing, generics** |
|
||||
| **e2e-testing-patterns** | **1.0.0** | **Playwright/Cypress — pirâmide de testes** |
|
||||
| **xcloud-docker-deploy** | **1.2.1** | **Deploy multi-stack Docker + GitHub Actions** |
|
||||
| **openclaw-config** | **0.1.0** | **Edição segura openclaw.json com $include modular** |
|
||||
| **openclaw-power-ops** | **1.0.0** | **CLI OpenClaw completo** |
|
||||
| **skill-security-audit** | **1.0.0** | **SAST — OWASP Top 10, injection, secrets, prompt injection** |
|
||||
| **sql-toolkit** | **1.0.0** | **PostgreSQL, MySQL, SQLite — schema, query, otimização** |
|
||||
| **file** | **1.0.0** | **Organização de arquivos por contexto, naming conventions** |
|
||||
| **file-summary** | **1.0.0** | **Resumo/extração de PDFs, Word, Excel, TXT** |
|
||||
| **file** | **1.0.0** | **Organização de arquivos por contexto** |
|
||||
| **file-summary** | **1.0.0** | **Resumo PDF/Word/Excel/TXT** |
|
||||
| **d2-diagram-creator** | **1.0.0** | **Diagramas D2 — flowcharts, arquitetura, ER, sequence** |
|
||||
| **uncle-bob** | **1.0.0** | **Clean Code + SOLID + Clean Architecture** |
|
||||
| **vision** | **3.5.0** | **ImagemMagick — resize, crop, convert, watermark** |
|
||||
|
||||
## 🗺️ Stack do agente (perfil)
|
||||
```
|
||||
@@ -55,6 +58,9 @@ IA → nova-self-improver (auto-melhoria contínua)
|
||||
- 2026-05-19 20:46: 5 novas skills instaladas (browser, security, SQL, files)
|
||||
- 2026-05-19 20:47: Perfil Linux/Analyst definido em AGENTS.md
|
||||
- 2026-05-19: Git root commit 483bcbf
|
||||
- 2026-05-19 21:10: Projeto `@pulse-libs/core` iniciado — biblioteca universal atomizada
|
||||
- 2026-05-19 21:35: tsup v8 build OK (ESM + CJS + DTS + sourcemaps), 57 testes 100% passando
|
||||
- 2026-05-19 21:46: **WürthFlow** criado — arquitetura viva do workspace, fluxo de projetos documentado
|
||||
|
||||
## 🔑 Comandos Linux rápidos (referência)
|
||||
Ver AGENTS.md — seção Linux Analyst para a lista completa.
|
||||
|
||||
+44
-42
@@ -1,51 +1,53 @@
|
||||
# SESSION-STATE.md — Active Working Memory
|
||||
|
||||
_Atualizado em tempo real durante sessões. Short-lived RAM._
|
||||
|
||||
## Current Task
|
||||
Expansão completa do agente: skills, Linux analyst, browser automation, TOOLS/AGENTS/MEMORY expandidos.
|
||||
Projeto `@pulse-libs/core` — biblioteca universal atomizada. Build + testes + Docker + WürthFlow completos.
|
||||
|
||||
## Key Context
|
||||
- **Skills instaladas**: 16 (11 antigas + 5 novas: openclaw-agent-browser, skill-security-audit, sql-toolkit, file, file-summary)
|
||||
- **Workspace**: `/root/.openclaw/workspace/`
|
||||
- **Modo auto-melhoria**: ATIVO — `.learnings/` configurado, loop de reflexão implementado
|
||||
- **Git**: commit raiz feito (483bcbf)
|
||||
- Sessão: 2026-05-19 21:31–22:00 GMT-3
|
||||
- Workspace: `/root/.openclaw/workspace/`
|
||||
- Projeto ativo: `projetos/@pulse-libs/core/` v1.0.0-beta.1
|
||||
- Git tags: `wurthflow-arch-v1`, `wurthflow-initial`
|
||||
- WürthFlow.md: documento vivo de arquitetura do workspace
|
||||
|
||||
## Pending Actions
|
||||
- [x] Instalar 5 novas skills (browser, security, sql, file, file-summary)
|
||||
- [x] Expandir TOOLS.md com todos os conhecimento extraído
|
||||
- [x] Expandir AGENTS.md com Linux analyst + full-stack strategy
|
||||
- [x] Configurar HEARTBEAT.md com tarefas úteis
|
||||
- [ ] Ler skills instaladas gradualmente quando for usá-las
|
||||
## Skills usadas nesta sessão
|
||||
| Skill | Uso |
|
||||
|-------|-----|
|
||||
| nova-self-improver | Log + reflexão pós-tarefa (a fazer) |
|
||||
| typescript | TS strict, generic constraints, type-check |
|
||||
| xcloud-docker-deploy | Docker multi-stage pattern |
|
||||
| clean-code-review | Convenções de código aplicadas |
|
||||
| skill-security-audit | Validação de inputs (Zod sanitizedStr) |
|
||||
|
||||
- [x] Instalar next, vite, uncle-bob, clean-code-review, vue
|
||||
- [x] Criar biblioteca compartilhada em libs/ (10 domínios)
|
||||
- [x] Extrair e promover conhecimento das skills
|
||||
- [ ] Logar LRN-20260519-003 para "biblioteca compartilhada em libs/"
|
||||
- [ ] Log LRN para std de cada domínio (TS, React, Linux, DB, etc.)
|
||||
## Sessão Achievements
|
||||
- ✅ tsup v8 build ESM+CJS+DTS+sourcemaps — 0 erros
|
||||
- ✅ 57 testes vitest+jsdom 100% passando
|
||||
- ✅ package.json com 6 sub-exports (root, react, vue, utils, hooks, validators, types)
|
||||
- ✅ Dockerfile multi-stage + .dockerignore + .env.example
|
||||
- ✅ WürthFlow.md — workflow ASCII completo + conventions + stack por tipo
|
||||
- ✅ Docker Docs no __docs__/
|
||||
- ✅ Git tag v1.0.0-beta.1 + wurthflow-arch-v1
|
||||
- ✅ MEMORY.md atualizado
|
||||
- ❌ GitHub push não configurado (sem remote remoto)
|
||||
- ⚠️ mercury CLI não encontrado — não usar em projetos
|
||||
- ⚠️ Build tags excluído do git (só commits normais)
|
||||
|
||||
## Skills — resumo rápido
|
||||
| Skill | Quando usar |
|
||||
|-------|-------------|
|
||||
| agent-browser-clawdbot | Browser (navegação, login, screenshot, raspagem) |
|
||||
| openclaw-agent-browser | Browser CLI (headless Chromium) |
|
||||
| multi-search-engine | 17 motores de busca |
|
||||
| nova-self-improver | Sistema de auto-melhoria completo |
|
||||
| self-improvement | Log de erros/aprendizados básico |
|
||||
| typescript | TypeScript safe (generics, narrowing, satisfies) |
|
||||
| e2e-testing-patterns | Playwright/Cypress — pirâmide de testes |
|
||||
| xcloud-docker-deploy | Deploy multi-stack + GitHub Actions |
|
||||
| openclaw-config | Edição segura do openclaw.json |
|
||||
| openclaw-power-ops | CLI completo OpenClaw |
|
||||
| redis-labs-integration | Redis Labs API |
|
||||
| vision | Processamento de imagens |
|
||||
| skill-security-audit | Análise de vulnerabilidades em código |
|
||||
| sql-toolkit | PostgreSQL/MySQL/SQLite |
|
||||
| file | Gestão de arquivos |
|
||||
| file-summary | Resumo de PDFs, Word, Excel |
|
||||
## Padrões identificados e a promover
|
||||
- **PATTERN: tsup v8** → entry único, --format esm,cjs, --dts, --sourcemap; não mais entry array por default
|
||||
- **PATTERN: Zod validator** → safeParse genérico, required() wrapper, sanitizedStr com .transform/.pipe
|
||||
- **PATTERN: flat(2) nunca flat(Infinity)** → quebra DTS generator
|
||||
- **PATTERN: react+tailwind atômico** → className topo, rest último, cn()
|
||||
|
||||
## Recent Decisions
|
||||
- 2026-05-19 20:42 — Instalar 5 skills novas (todas CLEAN)
|
||||
- 2026-05-19 20:46 — Criar perfil Linux/Full-Stack Analyst no AGENTS.md
|
||||
- 2026-05-19 20:47 — Expandir TOOLS.md com Browser + Security + SQL + File
|
||||
- 2026-05-19 20:47 — Configurar HEARTBEAT.md com rotação de 4 áreas
|
||||
## Próxima sessão — pendências
|
||||
1. Configurar Git remote + push GitHub (repositorio pulse-agent/libs)
|
||||
2. Arquitetura GitHub Actions CI/CD (.github/workflows/)
|
||||
3. CONTINUAR projeto @pulse-libs/core — adicionar composables Vue 3
|
||||
4. Logar ERRN-20260519-002 → tsup v8 entry array vs single entry
|
||||
5. Implementar WürthFlow em TODOS os projetos futuros
|
||||
|
||||
## Próximos passos para usuário (decidir prioridade)
|
||||
- [ ] GitHub: conectar remote e empurrar repos
|
||||
- [ ] Stack backend: escolher database (PostgreSQL/MySQL) para apps que usam @pulse-libs/core
|
||||
- [ ] CI/CD: configurar npm publish automático no npmjs.org
|
||||
- [ ] Próximo projeto: um CRUD API Fastify usando @pulse-libs/core + PostgreSQL
|
||||
- [ ] Continuidade Obsidian: configurar vault link (skill obsidian-vault-linker encontrada)
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
# CI/CD — GitHub Actions para @pulse-libs/core
|
||||
|
||||
## .github/workflows/ci.yml
|
||||
|
||||
```yaml
|
||||
name: CI — @pulse-libs/core
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main, master]
|
||||
pull_request:
|
||||
branches: [main, master]
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
concurrency:
|
||||
group: ci-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Test & Lint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
cache: npm
|
||||
- run: npm ci
|
||||
- run: npm run typecheck
|
||||
- run: npm test -- --coverage
|
||||
- uses: codecov/codecov-action@v4
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
with:
|
||||
file: ./coverage/coverage-final.json
|
||||
fail_ci_if_error: false
|
||||
|
||||
build:
|
||||
name: Build
|
||||
runs-on: ubuntu-latest
|
||||
needs: test
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
cache: npm
|
||||
- run: npm ci
|
||||
- run: npm run build
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: dist
|
||||
path: dist/
|
||||
retention-days: 7
|
||||
|
||||
docker:
|
||||
name: Docker Build & Push
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: docker/setup-buildx-action@v3
|
||||
- uses: docker/login-action@v3
|
||||
with:
|
||||
registry: docker.io
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: |
|
||||
pulse/core:latest
|
||||
pulse/core:1.0.0-beta.1
|
||||
pulse/core:${{ github.sha }}
|
||||
|
||||
publish:
|
||||
name: Publish to npm
|
||||
runs-on: ubuntu-latest
|
||||
needs: [test, build]
|
||||
if: github.ref == 'refs/heads/main'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
registry-url: https://registry.npmjs.org
|
||||
- run: npm ci
|
||||
- run: npm publish --access public
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
|
||||
release:
|
||||
name: Create GitHub Release
|
||||
runs-on: ubuntu-latest
|
||||
needs: publish
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
generate_release_notes: true
|
||||
```
|
||||
|
||||
## Triggers & Jobs
|
||||
|
||||
| Event | teste | build | docker | publish | release |
|
||||
|---|---|---|---|---|---|
|
||||
| PR → main | ✅ | ✅ | — | — | — |
|
||||
| push → main | ✅ | ✅ | ✅ | ✅ | — |
|
||||
| tag v* | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
|
||||
## Secrets Necessários
|
||||
|
||||
| Secret | Usado em | Descrição |
|
||||
|---|---|---|
|
||||
| `NPM_TOKEN` | publish | Token de publish do npmjs.org |
|
||||
| `DOCKERHUB_USERNAME` | docker | Usuário Docker Hub |
|
||||
| `DOCKERHUB_TOKEN` | docker | Token de acesso Docker Hub |
|
||||
|
||||
## Cobertura de Código
|
||||
|
||||
O job `test` gera cobertura com c8/v8 provider.
|
||||
Codecov opcional — remova o step se não usar.
|
||||
@@ -0,0 +1,96 @@
|
||||
# Arquitetura da Biblioteca — @pulse-libs/core
|
||||
|
||||
## Fluxograma de Dependências (ASCII)
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────┐
|
||||
│ CAMADA 0 — Zero Dependencies │
|
||||
│ types/ Result<T,E> AsyncState<T> Paginated │
|
||||
│ utils/ date str num cn debounce throttle │
|
||||
└────────────────────────┬─────────────────────────┘
|
||||
│ usam
|
||||
↓
|
||||
┌──────────────────────────────────────────────────┐
|
||||
│ CAMADA 1 — Só Zod + tipos │
|
||||
│ validators/ emailSchema passwordSchema │
|
||||
│ uuidSchema phoneSchema … │
|
||||
└────────────────────────┬─────────────────────────┘
|
||||
│ usam
|
||||
↓
|
||||
┌──────────────────────────────────────────────────┐
|
||||
│ CAMADA 2 — React + utils │
|
||||
│ hooks/ useAsync useDebounce useLocalStorage│
|
||||
│ useMedia useClipboard … │
|
||||
└────────────────────────┬─────────────────────────┘
|
||||
│ usam
|
||||
↓
|
||||
┌──────────────────────────────────────────────────┐
|
||||
│ CAMADA 3 — React + Tailwind + Utils │
|
||||
│ components/ Button Input Alert Card Spinner │
|
||||
└──────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Código D2 da Arquitetura
|
||||
|
||||
```d2
|
||||
direction: down
|
||||
|
||||
subgraph camada0 ["CAMADA 0 — Zero Dependencies"]
|
||||
TYPES: types/
|
||||
UTILS: utils/
|
||||
end
|
||||
|
||||
subgraph camada1 ["CAMADA 1 — Zod + tipos"]
|
||||
VALIDATORS: validators/
|
||||
end
|
||||
|
||||
subgraph camada2 ["CAMADA 2 — React + utils"]
|
||||
HOOKS: hooks/
|
||||
end
|
||||
|
||||
subgraph camada3 ["CAMADA 3 — React + Tailwind"]
|
||||
COMPONENTS: components/
|
||||
end
|
||||
|
||||
TYPES -> VALIDATORS
|
||||
UTILS -> VALIDATORS
|
||||
TYPES -> HOOKS
|
||||
UTILS -> HOOKS
|
||||
VALIDATORS -> COMPONENTS
|
||||
UTILS -> COMPONENTS
|
||||
```
|
||||
|
||||
## Princípios Arquiteturais
|
||||
|
||||
| Princípio | Como é aplicado |
|
||||
|-----------|-----------------|
|
||||
| Zero-backwards imports | Camada n nunca importa camada n+1 |
|
||||
| Pure functions first | `utils/` não tem side-effects, testável sem setup |
|
||||
| Schema = fonte da verdade | Toda validação vem de Zod |
|
||||
| Tree-shakeable exports | Cada sub-export exporta só o necessário |
|
||||
| Peer deps opcionais | React/Vue são optionalPeerDependencies |
|
||||
|
||||
## Entry Points Build (tsup v8)
|
||||
|
||||
```
|
||||
src/index.ts → dist/index.{js,mjs,js.map,d.ts,d.mts}
|
||||
src/utils/index.ts → dist/utils/index.{js,mjs,js.map,d.ts,d.mts}
|
||||
src/types/index.ts → dist/types/index.{js,mjs,js.map,d.ts,d.mts}
|
||||
src/validators/… → dist/validators/index.{js,mjs,js.map,d.ts,d.mts}
|
||||
src/components/… → dist/components/index.{js,mjs,js.map,d.ts,d.mts}
|
||||
```
|
||||
|
||||
## Tamanho esperado do bundle
|
||||
|
||||
| Camada | ESM | CJS |
|
||||
|--------|-----|-----|
|
||||
| `@pulse-libs/core` (root) | ~5 KB | ~7 KB |
|
||||
| `@pulse-libs/core/utils` | ~3 KB | ~4 KB |
|
||||
| `@pulse-libs/core/types` | ~1 KB | ~1 KB |
|
||||
| `@pulse-libs/core/validators` | ~3 KB | ~3 KB |
|
||||
| `@pulse-libs/core/components` | ~7 KB | ~9 KB |
|
||||
|
||||
## DTS — flat(2) vs flat(Infinity)
|
||||
|
||||
`flat(Infinity)` quebra o TypeScript Declaration Generator do tsup em pacotes complexos.
|
||||
`flat(2)` é o máximo necessário (nossas arrays no máximo 2 níveis de aninhamento: [cls, [cls2]]).
|
||||
@@ -0,0 +1,57 @@
|
||||
# Docker Build Guide — @pulse-libs/core
|
||||
|
||||
## Multi-stage Build
|
||||
|
||||
```
|
||||
Stage 1: build → instala deps + compila tsup
|
||||
Stage 2: prod-deps → npm install --prod apenas
|
||||
Stage 3: final → dist/ + node_modules (mínimo)
|
||||
```
|
||||
|
||||
## Build Local
|
||||
|
||||
```bash
|
||||
docker build -t pulse-libs/core:1.0.0-beta.1 .
|
||||
```
|
||||
|
||||
## Tamanho esperado
|
||||
|
||||
| Image | Aprox. |
|
||||
|-------|--------|
|
||||
| node:20-alpine base | ~170 MB |
|
||||
| Com build completo | ~300 MB |
|
||||
| Final (prod only) | **~120 MB** |
|
||||
|
||||
## TAGS Recomendadas
|
||||
|
||||
```bash
|
||||
# Latest
|
||||
docker tag pulse-libs/core:1.0.0-beta.1 pulse-libs/core:latest
|
||||
|
||||
# Por versão
|
||||
docker tag pulse-libs/core:1.0.0-beta.1 pulse-libs/core:1.0.0-beta
|
||||
docker tag pulse-libs/core:1.0.0-beta.1 pulse-libs/core:1.0
|
||||
|
||||
# Por commit SHA
|
||||
docker tag pulse-libs/core:1.0.0-beta.1 pulse-libs/core:sha-$(git rev-parse --short HEAD)
|
||||
```
|
||||
|
||||
## Push para registry
|
||||
|
||||
```bash
|
||||
docker push registry.example.com/pulse/core:1.0.0-beta.1
|
||||
```
|
||||
|
||||
## .dockerignore
|
||||
|
||||
```
|
||||
node_modules/
|
||||
dist/
|
||||
coverage/
|
||||
.env
|
||||
.env.*
|
||||
.git/
|
||||
.github/
|
||||
*.log
|
||||
.DS_Store
|
||||
```
|
||||
Reference in New Issue
Block a user