pabal-web-mcp 1.4.0 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/mcp-server.js +52 -25
- package/package.json +1 -1
package/dist/bin/mcp-server.js
CHANGED
|
@@ -1318,6 +1318,10 @@ ${researchSections.join("\n")}
|
|
|
1318
1318
|
|
|
1319
1319
|
`;
|
|
1320
1320
|
prompt += `Check all limits: title \u226430, subtitle \u226430, shortDescription \u226480, keywords \u2264100, intro \u2264300, outro \u2264200
|
|
1321
|
+
`;
|
|
1322
|
+
prompt += `- Remove keyword duplicates (unique list; avoid repeating title/subtitle terms verbatim)
|
|
1323
|
+
`;
|
|
1324
|
+
prompt += `- Ensure App Store/Play Store rules from ${FIELD_LIMITS_DOC_PATH2} are satisfied (no disallowed characters/formatting)
|
|
1321
1325
|
|
|
1322
1326
|
`;
|
|
1323
1327
|
prompt += `## Current Data
|
|
@@ -1361,11 +1365,13 @@ ${researchSections.join("\n")}
|
|
|
1361
1365
|
`;
|
|
1362
1366
|
prompt += ` - shortDescription: X/80 \u2713/\u2717
|
|
1363
1367
|
`;
|
|
1364
|
-
prompt += ` - keywords: X/100 \u2713/\u2717
|
|
1368
|
+
prompt += ` - keywords: X/100 \u2713/\u2717 (deduped \u2713/\u2717)
|
|
1365
1369
|
`;
|
|
1366
1370
|
prompt += ` - intro: X/300 \u2713/\u2717
|
|
1367
1371
|
`;
|
|
1368
1372
|
prompt += ` - outro: X/200 \u2713/\u2717
|
|
1373
|
+
`;
|
|
1374
|
+
prompt += ` - Store rules (${FIELD_LIMITS_DOC_PATH2}): \u2713/\u2717
|
|
1369
1375
|
`;
|
|
1370
1376
|
prompt += ` - Density: X% (2.5-3%) \u2713/\u2717
|
|
1371
1377
|
|
|
@@ -1430,7 +1436,7 @@ function generateKeywordLocalizationPrompt(args) {
|
|
|
1430
1436
|
`;
|
|
1431
1437
|
prompt += `2. Replace keywords in translated content (preserve structure/tone/context)
|
|
1432
1438
|
`;
|
|
1433
|
-
prompt += `3. Validate character limits
|
|
1439
|
+
prompt += `3. Validate character limits + store rules (${FIELD_LIMITS_DOC_PATH2}) + keyword duplication
|
|
1434
1440
|
`;
|
|
1435
1441
|
prompt += `4. **SAVE the updated JSON to file** using the save-locale-file tool (only if file exists)
|
|
1436
1442
|
|
|
@@ -1453,7 +1459,7 @@ ${optimizedPrimary}
|
|
|
1453
1459
|
|
|
1454
1460
|
`;
|
|
1455
1461
|
if (hasPrimaryResearch) {
|
|
1456
|
-
prompt += `**\u{1F4DA} ENGLISH (${primaryLocale}) Keywords - Use as fallback for locales without research:**
|
|
1462
|
+
prompt += `**\u{1F4DA} ENGLISH (${primaryLocale}) Keywords - Use as fallback for locales without research (MUST TRANSLATE to target language):**
|
|
1457
1463
|
${primaryResearchSections.join("\n")}
|
|
1458
1464
|
|
|
1459
1465
|
`;
|
|
@@ -1472,35 +1478,42 @@ ${researchSections.join(
|
|
|
1472
1478
|
|
|
1473
1479
|
`;
|
|
1474
1480
|
} else if (hasPrimaryResearch) {
|
|
1475
|
-
prompt += `### Locale ${loc}: \u26A0\uFE0F No saved research -
|
|
1481
|
+
prompt += `### Locale ${loc}: \u26A0\uFE0F No saved research - TRANSLATE ENGLISH KEYWORDS TO ${loc.toUpperCase()}
|
|
1476
1482
|
`;
|
|
1477
1483
|
prompt += `No keyword research found at ${researchDir}.
|
|
1478
1484
|
`;
|
|
1479
|
-
prompt += `**FALLBACK:**
|
|
1485
|
+
prompt += `**CRITICAL FALLBACK STRATEGY:** You MUST translate English keywords from primary locale (${primaryLocale}) into ${loc}. DO NOT use English keywords directly.
|
|
1486
|
+
|
|
1487
|
+
`;
|
|
1488
|
+
prompt += `**Translation Steps:**
|
|
1480
1489
|
`;
|
|
1481
|
-
prompt += `1. Take the Tier 1/2/3 keywords from English research above
|
|
1490
|
+
prompt += `1. Take the Tier 1/2/3 keywords from English research above (${primaryLocale})
|
|
1482
1491
|
`;
|
|
1483
|
-
prompt += `2.
|
|
1492
|
+
prompt += `2. **TRANSLATE each English keyword into ${loc}** - use natural, native expressions (NOT literal word-for-word translation)
|
|
1484
1493
|
`;
|
|
1485
|
-
prompt += `3.
|
|
1494
|
+
prompt += `3. Ensure translated keywords are what ${loc} users would actually search for in their language
|
|
1486
1495
|
`;
|
|
1487
|
-
prompt += `4. Verify translations are culturally appropriate
|
|
1496
|
+
prompt += `4. Verify translations are culturally appropriate and contextually relevant
|
|
1488
1497
|
`;
|
|
1489
|
-
prompt += `5. Apply
|
|
1498
|
+
prompt += `5. Apply the **TRANSLATED** keywords (in ${loc} language) following the same tier strategy
|
|
1499
|
+
`;
|
|
1500
|
+
prompt += `6. **DO NOT use English keywords in ${loc} locale** - all keywords must be in ${loc} language
|
|
1490
1501
|
|
|
1491
1502
|
`;
|
|
1492
1503
|
} else {
|
|
1493
|
-
prompt += `### Locale ${loc}: \u26A0\uFE0F No research -
|
|
1504
|
+
prompt += `### Locale ${loc}: \u26A0\uFE0F No research - TRANSLATE ENGLISH KEYWORDS FROM optimizedPrimary TO ${loc.toUpperCase()}
|
|
1505
|
+
`;
|
|
1506
|
+
prompt += `No keyword research found. Extract keywords from the optimizedPrimary JSON above and **TRANSLATE them to ${loc}**:
|
|
1494
1507
|
`;
|
|
1495
|
-
prompt += `
|
|
1508
|
+
prompt += `1. Extract keywords from \`aso.keywords\` in optimizedPrimary (these are in English/${primaryLocale})
|
|
1496
1509
|
`;
|
|
1497
|
-
prompt += `
|
|
1510
|
+
prompt += `2. **TRANSLATE each English keyword naturally into ${loc}** - use native search expressions
|
|
1498
1511
|
`;
|
|
1499
|
-
prompt += `
|
|
1512
|
+
prompt += `3. Ensure translated keywords match what ${loc} users would actually search for
|
|
1500
1513
|
`;
|
|
1501
|
-
prompt += `
|
|
1514
|
+
prompt += `4. Apply the **TRANSLATED** keywords (in ${loc} language) to all ASO fields
|
|
1502
1515
|
`;
|
|
1503
|
-
prompt += `
|
|
1516
|
+
prompt += `5. **DO NOT use English keywords in ${loc} locale** - all keywords must be translated to ${loc}
|
|
1504
1517
|
|
|
1505
1518
|
`;
|
|
1506
1519
|
}
|
|
@@ -1528,7 +1541,9 @@ ${researchSections.join(
|
|
|
1528
1541
|
`;
|
|
1529
1542
|
prompt += ` - **Do NOT translate/rename the app name**; keep the original English app name across all locales.
|
|
1530
1543
|
`;
|
|
1531
|
-
prompt += `4.
|
|
1544
|
+
prompt += `4. Deduplicate keywords: final \`aso.keywords\` must be unique and should not repeat title/subtitle terms verbatim
|
|
1545
|
+
`;
|
|
1546
|
+
prompt += `5. Swap keywords in sentences while keeping:
|
|
1532
1547
|
`;
|
|
1533
1548
|
prompt += ` - Original sentence structure
|
|
1534
1549
|
`;
|
|
@@ -1539,7 +1554,7 @@ ${researchSections.join(
|
|
|
1539
1554
|
prompt += ` - Character limits
|
|
1540
1555
|
|
|
1541
1556
|
`;
|
|
1542
|
-
prompt += `
|
|
1557
|
+
prompt += `6. **CRITICAL**: Update ALL \`landing\` sections:
|
|
1543
1558
|
`;
|
|
1544
1559
|
prompt += ` - \`landing.hero.title\` and \`landing.hero.description\`: Include keywords naturally
|
|
1545
1560
|
`;
|
|
@@ -1589,9 +1604,9 @@ ${researchSections.join(
|
|
|
1589
1604
|
`;
|
|
1590
1605
|
prompt += `Process EACH locale in this batch sequentially:
|
|
1591
1606
|
`;
|
|
1592
|
-
prompt += `1. Use saved keyword research OR
|
|
1607
|
+
prompt += `1. Use saved keyword research (in target language) OR **TRANSLATE English keywords from primary locale** if missing (see fallback strategy above - MUST translate, not use English directly)
|
|
1593
1608
|
`;
|
|
1594
|
-
prompt += `2. Replace keywords in ALL fields:
|
|
1609
|
+
prompt += `2. Replace keywords in ALL fields (use translated keywords in target language):
|
|
1595
1610
|
`;
|
|
1596
1611
|
prompt += ` - \`aso.keywords\` array
|
|
1597
1612
|
`;
|
|
@@ -1611,7 +1626,7 @@ ${researchSections.join(
|
|
|
1611
1626
|
`;
|
|
1612
1627
|
prompt += `3. **CRITICAL**: Ensure ALL landing fields are translated (not English)
|
|
1613
1628
|
`;
|
|
1614
|
-
prompt += `4. Validate limits
|
|
1629
|
+
prompt += `4. Validate limits + store rules (${FIELD_LIMITS_DOC_PATH2}) + keyword duplication (unique list; avoid repeating title/subtitle terms verbatim)
|
|
1615
1630
|
`;
|
|
1616
1631
|
prompt += `5. **SAVE the updated JSON to file** using save-locale-file tool
|
|
1617
1632
|
`;
|
|
@@ -1647,11 +1662,11 @@ ${researchSections.join(
|
|
|
1647
1662
|
`;
|
|
1648
1663
|
prompt += `**1. Keyword Source**
|
|
1649
1664
|
`;
|
|
1650
|
-
prompt += ` - If saved research exists: Cite file(s) used; list selected top 10 keywords
|
|
1665
|
+
prompt += ` - If saved research exists: Cite file(s) used; list selected top 10 keywords (in target language)
|
|
1651
1666
|
`;
|
|
1652
|
-
prompt += ` - If using fallback: List
|
|
1667
|
+
prompt += ` - If using fallback: List **TRANSLATED** keywords from primary locale (English \u2192 target language) with translation rationale
|
|
1653
1668
|
`;
|
|
1654
|
-
prompt += ` - Show final 10 keywords
|
|
1669
|
+
prompt += ` - Show final 10 keywords **IN TARGET LANGUAGE** with tier assignments - DO NOT show English keywords
|
|
1655
1670
|
|
|
1656
1671
|
`;
|
|
1657
1672
|
prompt += `**2. Updated JSON** (complete locale structure with keyword replacements)
|
|
@@ -1675,7 +1690,19 @@ ${researchSections.join(
|
|
|
1675
1690
|
`;
|
|
1676
1691
|
prompt += `**3. Validation**
|
|
1677
1692
|
`;
|
|
1678
|
-
prompt += ` -
|
|
1693
|
+
prompt += ` - title: X/30 \u2713/\u2717
|
|
1694
|
+
`;
|
|
1695
|
+
prompt += ` - subtitle: X/30 \u2713/\u2717
|
|
1696
|
+
`;
|
|
1697
|
+
prompt += ` - shortDescription: X/80 \u2713/\u2717
|
|
1698
|
+
`;
|
|
1699
|
+
prompt += ` - keywords: X/100 \u2713/\u2717 (deduped \u2713/\u2717; not repeating title/subtitle)
|
|
1700
|
+
`;
|
|
1701
|
+
prompt += ` - intro: X/300 \u2713/\u2717
|
|
1702
|
+
`;
|
|
1703
|
+
prompt += ` - outro: X/200 \u2713/\u2717
|
|
1704
|
+
`;
|
|
1705
|
+
prompt += ` - Store rules (${FIELD_LIMITS_DOC_PATH2}): \u2713/\u2717
|
|
1679
1706
|
|
|
1680
1707
|
`;
|
|
1681
1708
|
prompt += `**4. File Save Confirmation**
|