Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
155 commits
Select commit Hold shift + click to select a range
327935b
:arrow_up: ci: Bump actions/setup-node from 4 to 6
dependabot[bot] Apr 26, 2026
00c937c
:arrow_up: ci: Bump actions/checkout from 4 to 6
dependabot[bot] Apr 26, 2026
1b5b7e7
fix(evolution): suprime LOGOUT_INSTANCE falso após stream:error 515 (…
claude Apr 26, 2026
aca8278
feat(evolution-health): auto-restart em 'deaf session' (Baileys#2491)
claude Apr 26, 2026
4eeb7ec
feat(evolution): set-settings envia sessionPhoneVersion (anti-ban #24…
claude Apr 26, 2026
7b0d8d8
feat(ui): syncFullHistory admin-only com aviso de risco (#2437)
claude Apr 26, 2026
325f1db
fix(evolution): archive-chat curto-circuita 503 ARCHIVE_CHAT_UPSTREAM…
claude Apr 26, 2026
d44b8f8
feat(evolution): adiciona STATUS_INSTANCE/LOGOUT_INSTANCE/NEW_JWT_TOK…
claude Apr 26, 2026
29efe1f
fix(evolution-health): AbortSignal.timeout em todos os fetch upstream
claude Apr 26, 2026
693b4b3
feat(evolution): handler NEW_JWT_TOKEN como sinal de saúde Baileys 7
claude Apr 26, 2026
825e72f
test(evolution-webhook): atualiza contrato 27→29 (status.instance + m…
claude Apr 26, 2026
c799646
fix(tests): destrava CI — vitest agora roda 240/240 verde
claude Apr 26, 2026
00e1bd2
fix(lint): destrava ESLint nos arquivos tocados no PR
claude Apr 26, 2026
c90a950
chore(mcp): registra servidores MCP do Portainer e Evolution
claude Apr 26, 2026
ef0da97
fix(evolution): aplica feedback do CodeRabbit no PR #23
claude Apr 26, 2026
8a72f64
fix(test): vitest fallback de SUPABASE env trata string vazia também
claude Apr 26, 2026
cb25cdc
fix(e2e): test #3 do dlq-idempotency usa authTest, não test
claude Apr 26, 2026
d8137df
fix(test): vitest CI usa singleFork + retry para mitigar flakiness
claude Apr 26, 2026
78cccaa
docs(baileys): production hardening audit + gaps + applied mitigations
claude Apr 26, 2026
62d64b7
docs(reference): add canonical Baileys + Evolution API reference (183…
claude Apr 27, 2026
bc92b28
feat(webhook): body size guard, replay protection, idempotency cleanu…
claude Apr 27, 2026
5f1fe6b
fix(webhook): redact JID + drop raw content from message handler erro…
claude Apr 27, 2026
9748159
feat(safe-send): per-JID throttle + humanized delay anti-ban primitives
claude Apr 27, 2026
3db9672
feat(disconnect-reason): map Baileys codes to severity-tagged labels
claude Apr 27, 2026
5d33b6e
docs(baileys): document webhook hardening + safe-send + disconnect-re…
claude Apr 27, 2026
4879fc9
feat(evolution-api): wire safe-send per-JID throttle + presence sim i…
claude Apr 27, 2026
baec2c2
feat(db): version-control Baileys observability tables + admin RPCs
claude Apr 27, 2026
e3b0bf9
feat(admin): Baileys health dashboard - error patterns + WA version d…
claude Apr 27, 2026
6008708
feat(observability): Sentry forwarder + wire into webhook handler errors
claude Apr 27, 2026
7fe8d9a
docs(baileys): document pipeline integration + Sentry + Baileys healt…
claude Apr 27, 2026
3995e1b
fix(test): apply leakSafeOpts to maybeSimulatePresence tests
claude Apr 27, 2026
1ea70a3
refactor(sentry): extract DSN parser to named function
claude Apr 27, 2026
2eaa72c
ci(deno): pre-cache deps with retry loop to defeat registry flakes
claude Apr 27, 2026
53388ca
revert(ci): remove pre-cache step (did not help, restore minimal config)
claude Apr 27, 2026
55b3d7b
ci(deno): split test command per directory for diagnostic visibility
claude Apr 27, 2026
89ef447
fix(evolution-api): unbreak send-media/send-audio source-extraction t…
claude Apr 27, 2026
d9a8fea
Changes
lovable-dev[bot] Apr 27, 2026
f93df58
Changes
lovable-dev[bot] Apr 27, 2026
499a89a
Changes
lovable-dev[bot] Apr 27, 2026
76f7959
Changes
lovable-dev[bot] Apr 27, 2026
a4d3bfe
Changes
lovable-dev[bot] Apr 27, 2026
5070392
Changes
lovable-dev[bot] Apr 27, 2026
0eb2f52
Changes
lovable-dev[bot] Apr 27, 2026
c0ea86c
Changes
lovable-dev[bot] Apr 27, 2026
f84ddeb
Changes
lovable-dev[bot] Apr 27, 2026
261116b
Changes
lovable-dev[bot] Apr 27, 2026
61a70e2
Changes
lovable-dev[bot] Apr 27, 2026
8efdc5b
Preservou state do player no replay
lovable-dev[bot] Apr 27, 2026
26c8be8
fix(security): restrict CORS origins for proxy observability endpoints
adm01-debug Apr 27, 2026
d256814
fix(security): remove wildcard cors from proxy observability functions
adm01-debug Apr 27, 2026
4ad3732
Merge PR #8: ci: Bump actions/setup-node from 4 to 6
Apr 27, 2026
2a7a397
Merge PR #9: ci: Bump actions/checkout from 4 to 6
Apr 27, 2026
f6126b5
:arrow_up: ci: bump actions/upload-artifact from 4 to 7
dependabot[bot] Apr 23, 2026
b9e6819
:arrow_up: deps: Bump the minor-and-patch group across 1 directory wi…
dependabot[bot] Apr 26, 2026
55f2f46
:arrow_up: deps: bump react-day-picker from 8.10.1 to 9.14.0
dependabot[bot] Apr 12, 2026
cb3bdef
:arrow_up: deps: Bump @types/react-dom from 18.3.7 to 19.2.3
dependabot[bot] Apr 26, 2026
73dc0cd
:arrow_up: deps: bump zod from 3.25.76 to 4.3.6
dependabot[bot] Apr 23, 2026
d65105d
:arrow_up: deps: bump vaul from 0.9.9 to 1.1.2
dependabot[bot] Apr 23, 2026
6d574bb
:arrow_up: deps: Bump eslint-plugin-react-hooks from 5.2.0 to 7.1.1
dependabot[bot] Apr 26, 2026
82de21b
:arrow_up: deps: bump react-i18next from 16.6.6 to 17.0.2
dependabot[bot] Apr 12, 2026
c613e96
:arrow_up: deps: Bump eslint from 9.39.4 to 10.2.1
dependabot[bot] Apr 26, 2026
0f1a507
:arrow_up: deps: bump @hello-pangea/dnd from 17.0.0 to 18.0.1
dependabot[bot] Apr 23, 2026
8c64d71
Merge PR #23: fix(evolution): 8 mitigações para Baileys 7 / Evolution…
Apr 27, 2026
25f2a3f
Merge PR #26: Webhook hardening + anti-ban + disconnect-reason mapping
Apr 27, 2026
bb6cbda
Merge PR #28: Add configurable CORS handling to proxy-metrics and pro…
Apr 27, 2026
bf632da
Remove unused ALLOWED_ORIGINS in proxy-metrics (centralized via _shar…
Apr 27, 2026
24d9742
Merge PR #29: Centralize CORS headers and response header builders fo…
Apr 27, 2026
3abeff4
Merge PR #30: Lovable sync 1777290333
Apr 27, 2026
3255409
fix(deps): align peer deps for react-i18next 17 and revert @types/rea…
Apr 27, 2026
a58c505
fix(lint): resolve eslint v10 / react-hooks v7 errors
Apr 27, 2026
b5fc680
style(test): align validation header tests with repo conventions
adm01-debug Apr 27, 2026
f65e169
fix(test): align MessageStatus.played test label with component (Repr…
Apr 27, 2026
368ab4c
fix(test): swallow finally chain rejection and skip 5xx in anon harde…
Apr 27, 2026
c7f42f9
chore(test): migrate vitest 4 poolOptions and centralize 5xx skip
Apr 27, 2026
d99413f
fix(test): defense-in-depth for partial Supabase degradation
Apr 27, 2026
8994b79
test(security): gate live anon-hardening behind RUN_LIVE_HARDENING_TESTS
Apr 27, 2026
0a08691
ci(test): surface vitest output as artifact + bail on first failure
Apr 27, 2026
1056b54
ci(test): also print vitest tail in the job log on failure
Apr 27, 2026
858c0f6
ci(test): post vitest tail as PR comment on failure (read-only friendly)
Apr 27, 2026
49b1262
ci: grant pull-requests:write so the failure-comment step can post
Apr 27, 2026
99d875a
:arrow_up: ci: bump denoland/setup-deno from 1 to 2
dependabot[bot] Apr 27, 2026
bce2fa3
:arrow_up: ci: bump actions/download-artifact from 4 to 8
dependabot[bot] Apr 27, 2026
01ecdf9
Merge origin/main into umbrella PR; gate new RLS live test
Apr 27, 2026
6d83d07
fix(lint): replace any-casts in rlsCriticalEndpoints test with struct…
Apr 27, 2026
3279df2
Merge PR #35: ci: bump actions/download-artifact from 4 to 8
Apr 27, 2026
25323a1
Merge PR #34: ci: bump denoland/setup-deno from 1 to 2
Apr 27, 2026
91f650a
Merge PR #33: Use shared CORS headers and deduplicate Access-Control-…
Apr 27, 2026
02aa026
fix: address Copilot + Codex review comments on #32
Apr 27, 2026
7f303a9
test(scenarios): comprehensive day-to-day coverage of PR#32 implement…
claude Apr 27, 2026
89dbbe3
fix: address CodeRabbit + Codex 2nd review wave (16 inline + 4 outsid…
Apr 27, 2026
428c55d
test(deno): update disconnect-reason scenarios for 405→403 + safe-sen…
Apr 27, 2026
ac2b89f
fix(webhook): replay timestamp gate — accept legitimate Evolution ret…
Apr 27, 2026
82dfd1f
fix: address Codex P2 round 3 (jwt event subscription + url inheritance)
Apr 27, 2026
9ce2182
fix: address Codex P2 round 4 (per-jid env validation + status_update…
Apr 27, 2026
a165734
feat(db): S4 _swarm_guardian_events audit table + admin RPC
claude Apr 27, 2026
ed57f07
feat(sidecar): swarm-task-guardian — duplicate-task detection + auto-…
claude Apr 27, 2026
7018ae6
test(guardian): 7 scenarios for orphan-identification decision logic
claude Apr 27, 2026
2ee5dc0
docs(baileys): swarm-task-guardian design + deployment + service hard…
claude Apr 27, 2026
b7e2318
fix: address CodeRabbit + Codex review wave 5
Apr 27, 2026
f7b41c1
fix: address PR #32 critical review threads (zod v4, day-picker, authz)
claude Apr 27, 2026
869740b
fix: critical refetch-wipe + ceiling-storm + ci.yml hardening
Apr 27, 2026
429e199
fix(webhook): stream body cap (Content-Length is bypassable)
Apr 27, 2026
0ba00cd
fix: streaming body cap test alignment + S5 deaf-session restart lock
Apr 27, 2026
fa18d1e
feat(sentry): redact PII before forwarding to third-party SaaS
Apr 27, 2026
533c030
perf(migration): composite index for rpc_wa_version_drift
Apr 27, 2026
11f3fa0
test(webhook): align HMAC contract test with the inline-verify refactor
Apr 27, 2026
1520d61
docs(baileys-ref): refresh 27→29 events + redact remaining PII
Apr 27, 2026
10ae351
fix(webhook): HMAC P1 + STRICT_MODE regression + safe-send caller budget
Apr 27, 2026
0209835
test(webhook): align scenario/contract tests with new HMAC structure
Apr 27, 2026
8e2a071
fix(health): correct dispatch_error_logs column names in strong-signa…
Apr 27, 2026
00a7c4e
fix: CodeRabbit wave — 7 real bugs + 1 test hardening
Apr 27, 2026
c5df8ee
fix(evolution-api): preserve syncFullHistory + reject blank PER_JID env
Apr 27, 2026
8131eaf
fix: chat-switch state reset + webhook delete error check (Codex P1+P2)
Apr 27, 2026
30f46c4
fix(reconcile): include retrying in STATUS_RANK so it can't be downgr…
Apr 27, 2026
c4bc29f
fix(s5): persist acquired bucket end-to-end (Codex P2 race)
Apr 27, 2026
935f4f1
chore(claude): disable MCP auto-enable in shared settings
claude Apr 27, 2026
1d988b7
fix: CodeRabbit wave — chat-switch race + 5 quality fixes
Apr 27, 2026
c1e7a00
feat(baileys): 10 hardening improvements (B1-B10) post analysis
claude Apr 27, 2026
2742b0b
fix: Codex P1+P2 — gate DLQ summary RPC + reject blank webhook env vars
Apr 27, 2026
83cac11
feat(baileys): zombie-state blindage Z1-Z6
claude Apr 27, 2026
3a093c6
feat(baileys): continuous-improvement wave (CT1-CT3, CT6)
claude Apr 27, 2026
bfbafd6
fix: Codex P1+P2 — gate sidecar heartbeat RPC + allow dlq_enqueued audit
Apr 27, 2026
05d0752
feat(admin): expose B7/Z1/Z6 observability in Baileys Health page (CT5)
claude Apr 27, 2026
f225a6c
fix: Codex P1+P2 — surface PostgREST errors in probe + DLQ replay
Apr 27, 2026
bdfe0b8
fix: Codex P1+P2x2 — probe alert dedup, z1 admin RLS, heartbeat error…
Apr 27, 2026
b9c5155
fix: surface JSON parse failures + cap message length (audit follow-up)
claude Apr 27, 2026
cf3a6d4
fix: Codex P1+P2 — DLQ replay loop guard + don't double-count attempts
Apr 27, 2026
209e1b9
fix: Codex P2x2 — gate presence budget by action + check audit RPC error
Apr 27, 2026
94c9c74
fix: Codex P2x2 — blank-as-unset in parseMsEnv + scope probe dedup to…
Apr 27, 2026
c57ebe0
fix: Codex P2x2 — blank Sentry sample rate + probe alert error check
Apr 27, 2026
6ab2d7f
feat(ops): app_config table + sidecar pre-registration + admin UI (CT…
claude Apr 28, 2026
f46337a
fix: Codex P2x2 — drop secret suffix in broad view + PGRST202 fallback
Apr 28, 2026
1e8a2ae
fix(evolution): remove NEW_JWT_TOKEN + MESSAGING_HISTORY_SET (invalid…
claude Apr 28, 2026
4b56adc
fix: Codex P1 — reclaim stale DLQ 'processing' rows in claim path
Apr 28, 2026
6331efd
docs: canonical DATA_ARCHITECTURE.md mapping the 4 Postgres instances
claude Apr 28, 2026
bd5acc9
fix: Codex P1 — persist is_secret deterministically in app_config_set
Apr 28, 2026
9e8b8a2
fix: Codex P2 — dedupe guardian reconnect-storm alerts to once per 15min
Apr 28, 2026
08d4eca
docs: empirical Postgres ↔ FATOR X message mirror audit
claude Apr 28, 2026
d526db1
fix: Codex P1 — persist auth-failure rows in legacy fallback
Apr 28, 2026
48231e8
fix: Codex P2 — check {error} on outcome RPC + system_logs in restart…
Apr 28, 2026
3e64116
feat: B-completo — FATOR X complete-mirror with messages.set + DLQ + …
claude Apr 28, 2026
6cc07c4
fix: Codex P1x2+P2 — HMAC consumer signing, dry-run state, (ts,id) cu…
Apr 28, 2026
7e06684
chore: ignore Python bytecode caches under infra/rabbit-consumer
Apr 28, 2026
7f6a281
fix: Codex P1 — sign backfill webhook requests with HMAC
Apr 28, 2026
86191c3
fix: Codex P1 — defer NACK backoff via call_later (no I/O-thread stall)
Apr 28, 2026
a7cf3bc
fix: Codex P1 — replay DLQ with original raw body bytes (idempotency)
Apr 28, 2026
f4406de
fix: Codex P1+P2 — fail-fast empty WEBHOOK_SECRET + resolve CT8 anon-…
Apr 28, 2026
83e2612
fix: Codex P1 — reclaim max-attempts DLQ rows as permanent_failure
Apr 28, 2026
54d2abf
fix: Codex P1 — abort backfill on auth 4xx without advancing state
Apr 28, 2026
8da88a4
fix: Codex P1 — treat replay 401/403 as transient, abort batch
Apr 28, 2026
2bfdd87
fix: Codex P1 — promote exhausted aborted rows to permanent_failure
Apr 28, 2026
959638f
fix: Codex P2 — check finalize RPC errors in DLQ replay abort path
Apr 28, 2026
3c7b885
fix: Codex P1+P2 — refund attempts on replay abort + escape LIKE wild…
Apr 28, 2026
175b89f
fix: Codex P1 — restore variant-aware contact matching in messages.se…
Apr 28, 2026
420636b
fix: Codex P1+P2 — retry transient 4xx + count messages.set volume in…
Apr 28, 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
4 changes: 4 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"_comment": "MCP servers are declared in .mcp.json but NOT auto-enabled here. Each contributor opts in via their own ~/.claude/settings.json or with `claude --add-mcp` so a fresh checkout never grants tool access by default. See README.md for the per-contributor setup."
}
3 changes: 3 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ VITE_EXTERNAL_SUPABASE_ANON_KEY=your-external-anon-key
# ==============================================================================
EVOLUTION_API_URL=https://evolution.atomicabr.com.br
EVOLUTION_API_KEY=sua-evolution-api-key
# Anti-ban: força uma versão conhecida-boa do WhatsApp Web na sessão Baileys.
# Atualizar quando o WA quebrar (verificar issue EvolutionAPI/#2437).
CONFIG_SESSION_PHONE_VERSION=2.3000.1033773198

# Webhook signature secret(s). Single value for legacy mode, OR a comma-separated
# list for zero-downtime rotation. When rotating: deploy with [new,old] →
Expand Down
109 changes: 89 additions & 20 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@ on:
branches: [main, develop]
workflow_dispatch:

# Default to read-only at the workflow level; only the `test` job needs to
# post a PR comment with the vitest tail on failure, so write scopes are
# granted at the job level instead of repo-wide. Keeps third-party actions
# in other jobs (build / e2e / smoke) on read-only tokens.
permissions:
contents: read

env:
NODE_VERSION: '20'
VITE_SUPABASE_URL: ${{ secrets.VITE_SUPABASE_URL }}
Expand All @@ -28,12 +35,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0

- name: 📦 Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}

Expand Down Expand Up @@ -70,25 +77,87 @@ jobs:
name: 🧪 Unit Tests
runs-on: ubuntu-latest
needs: lint-and-typecheck
# Scoped here (not workflow-wide): only the failure-comment step needs
# to post on the PR. Build / e2e / smoke remain read-only.
permissions:
contents: read
pull-requests: write
issues: write
steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: 📦 Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}

- name: 📚 Install dependencies
run: npm install --no-audit --no-fund

- name: 🧪 Run Vitest
run: npm run test -- --reporter=verbose
id: vitest
run: |
set -o pipefail
npm run test -- --reporter=verbose --bail=1 2>&1 | tee vitest-output.log
env:
CI: true

- name: 📜 Print last 200 lines on failure (so it shows in the job page)
if: failure() && steps.vitest.conclusion == 'failure'
run: |
echo "::group::Vitest tail"
tail -200 vitest-output.log || true
echo "::endgroup::"

- name: 💬 Post Vitest tail as PR comment on failure
# Skip on forked PRs: GITHUB_TOKEN is downgraded to read-only there
# regardless of `permissions:` overrides (security default), so the
# createComment call would fail noisily. Compare full_name (not the
# `.fork` flag, which only tells you if the *source* repo is itself a
# fork of someone else's, not whether THIS PR is cross-repo).
if: |
failure()
&& steps.vitest.conclusion == 'failure'
&& github.event_name == 'pull_request'
&& github.event.pull_request.head.repo.full_name == github.repository
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const tail = fs.readFileSync('vitest-output.log', 'utf8').split('\n').slice(-200).join('\n');
// Use HEAD of the tail (not the trailing 60k chars) so the failure
// header (assertion message + source location) survives truncation.
// Vitest puts the noisy stack/teardown last; head gives us value.
const trimmed = tail.length > 60_000 ? tail.slice(0, 60_000) + '\n…[truncated]' : tail;
// 4-backtick fence so any embedded ``` in the vitest output
// (markdown in assertions, snapshot diffs, fixture JSON) does not
// close the outer fence and leak the rest of the log as raw md.
const body = [
'🧪 **Unit Tests failed** — last 200 lines of vitest output:',
'',
'````',
trimmed,
'````',
].join('\n');
Comment thread
coderabbitai[bot] marked this conversation as resolved.
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body,
});
Comment thread
coderabbitai[bot] marked this conversation as resolved.

- name: 📦 Upload Vitest log on failure
if: failure()
uses: actions/upload-artifact@v7
with:
name: vitest-output
path: vitest-output.log
retention-days: 7
if-no-files-found: warn

- name: 📊 Upload coverage report
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
if: always()
with:
name: coverage-report
Expand All @@ -104,10 +173,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: 🦕 Setup Deno
uses: denoland/setup-deno@v1
uses: denoland/setup-deno@v2
with:
deno-version: v1.x

Expand All @@ -133,13 +202,13 @@ jobs:
needs: [test, deno-edge-tests]
steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: 📦 Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
- name: 🦕 Setup Deno
uses: denoland/setup-deno@v1
uses: denoland/setup-deno@v2
with:
deno-version: v1.x
- name: 📚 Install dependencies
Expand All @@ -156,10 +225,10 @@ jobs:
needs: [lint-and-typecheck, deno-edge-tests, smoke-pre-deploy]
steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: 📦 Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}

Expand All @@ -175,7 +244,7 @@ jobs:
VITE_EXTERNAL_SUPABASE_ANON_KEY: ${{ secrets.VITE_EXTERNAL_SUPABASE_ANON_KEY }}

- name: 📦 Upload build artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: dist
path: dist/
Expand Down Expand Up @@ -207,18 +276,18 @@ jobs:
shard: ['1/2', '2/2']
steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: 📦 Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}

- name: 📚 Install dependencies
run: npm install --no-audit --no-fund

- name: 📦 Download build artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
name: dist
path: dist/
Expand All @@ -243,7 +312,7 @@ jobs:
PLAYWRIGHT_ALL_BROWSERS: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' && '1' || '0' }}

- name: 📊 Upload Playwright report
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
if: always()
with:
name: playwright-report-shard-${{ strategy.job-index }}
Expand All @@ -260,10 +329,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: 📦 Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}

Expand Down
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,15 @@ supabase/.temp/
*_old*
*.orig

# ====================
# PYTHON
# ====================
# Bytecode + caches generated by `python -m py_compile` syntax checks
# during dev / CI on the rabbit-consumer scripts under infra/.
__pycache__/
*.py[cod]
*$py.class

# ====================
# OUTROS
# ====================
Expand Down
12 changes: 12 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"mcpServers": {
"portainer": {
"type": "http",
"url": "https://portainer-mcp.atomicabr.com.br/mcp"
},
"evolution": {
"type": "http",
"url": "https://evolution-mcp.adm01.workers.dev/mcp"
}
}
}
Loading