Repository Analysis

rmyndharis/OpenWA

Free, Open Source, Self-Hosted WhatsApp API Gateway

5.2 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of rmyndharis/OpenWA, a TypeScript project with 11,263 GitHub stars. SynthScan v2.0 examined 167,242 lines of code across 851 source files, recording 413 pattern matches distributed across 14 syntactic categories. The overall adjusted score of 5.2 places this repository in the Low AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

5.2
Adjusted Score
5.2
Raw Score
100%
Time Factor
2026-07-13
Last Push
11.3K
Stars
TypeScript
Language
167.2K
Lines of Code
851
Files
413
Pattern Hits
2026-07-14
Scan Date
0.02
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 13MEDIUM 167LOW 233

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 413 distinct pattern matches across 14 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Decorative Section Separators164 hits · 506 pts
SeverityFileLineSnippetContext
MEDIUMtest/webhooks.e2e-spec.ts120 // ── CRUD over the REST surface ────────────────────────────────────COMMENT
MEDIUMtest/webhooks.e2e-spec.ts212 // ── auth boundaries ───────────────────────────────────────────────COMMENT
MEDIUMtest/webhooks.e2e-spec.ts230 // ── registration validation ───────────────────────────────────────COMMENT
MEDIUMtest/webhooks.e2e-spec.ts254 // ── dispatch over real HTTP ───────────────────────────────────────COMMENT
MEDIUMtest/webhooks.e2e-spec.ts329 // ── the test endpoint ─────────────────────────────────────────────COMMENT
MEDIUMdocs/10-devops-infrastructure.md437# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md439# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md446# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md448# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md459# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md461# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md482# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md484# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md494# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md496# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md509# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md511# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md517# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md519# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md524# ===========================================COMMENT
MEDIUMdocs/10-devops-infrastructure.md526# ===========================================COMMENT
MEDIUMdashboard/src/hooks/queries.ts20// ── Query Keys ────────────────────────────────────────────────────────COMMENT
MEDIUMdashboard/src/hooks/queries.ts41// ── Session Queries ───────────────────────────────────────────────────COMMENT
MEDIUMdashboard/src/hooks/queries.ts87// ── Webhook Queries ───────────────────────────────────────────────────COMMENT
MEDIUMdashboard/src/hooks/queries.ts134// ── Template Queries ─────────────────────────────────────────────────────────COMMENT
MEDIUMdashboard/src/hooks/queries.ts178// ── API Key Queries ───────────────────────────────────────────────────COMMENT
MEDIUMdashboard/src/hooks/queries.ts219// ── Logs Queries ──────────────────────────────────────────────────────COMMENT
MEDIUMdashboard/src/hooks/queries.ts234// ── Infrastructure Queries ────────────────────────────────────────────COMMENT
MEDIUMdashboard/src/hooks/queries.ts252// ── Plugin Queries ────────────────────────────────────────────────────COMMENT
MEDIUMdashboard/src/hooks/queries.ts328// ── Stats Queries ─────────────────────────────────────────────────────COMMENT
MEDIUMdashboard/src/pages/Plugins.tsx357 // ── Activation ────────────────────────────────────────────────────────────COMMENT
MEDIUMdashboard/src/pages/Plugins.tsx375 // ── Per-session config override ───────────────────────────────────────────COMMENT
MEDIUMsdk/python/tests/test_sdk.py12# ── Client core ────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/tests/test_sdk.py117# ── Messages (the critical send-text fix) ──────────────────────────COMMENT
MEDIUMsdk/python/tests/test_sdk.py509# ── Search ─────────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/tests/test_sdk.py228# ── Sessions ───────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/tests/test_sdk.py270# ── Groups, Contacts, Webhooks, Chats, Health ──────────────────────COMMENT
MEDIUMsdk/python/openwa/client.py98 # ── Resources ────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/client.py152 # ── Auth ─────────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/client.py157 # ── Raw request escape hatch ─────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/client.py170 # ── Lifecycle ────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py38# ── Session ───────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py90# ── Message ───────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py267# ── Bulk ──────────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py346# ── Contact ───────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py373# ── Group ─────────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py419# ── Webhook ───────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py467# ── Chat ──────────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py493# ── Status / Stories ──────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py539# ── Health ────────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py553# ── Auth ──────────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py561# ── Template ──────────────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py591# ── Label (WhatsApp Business) ─────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py605# ── Channel / Newsletter ──────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py627# ── Catalog (Business) ────────────────────────────────────────────COMMENT
MEDIUMsdk/python/openwa/types.py684# ── Search ────────────────────────────────────────────────────────COMMENT
MEDIUM…/src/main/java/com/rmyndharis/openwa/OpenWAClient.java47 // ── Resources ──────────────────────────────────────────────────────COMMENT
MEDIUM…/src/main/java/com/rmyndharis/openwa/OpenWAClient.java77 // ── Internal request API used by all resources ─────────────────────COMMENT
MEDIUM…/com/rmyndharis/openwa/resources/MessagesResource.java214 // ── Internal ───────────────────────────────────────────────────────COMMENT
MEDIUMsdk/php/tests/ResourcesTest.php11 // ── Sessions ──────────────────────────────────────────────────────COMMENT
104 more matches not shown…
Hyper-Verbose Identifiers77 hits · 82 pts
SeverityFileLineSnippetContext
LOWdashboard/src/hooks/queries.ts145export function useCreateTemplateMutation() {CODE
LOWdashboard/src/hooks/queries.ts156export function useUpdateTemplateMutation() {CODE
LOWdashboard/src/hooks/queries.ts167export function useDeleteTemplateMutation() {CODE
LOWdashboard/src/hooks/queries.ts271export function useCreateInstanceMutation(pluginId: string) {CODE
LOWdashboard/src/hooks/queries.ts281export function useRegenerateInstanceSecretMutation(pluginId: string) {CODE
LOWdashboard/src/hooks/queries.ts291export function useUpdateInstanceMutation(pluginId: string) {CODE
LOWdashboard/src/hooks/queries.ts302export function useDeleteInstanceMutation(pluginId: string) {CODE
LOWsdk/python/tests/test_sdk.py16 def test_requires_base_url_and_api_key(self):CODE
LOWsdk/python/tests/test_sdk.py22 def test_sends_api_key_header(self):CODE
LOWsdk/python/tests/test_sdk.py29 def test_default_headers_cannot_override_api_key(self):CODE
LOWsdk/python/tests/test_sdk.py53 def test_path_segments_are_encoded(self):CODE
LOWsdk/python/tests/test_sdk.py61 def test_raw_request_escape_hatch(self):CODE
LOWsdk/python/tests/test_sdk.py67 def test_treats_unfollowed_redirect_as_error(self):CODE
LOWsdk/python/tests/test_sdk.py111 def test_exposes_all_resources(self):CODE
LOWsdk/python/tests/test_sdk.py121 def test_send_text_uses_send_text_path(self):CODE
LOWsdk/python/tests/test_sdk.py503 def test_client_exposes_all_resources(self):CODE
LOWsdk/python/tests/test_sdk.py513 def test_search_minimal_required_q(self):CODE
LOWsdk/python/tests/test_sdk.py522 def test_search_forwards_all_optional_filters(self):CODE
LOWsdk/python/tests/test_sdk.py87 def test_strips_trailing_slash(self):CODE
LOWsdk/python/tests/test_sdk.py93 def test_query_params_skip_none(self):CODE
LOWsdk/python/tests/test_sdk.py140 def test_send_location_contact_template(self):CODE
LOWsdk/python/tests/test_sdk.py155 def test_send_template_accepts_template_name(self):CODE
LOWsdk/python/tests/test_sdk.py160 def test_list_returns_messages_total_wrapper(self):CODE
LOWsdk/python/tests/test_sdk.py182 def test_history_and_reactions_path(self):CODE
LOWsdk/python/tests/test_sdk.py193 def test_history_boolean_query_serializes_lowercase(self):CODE
LOWsdk/python/tests/test_sdk.py201 def test_bulk_and_batch_status(self):CODE
LOWsdk/python/tests/test_sdk.py303 def test_subject_description_invite(self):CODE
LOWsdk/python/tests/test_sdk.py374 def test_send_image_video_forward_nested_media_body(self):CODE
LOWsdk/python/tests/test_sdk.py551 def test_search_returns_hits_shape(self):CODE
LOWsdk/python/tests/test_sdk.py569 def test_search_none_values_skipped_in_query(self):CODE
LOWsdk/php/tests/MessagesTest.php11 public function testSendTextUsesSendTextPath(): voidCODE
LOWsdk/php/tests/MessagesTest.php23 public function testListReturnsMessagesPageEnvelope(): voidCODE
LOWsdk/php/tests/MessagesTest.php55 public function testMediaSegmentsUseCorrectPaths(string $method, string $segment): voidCODE
LOWsdk/php/tests/MessagesTest.php63 public function testReplyForwardReactDelete(): voidCODE
LOWsdk/php/tests/MessagesTest.php81 public function testHistoryAndReactionsPath(): voidCODE
LOWsdk/php/tests/MessagesTest.php94 public function testSendBulkBatchStatusCancelBatch(): voidCODE
LOWsdk/php/tests/ResourcesTest.php13 public function testSessionLifecyclePaths(): voidCODE
LOWsdk/php/tests/ResourcesTest.php89 public function testGroupSubjectDescriptionInvite(): voidCODE
LOWsdk/php/tests/ResourcesTest.php187 public function testStatusSendForwardsRequiredRecipientsAndNestedMedia(): voidCODE
LOWsdk/php/tests/SearchTest.php11 public function testSearchSendsGetWithQueryParams(): voidCODE
LOWsdk/php/tests/SearchTest.php58 public function testSearchDropsNullOptionalsFromQueryString(): voidCODE
LOWsdk/php/tests/SearchTest.php83 public function testSearchSendsDateAndNumericFilters(): voidCODE
LOWsdk/php/tests/SearchTest.php108 public function testSearchReturnsEmptyArrayOnNullBody(): voidCODE
LOWsdk/php/tests/ClientTest.php15 public function testRequiresBaseUrlAndApiKey(): voidCODE
LOWsdk/php/tests/ClientTest.php37 public function testDefaultHeadersApplledUnderAuth(): voidCODE
LOWsdk/php/tests/ClientTest.php52 public function testPathSegmentsAreEncoded(): voidCODE
LOWsdk/php/tests/ClientTest.php63 public function testRawRequestEscapeHatch(): voidCODE
LOWsdk/php/tests/ClientTest.php72 public function testBaseUrlPathPrefixIsPreserved(): voidCODE
LOWsdk/php/tests/ClientTest.php81 public function testTreatsUnfollowedRedirectAsError(): voidCODE
LOWsdk/php/tests/ClientTest.php136 public function testErrorCarriesStatusAndBody(): voidCODE
LOWsdk/php/tests/ClientTest.php175 public function testConnectionRefusedDoesNotMapToTimeoutException(): voidCODE
LOWsrc/database/data-source.ts51export function buildPostgresDataSourceOptions(env: NodeJS.ProcessEnv = process.env): DataSourceOptions {CODE
LOWsrc/core/plugins/plugin-loader.service.ts113export function dispatchConversationMedia(CODE
LOWsrc/core/plugins/plugin.interfaces.ts338export function warnUnauthenticatedIngressRoutes(CODE
LOWsrc/core/plugins/conversation-send-facade.ts44export function buildConversationSendFacade(deps: ConversationSendDeps) {CODE
LOWsrc/core/plugins/search-provider-registration.util.ts27export function registerPluginSearchProvider(deps: RegisterPluginSearchProviderDeps): void {CODE
LOWsrc/core/plugins/search-provider-registration.util.ts36export function unregisterPluginSearchProvider(registry: SearchProviderRegistry | undefined, pluginId: string): void {CODE
LOWsrc/config/bootstrap-security.ts54export function isValidationErrorDetailEnabled(validationDetailEnv?: string, nodeEnv?: string): boolean {CODE
LOWsrc/config/bootstrap-security.ts67export function isUpgradeInsecureRequestsEnabled(cspEnv?: string, nodeEnv?: string): boolean {CODE
LOWsrc/config/bootstrap-security.ts109export function isApiKeyPepperMissingInProduction(nodeEnv?: string, apiKeyPepper?: string): boolean {CODE
17 more matches not shown…
Magic Placeholder Names12 hits · 80 pts
SeverityFileLineSnippetContext
HIGHREADME.md232 -H "X-API-Key: YOUR_API_KEY" \CODE
HIGHREADME.md241 -H "X-API-Key: YOUR_API_KEY"CODE
HIGHREADME.md245 -H "X-API-Key: YOUR_API_KEY"CODE
HIGHREADME.md253 -H "X-API-Key: YOUR_API_KEY" \CODE
HIGHREADME.md265 -H "X-API-Key: YOUR_API_KEY" \CODE
HIGHREADME.md296 "headers": { "Authorization": "Bearer YOUR_API_KEY" }CODE
HIGHdocs/24-mcp-integration.md191 "headers": { "Authorization": "Bearer YOUR_API_KEY" }CODE
HIGHdocs/README.md135 -H "X-API-Key: your-api-key" \CODE
HIGHdocs/README.md141 -H "X-API-Key: your-api-key"CODE
HIGHdocs/README.md145 -H "X-API-Key: your-api-key"CODE
HIGHdocs/README.md149 -H "X-API-Key: your-api-key" \CODE
HIGHdocs/README.md160 extraHeaders: { 'X-API-Key': 'your-api-key' },CODE
Unused Imports60 hits · 60 pts
SeverityFileLineSnippetContext
LOWsdk/python/tests/conftest.py8CODE
LOWsdk/python/tests/test_sdk.py3CODE
LOWsdk/python/openwa/_http.py10CODE
LOWsdk/python/openwa/_http.py17CODE
LOWsdk/python/openwa/client.py24CODE
LOWsdk/python/openwa/client.py27CODE
LOWsdk/python/openwa/client.py33CODE
LOWsdk/python/openwa/__init__.py23CODE
LOWsdk/python/openwa/__init__.py25CODE
LOWsdk/python/openwa/__init__.py26CODE
LOWsdk/python/openwa/__init__.py26CODE
LOWsdk/python/openwa/__init__.py26CODE
LOWsdk/python/openwa/__init__.py26CODE
LOWsdk/python/openwa/__init__.py26CODE
LOWsdk/python/openwa/__init__.py26CODE
LOWsdk/python/openwa/__init__.py26CODE
LOWsdk/python/openwa/__init__.py26CODE
LOWsdk/python/openwa/__init__.py26CODE
LOWsdk/python/openwa/types.py11CODE
LOWsdk/python/openwa/errors.py11CODE
LOWsdk/python/openwa/resources/catalog.py10CODE
LOWsdk/python/openwa/resources/catalog.py26CODE
LOWsdk/python/openwa/resources/labels.py8CODE
LOWsdk/python/openwa/resources/labels.py16CODE
LOWsdk/python/openwa/resources/sessions.py6CODE
LOWsdk/python/openwa/resources/sessions.py21CODE
LOWsdk/python/openwa/resources/contacts.py6CODE
LOWsdk/python/openwa/resources/contacts.py20CODE
LOWsdk/python/openwa/resources/health.py6CODE
LOWsdk/python/openwa/resources/health.py13CODE
LOWsdk/python/openwa/resources/__init__.py7CODE
LOWsdk/python/openwa/resources/__init__.py9CODE
LOWsdk/python/openwa/resources/__init__.py10CODE
LOWsdk/python/openwa/resources/__init__.py11CODE
LOWsdk/python/openwa/resources/__init__.py12CODE
LOWsdk/python/openwa/resources/__init__.py13CODE
LOWsdk/python/openwa/resources/__init__.py14CODE
LOWsdk/python/openwa/resources/__init__.py15CODE
LOWsdk/python/openwa/resources/__init__.py16CODE
LOWsdk/python/openwa/resources/__init__.py17CODE
LOWsdk/python/openwa/resources/__init__.py18CODE
LOWsdk/python/openwa/resources/__init__.py19CODE
LOWsdk/python/openwa/resources/__init__.py20CODE
LOWsdk/python/openwa/resources/__init__.py21CODE
LOWsdk/python/openwa/resources/groups.py6CODE
LOWsdk/python/openwa/resources/groups.py20CODE
LOWsdk/python/openwa/resources/templates.py6CODE
LOWsdk/python/openwa/resources/templates.py14CODE
LOWsdk/python/openwa/resources/messages.py7CODE
LOWsdk/python/openwa/resources/messages.py35CODE
LOWsdk/python/openwa/resources/search.py8CODE
LOWsdk/python/openwa/resources/search.py15CODE
LOWsdk/python/openwa/resources/chats.py7CODE
LOWsdk/python/openwa/resources/chats.py21CODE
LOWsdk/python/openwa/resources/channels.py7CODE
LOWsdk/python/openwa/resources/channels.py15CODE
LOWsdk/python/openwa/resources/webhooks.py6CODE
LOWsdk/python/openwa/resources/webhooks.py14CODE
LOWsdk/python/openwa/resources/status.py7CODE
LOWsdk/python/openwa/resources/status.py15CODE
Structural Annotation Overuse24 hits · 52 pts
SeverityFileLineSnippetContext
LOWdocs/14-migration-guide.md96# Step 1: Export all Data DB tablesCOMMENT
LOWdocs/14-migration-guide.md100# Step 2: Change database configuration in .env or DashboardCOMMENT
LOWdocs/14-migration-guide.md105# Step 3: Restart with new configurationCOMMENT
LOWdocs/14-migration-guide.md108# Step 4: Import data to new databaseCOMMENT
LOWdocs/14-migration-guide.md151# Step 1: Check current storage file countCOMMENT
LOWdocs/14-migration-guide.md156# Step 2: Export all files as tar.gzCOMMENT
LOWdocs/14-migration-guide.md163# Step 3: Change storage configurationCOMMENT
LOWdocs/14-migration-guide.md168# Step 4: Restart with new configurationCOMMENT
LOWdocs/14-migration-guide.md171# Step 5: Import files to new storageCOMMENT
LOWdocs/14-migration-guide.md218# Step 1: Check queue status via Bull BoardCOMMENT
LOWdocs/14-migration-guide.md221# Step 2: Wait until MESSAGE and WEBHOOK queues are emptyCOMMENT
LOWdocs/14-migration-guide.md227# Step 3: Change Redis configurationCOMMENT
LOWdocs/14-migration-guide.md230# Step 4: Restart applicationCOMMENT
LOWdocs/14-migration-guide.md428# Step 1: Stop OpenWACOMMENT
LOWdocs/14-migration-guide.md431# Step 2: Backup current dataCOMMENT
LOWdocs/14-migration-guide.md435# Step 3: Setup PostgreSQL (if not exists)COMMENT
LOWdocs/14-migration-guide.md438# Step 4: Run migration scriptCOMMENT
LOWdocs/14-migration-guide.md441# Step 5: Update environmentCOMMENT
LOWdocs/14-migration-guide.md445# Step 6: Verify migrationCOMMENT
LOWdocs/14-migration-guide.md449# Step 7: Start with PostgreSQLCOMMENT
LOWdocs/14-migration-guide.md452# Step 8: Verify functionalityCOMMENT
LOWdashboard/src/utils/messageFormatter.ts40 // Step 1: peel off code segments, emit nodes between them.COMMENT
LOWdashboard/src/hooks/useChatScrollPosition.test.ts47 // Step 1: switch A → B, B loading → save A, no restore.COMMENT
LOWdashboard/src/hooks/useChatScrollPosition.test.ts52 // Step 2: same chat B, transitions to loaded → no save (prev === next), restore B to bottom (first visit).COMMENT
Fake / Example Data33 hits · 34 pts
SeverityFileLineSnippetContext
LOWopenapi.json5680 "example": "John Doe",CODE
LOWdocs/06-api-specification.md1104{ "chatId": "628123456789@c.us", "contactName": "John Doe", "contactNumber": "628987654321" }CODE
LOWdocs/06-api-specification.md1396 "name": "Jane Doe",CODE
LOWdocs/06-api-specification.md1432 "name": "Jane Doe",CODE
LOWdocs/06-api-specification.md1491 "name": "Jane Doe",CODE
LOWdocs/07-api-collection.md320 -d '{ "chatId": "628123456789@c.us", "contactName": "John Doe", "contactNumber": "628987654321" }'CODE
LOWdashboard/src/i18n/locales/zh-CN.json219 "placeholder": "例如:marketing-bot",CODE
LOWdashboard/src/i18n/locales/zh-CN.json842 "placeholder": "搜索消息…",CODE
LOWdashboard/src/i18n/locales/en.json219 "placeholder": "e.g., marketing-bot",CODE
LOWdashboard/src/i18n/locales/en.json842 "placeholder": "Search messages…",CODE
LOWdashboard/src/i18n/locales/zh-HK.json219 "placeholder": "例如:marketing-bot",CODE
LOWdashboard/src/i18n/locales/zh-HK.json842 "placeholder": "搜尋訊息…",CODE
LOWdashboard/src/i18n/locales/it.json219 "placeholder": "es., marketing-bot",CODE
LOWdashboard/src/i18n/locales/it.json842 "placeholder": "Cerca messaggi…",CODE
LOWdashboard/src/i18n/locales/fr.json219 "placeholder": "ex : marketing-bot",CODE
LOWdashboard/src/i18n/locales/fr.json842 "placeholder": "Rechercher des messages…",CODE
LOWdashboard/src/i18n/locales/pt-BR.json219 "placeholder": "ex.: bot-marketing",CODE
LOWdashboard/src/i18n/locales/pt-BR.json842 "placeholder": "Pesquisar mensagens…",CODE
LOWdashboard/src/i18n/locales/ko.json219 "placeholder": "예: marketing-bot",CODE
LOWdashboard/src/i18n/locales/ko.json842 "placeholder": "메시지 검색…",CODE
LOWdashboard/src/i18n/locales/he.json219 "placeholder": "לדוגמה: marketing-bot",CODE
LOWdashboard/src/i18n/locales/he.json843 "placeholder": "חיפוש הודעות…",CODE
LOWdashboard/src/i18n/locales/te.json219 "placeholder": "ఉదాహరణకు, marketing-bot",CODE
LOWdashboard/src/i18n/locales/te.json842 "placeholder": "సందేశాలను శోధించండి…",CODE
LOWdashboard/src/i18n/locales/es.json219 "placeholder": "ej., bot-marketing",CODE
LOWdashboard/src/i18n/locales/es.json842 "placeholder": "Buscar mensajes…",CODE
LOWdashboard/src/i18n/locales/ar.json219 "placeholder": "مثال: marketing-bot",CODE
LOWdashboard/src/i18n/locales/ar.json846 "placeholder": "ابحث في الرسائل…",CODE
LOWsrc/modules/message/message.service.spec.ts730 contactName: 'John Doe',CODE
LOWsrc/modules/message/message.service.spec.ts737 expect.objectContaining({ name: 'John Doe', number: '+628123456789' }),CODE
LOWsrc/modules/session/dto/session-response.dto.ts18 @ApiPropertyOptional({ type: String, example: 'John Doe', nullable: true })CODE
LOWsrc/engine/adapters/baileys.adapter.spec.ts537 await adapter.sendContactMessage('628111@s.whatsapp.net', { name: 'John Doe', number: '+1 234-567' });CODE
LOWsrc/engine/adapters/baileys.adapter.spec.ts542 expect(call.contacts.displayName).toBe('John Doe');CODE
Over-Commented Block31 hits · 31 pts
SeverityFileLineSnippetContext
LOWdocker-compose.dev.yml1# OpenWA - Local smoke / quick-start composeCOMMENT
LOWdocker-entrypoint.sh1#!/bin/shCOMMENT
LOWdocker-compose.yml101 # NOTE: if you run the built-in Postgres MANUALLY (`docker compose --profile postgres up`) insteadCOMMENT
LOWdocker-compose.yml121 # Engine launch options (session data path, headless, browser args). Forwarded EMPTY by defaultCOMMENT
LOWtest/mcp-auth.e2e-spec.ts161 // Triggering it in e2e needs > 60 same-key tool calls in 60s, making theCOMMENT
LOWdocs/10-devops-infrastructure.md441PORT=2785COMMENT
LOWdocs/10-devops-infrastructure.md461# ===========================================COMMENT
LOWdocs/10-devops-infrastructure.md481COMMENT
LOWdashboard/src/pages/Chats.tsx461 };COMMENT
LOWdashboard/src/services/api.ts1// API Service Layer for OpenWA DashboardCOMMENT
LOWscripts/export-openapi.ts1// Generates the committed OpenAPI snapshot by bootstrapping the Nest app WITHOUT listening,COMMENT
LOWscripts/restore.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/pg-uuid-smoke.js1/* eslint-disable */COMMENT
LOWscripts/backup.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/postgres-init-schema.sh1#!/bin/bashCOMMENT
LOW.github/workflows/split-php-sdk.yml1name: Split PHP SDKCOMMENT
LOWsrc/main.ts101 // Let Nest own every shutdown signal EXCEPT SIGTERM/SIGINT — those we route through the boundedCOMMENT
LOWsrc/core/plugins/plugin-loader.service.ts841 // identically. The worker can only ask; the host is the gatekeeper.COMMENT
LOWsrc/core/plugins/plugin.interfaces.ts61 // Optional sandboxed-iframe config editor. `entry` is a plugin-relative path to a self-containedCOMMENT
LOWsrc/core/plugins/plugin.interfaces.ts81COMMENT
LOWsrc/core/plugins/sandbox/plugin-worker-host.ts61 // this in-flight set so a capability that re-fires the same event is short-circuited (HookManager'sCOMMENT
LOWsrc/core/plugins/sandbox/plugin-worker-host.ts81 private readonly onWebhookSubscribe?: (route: string) => void,COMMENT
LOWsrc/config/configuration.ts61 synchronize: process.env.MAIN_DATABASE_SYNCHRONIZE !== 'false',COMMENT
LOWsrc/modules/webhook/webhook.service.ts301 w => (w.events.includes(event) || w.events.includes('*')) && evaluateFilters(w.filters, event, data, resolveLid),COMMENT
LOWsrc/modules/queue/processors/ingress.processor.ts21 // serializes per instance instead (see orderingKeyFor in ../../integration/ordering-lock).COMMENT
LOWsrc/modules/session/session.service.ts121 // Bounded cache for inline @lid -> phone resolution (#263), keyed `${sessionId}:${lid}`. CachesCOMMENT
LOWsrc/modules/session/session.service.ts821 });COMMENT
LOWsrc/modules/session/session.service.ts1181 ]);COMMENT
LOWsrc/engine/adapters/baileys.adapter.ts201 // Without it, every session read/write hits disk directly with no protection against aCOMMENT
LOWsrc/engine/adapters/baileys.adapter.ts241 const sock = b.default({COMMENT
LOWsrc/engine/interfaces/whatsapp-engine.interface.ts1// WhatsApp Engine Interface - Abstract layer for WA enginesCOMMENT
Cross-Language Confusion1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHsdk/python/openwa/types.py717# provider returns waMessageId/snippet as "" when absent (always str, never null);COMMENT
Verbosity Indicators3 hits · 6 pts
SeverityFileLineSnippetContext
LOWdashboard/src/utils/messageFormatter.ts40 // Step 1: peel off code segments, emit nodes between them.COMMENT
LOWdashboard/src/hooks/useChatScrollPosition.test.ts47 // Step 1: switch A → B, B loading → save A, no restore.COMMENT
LOWdashboard/src/hooks/useChatScrollPosition.test.ts52 // Step 2: same chat B, transitions to loaded → no save (prev === next), restore B to bottom (first visit).COMMENT
Modern AI Meta-Vocabulary2 hits · 5 pts
SeverityFileLineSnippetContext
MEDIUMCHANGELOG.md190- **Dashboard primary buttons were invisible until hover in light mode.** A leftover Vite template rule — `:root:not([daCODE
MEDIUMdocker-compose.yml294 # Pin explicit volume names so the compose path and the Docker-API orchestration path (which usesCOMMENT
Example Usage Blocks2 hits · 3 pts
SeverityFileLineSnippetContext
LOWscripts/restore.sh8# Usage:COMMENT
LOWscripts/backup.sh14# Usage:COMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMsrc/engine/adapters/baileys.adapter.ts1273 // (Baileys integrity-checks content against the declared size, so this is a robust bound).COMMENT
Modern Structural Boilerplate2 hits · 2 pts
SeverityFileLineSnippetContext
LOWsdk/python/openwa/__init__.py38__all__ = [CODE
LOWsdk/python/openwa/resources/__init__.py23__all__ = [CODE
Excessive Try-Catch Wrapping1 hit · 1 pts
SeverityFileLineSnippetContext
LOWsdk/python/openwa/client.py71 except Exception:CODE