Repository navigation
feat(services): add open-wa as a 6th embedded service - #13222
diegosouzapw merged 5 commits into
Conversation
Adds @open-wa/wa-automate (WhatsApp Web automation via headless Chromium) following the existing embedded-service pattern, mirroring Mux's lifecycle-managed-only shape (no Layer 4 executor — this is not a routing target). Flags/env verified directly against the installed 4.76.0 source rather than trusted from web docs, which mix this stable v4 line with an unreleased v5 alpha CLI surface. healthIntervalMs is set to 60s (vs. the usual 5s) for this service: open-wa's HTTP server does not start listening until the full WhatsApp handshake resolves, which blocks on a human scanning the pairing QR code on first pairing. At the default 5s interval the supervisor's 3-consecutive-failure threshold would declare "error" ~15s into every legitimate start. This is a local, single-service config change — a proper fix (a startup-grace knob distinct from the steady-state poll interval) belongs in ServiceSupervisor/HealthChecker as a follow-up affecting all embedded services.
a1c9868 to
ab0725f
Compare
|
Really solid contribution — this follows the embedded-service checklist to the letter |
Migration 163 was already taken by 163_radar_feed_cache_generated_at.sql on release/v3.8.51 (tip is at 179). Renumbered to 180, the next free slot. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
…ken) Renamed 180_api_key_preferred_connections.sql to 184_api_key_preferred_connections.sql: the release tip landed 180_memory_fts_au_conditional_memory_id.sql after this PR's previous renumbering pass. Slot 184 is the owner-assigned number for this PR among the 7 PRs that collided on the 180 slot (cheaper-inference#13610=181, cheaper-inference#12962=182, cheaper-inference#12967=183, cheaper-inference#13102=184, cheaper-inference#13222=185, cheaper-inference#13373=186, cheaper-inference#13554=187). Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Slot 180 was reused by 180_memory_fts_au_conditional_memory_id.sql (merged 2026-09-16), so this PR's seed migration moves to the owner's assigned slot 185. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Six open PRs claimed migration slot 180 after cheaper-inference#13331 landed it on the release tip; the owner assigned cheaper-inference#13373 slot 186 in the sequence (cheaper-inference#13610=181, cheaper-inference#12962=182, cheaper-inference#12967=183, cheaper-inference#13102=184, cheaper-inference#13222=185, cheaper-inference#13373=186, cheaper-inference#13554=187). Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Resolves the conflict in docs/frameworks/EMBEDDED-SERVICES.md — the base added Dario as the 5th service while this PR adds open-wa; the doc now lists six (base table + open-wa row, Dario stays §4.5, open-wa becomes §4.6, reverse proxy §4.7). Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
The release tip's latest migration is 179 (cheaper-inference#13717 folded the former 180 into 178), so 185 opened a 180–184 gap that check-migration-numbering rejects. check-migration-numbering.test.ts: 15/15. The 176→177 count in README/AGENTS/ llm.txt is a maintainer-side bump (protected surfaces) applied at merge time. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
|
Thanks @birdleandro-bit — merging via the release merge-train. Validated in local merge-train (merge-train-20260918-130526-suite.log) on the devbox @ train tip 28fb420c9ad860ba275294ebb4ebbecb9da83318 with the sibling PRs of this batch: static gates green; changed-area node:test 293/294 (0 failing) + vitest 482/482 (fast parity — full suite ran today on the tip via the base-red and 3b trains). Merged --admin per merge-gates §7. |
1e8c913
into
cheaper-inference:release/v3.8.51
…proxy_logs.proxy_name) Maintainer-side count bump after the two migration PRs merged; the docs-counts gate reads README.md, AGENTS.md and llm.txt (+ its 65 i18n mirrors), all of which are agent-instruction / protected surfaces the contributor PRs must not touch. check:docs-counts and check:docs-sync green.
…nce#13222) * feat(services): add open-wa as a 6th embedded service Adds @open-wa/wa-automate (WhatsApp Web automation via headless Chromium) following the existing embedded-service pattern, mirroring Mux's lifecycle-managed-only shape (no Layer 4 executor — this is not a routing target). Flags/env verified directly against the installed 4.76.0 source rather than trusted from web docs, which mix this stable v4 line with an unreleased v5 alpha CLI surface. healthIntervalMs is set to 60s (vs. the usual 5s) for this service: open-wa's HTTP server does not start listening until the full WhatsApp handshake resolves, which blocks on a human scanning the pairing QR code on first pairing. At the default 5s interval the supervisor's 3-consecutive-failure threshold would declare "error" ~15s into every legitimate start. This is a local, single-service config change — a proper fix (a startup-grace knob distinct from the steady-state poll interval) belongs in ServiceSupervisor/HealthChecker as a follow-up affecting all embedded services. * fix(db): renumber open-wa seed migration to avoid collision with 163 Migration 163 was already taken by 163_radar_feed_cache_generated_at.sql on release/v3.8.51 (tip is at 179). Renumbered to 180, the next free slot. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> * fix(db): renumber open-wa seed migration to avoid collision with 180 Slot 180 was reused by 180_memory_fts_au_conditional_memory_id.sql (merged 2026-09-16), so this PR's seed migration moves to the owner's assigned slot 185. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> --------- Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> Co-authored-by: birdleandro-bit <birdleandro-bit@users.noreply.github.com>
…en-wa seed, cheaper-inference#12814 proxy_logs.proxy_name) Maintainer-side count bump after the two migration PRs merged; the docs-counts gate reads README.md, AGENTS.md and llm.txt (+ its 65 i18n mirrors), all of which are agent-instruction / protected surfaces the contributor PRs must not touch. check:docs-counts and check:docs-sync green.
Summary
@open-wa/wa-automate(WhatsApp Web automation via headless Chromium) as a new embedded service, following the existing 9Router/CLIProxyAPI/Mux/Bifrost/Dario pattern (installer, bootstrap wiring, 9 API routes, dashboard tab, DB seed migration). Lifecycle-managed only, like Mux — not a routing target, no Layer 4 executor.4.76.0package source (not just web docs, which mix this stable v4 line with an unreleased v5 alpha CLI surface).healthIntervalMsto 60s for this service only (~3 min grace window) — documented inbootstrap.tsas a knownServiceSupervisor/HealthCheckerframework gap (no separate startup-grace knob) worth a follow-up affecting all embedded services.EMBEDDED-SERVICES.md,openapi.yaml) and a unit test for the installer.Test plan
tests/unit/services/installers/openwa.test.ts— 8/8 passing (real run against the mocked npm install path)npm run typecheck:core/npm run lint— not run: this environment's ownnode_modules(shared main checkout) is missing core files (typescript/lib/lib.*.d.ts,eslint/bin/eslint.js), unrelated to this change. CI should gate this.