pabal-web-mcp 1.4.1 → 1.4.3
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 +69 -38
- 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
|
|
|
@@ -1428,9 +1434,9 @@ function generateKeywordLocalizationPrompt(args) {
|
|
|
1428
1434
|
`;
|
|
1429
1435
|
prompt += `1. Use SAVED keyword research (see per-locale data below). Do NOT invent keywords.
|
|
1430
1436
|
`;
|
|
1431
|
-
prompt += `2. Replace keywords
|
|
1437
|
+
prompt += `2. **Replace ONLY keywords with optimized keywords** - keep ALL existing content, structure, tone, and context unchanged. Only swap keywords for better ASO keywords.
|
|
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
|
|
|
@@ -1514,18 +1520,21 @@ ${researchSections.join(
|
|
|
1514
1520
|
});
|
|
1515
1521
|
prompt += `## Keyword Replacement Strategy
|
|
1516
1522
|
|
|
1523
|
+
`;
|
|
1524
|
+
prompt += `**CRITICAL: Keep ALL existing content unchanged. Only replace keywords with optimized keywords.**
|
|
1525
|
+
|
|
1517
1526
|
`;
|
|
1518
1527
|
prompt += `For EACH locale:
|
|
1519
1528
|
`;
|
|
1520
1529
|
prompt += `- Priority: Keep iOS-sourced keywords first; add Android keywords only if there is remaining space after iOS keywords fit within field limits.
|
|
1521
1530
|
`;
|
|
1522
|
-
prompt += `1. Take the
|
|
1531
|
+
prompt += `1. Take the EXISTING translated content (below) - **DO NOT change the content itself**
|
|
1523
1532
|
`;
|
|
1524
|
-
prompt += `2. Replace \`aso.keywords\` array with
|
|
1533
|
+
prompt += `2. Replace \`aso.keywords\` array with optimized keywords (keep same count/structure)
|
|
1525
1534
|
`;
|
|
1526
1535
|
prompt += `3. **TITLE FORMAT**: \`aso.title\` must follow **"App Name: Primary Keyword"** format:
|
|
1527
1536
|
`;
|
|
1528
|
-
prompt += ` - App name: **ALWAYS in English** (e.g., "Aurora EOS", "Timeline", "Recaply
|
|
1537
|
+
prompt += ` - App name: **ALWAYS in English** (e.g., "Aurora EOS", "Timeline", "Recaply)
|
|
1529
1538
|
`;
|
|
1530
1539
|
prompt += ` - Primary keyword: **In target language** (e.g., "\uC624\uB85C\uB77C \uC608\uBCF4" for Korean, "\u30AA\u30FC\u30ED\u30E9\u4E88\u5831" for Japanese)
|
|
1531
1540
|
`;
|
|
@@ -1535,49 +1544,55 @@ ${researchSections.join(
|
|
|
1535
1544
|
`;
|
|
1536
1545
|
prompt += ` - **Do NOT translate/rename the app name**; keep the original English app name across all locales.
|
|
1537
1546
|
`;
|
|
1538
|
-
prompt += `
|
|
1547
|
+
prompt += ` - **Only replace the keyword part** - keep the app name and format structure unchanged
|
|
1548
|
+
`;
|
|
1549
|
+
prompt += `4. Deduplicate keywords: final \`aso.keywords\` must be unique and should not repeat title/subtitle terms verbatim
|
|
1539
1550
|
`;
|
|
1540
|
-
prompt += `
|
|
1551
|
+
prompt += `5. **Replace keywords in existing sentences** - swap ONLY the keywords, keep everything else:
|
|
1541
1552
|
`;
|
|
1542
|
-
prompt += ` -
|
|
1553
|
+
prompt += ` - **Keep original sentence structure exactly as is**
|
|
1543
1554
|
`;
|
|
1544
|
-
prompt += ` -
|
|
1555
|
+
prompt += ` - **Keep original tone and messaging unchanged**
|
|
1545
1556
|
`;
|
|
1546
|
-
prompt += ` -
|
|
1557
|
+
prompt += ` - **Keep original context and flow unchanged**
|
|
1558
|
+
`;
|
|
1559
|
+
prompt += ` - **Only swap individual keywords** for better ASO keywords
|
|
1560
|
+
`;
|
|
1561
|
+
prompt += ` - Maintain character limits
|
|
1547
1562
|
|
|
1548
1563
|
`;
|
|
1549
|
-
prompt += `
|
|
1564
|
+
prompt += `6. **CRITICAL**: Update keywords in ALL \`landing\` sections (replace keywords only, keep content structure):
|
|
1550
1565
|
`;
|
|
1551
|
-
prompt += ` - \`landing.hero.title\` and \`landing.hero.description\`:
|
|
1566
|
+
prompt += ` - \`landing.hero.title\` and \`landing.hero.description\`: Replace keywords only, keep existing text structure
|
|
1552
1567
|
`;
|
|
1553
|
-
prompt += ` - \`landing.screenshots.images[].title\`:
|
|
1568
|
+
prompt += ` - \`landing.screenshots.images[].title\`: Replace keywords in existing titles, keep structure
|
|
1554
1569
|
`;
|
|
1555
|
-
prompt += ` - \`landing.screenshots.images[].description\`:
|
|
1570
|
+
prompt += ` - \`landing.screenshots.images[].description\`: Replace keywords in existing descriptions, keep structure
|
|
1556
1571
|
`;
|
|
1557
|
-
prompt += ` - \`landing.features.items[].title\`:
|
|
1572
|
+
prompt += ` - \`landing.features.items[].title\`: Replace keywords in existing titles, keep structure
|
|
1558
1573
|
`;
|
|
1559
|
-
prompt += ` - \`landing.features.items[].body\`:
|
|
1574
|
+
prompt += ` - \`landing.features.items[].body\`: Replace keywords in existing descriptions, keep structure
|
|
1560
1575
|
`;
|
|
1561
|
-
prompt += ` - \`landing.reviews.title\` and \`landing.reviews.description\`:
|
|
1576
|
+
prompt += ` - \`landing.reviews.title\` and \`landing.reviews.description\`: Replace keywords if applicable, keep structure
|
|
1562
1577
|
`;
|
|
1563
|
-
prompt += ` - \`landing.cta.headline\` and \`landing.cta.description\`:
|
|
1578
|
+
prompt += ` - \`landing.cta.headline\` and \`landing.cta.description\`: Replace keywords if applicable, keep structure
|
|
1564
1579
|
`;
|
|
1565
|
-
prompt += ` - Maintain original context and
|
|
1580
|
+
prompt += ` - **Maintain ALL original context, meaning, and structure**
|
|
1566
1581
|
`;
|
|
1567
|
-
prompt += ` - Use
|
|
1582
|
+
prompt += ` - Use optimized keywords that users actually search for
|
|
1568
1583
|
`;
|
|
1569
|
-
prompt += ` - **DO NOT
|
|
1584
|
+
prompt += ` - **DO NOT rewrite or restructure content** - only replace keywords
|
|
1570
1585
|
|
|
1571
1586
|
`;
|
|
1572
|
-
prompt += `**Example
|
|
1587
|
+
prompt += `**Example** (keyword replacement only, content unchanged):
|
|
1573
1588
|
`;
|
|
1574
1589
|
prompt += `- Original: "Track aurora with real-time forecasts"
|
|
1575
1590
|
`;
|
|
1576
|
-
prompt += `-
|
|
1591
|
+
prompt += `- Optimized keywords: \uC624\uB85C\uB77C, \uC608\uBCF4, \uC2E4\uC2DC\uAC04
|
|
1577
1592
|
`;
|
|
1578
|
-
prompt += `- Result: "\uC2E4\uC2DC\uAC04 \uC608\uBCF4
|
|
1593
|
+
prompt += `- Result: "Track \uC624\uB85C\uB77C with \uC2E4\uC2DC\uAC04 \uC608\uBCF4" (keywords replaced, structure kept)
|
|
1579
1594
|
`;
|
|
1580
|
-
prompt += ` (
|
|
1595
|
+
prompt += ` OR: "\uC2E4\uC2DC\uAC04 \uC608\uBCF4\uB85C \uC624\uB85C\uB77C \uCD94\uC801" (if natural keyword placement requires minor word order, but keep meaning identical)
|
|
1581
1596
|
|
|
1582
1597
|
`;
|
|
1583
1598
|
prompt += `## Current Translated Locales (This Batch)
|
|
@@ -1598,7 +1613,7 @@ ${researchSections.join(
|
|
|
1598
1613
|
`;
|
|
1599
1614
|
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)
|
|
1600
1615
|
`;
|
|
1601
|
-
prompt += `2. Replace keywords in ALL fields (
|
|
1616
|
+
prompt += `2. **Replace keywords ONLY** in ALL fields (keep existing content structure unchanged):
|
|
1602
1617
|
`;
|
|
1603
1618
|
prompt += ` - \`aso.keywords\` array
|
|
1604
1619
|
`;
|
|
@@ -1614,11 +1629,11 @@ ${researchSections.join(
|
|
|
1614
1629
|
`;
|
|
1615
1630
|
prompt += ` - \`landing.reviews.title\` and \`landing.reviews.description\`
|
|
1616
1631
|
`;
|
|
1617
|
-
prompt += ` -
|
|
1632
|
+
prompt += ` - **For each field: Replace keywords only, keep existing content structure and meaning unchanged**
|
|
1618
1633
|
`;
|
|
1619
1634
|
prompt += `3. **CRITICAL**: Ensure ALL landing fields are translated (not English)
|
|
1620
1635
|
`;
|
|
1621
|
-
prompt += `4. Validate limits
|
|
1636
|
+
prompt += `4. Validate limits + store rules (${FIELD_LIMITS_DOC_PATH2}) + keyword duplication (unique list; avoid repeating title/subtitle terms verbatim)
|
|
1622
1637
|
`;
|
|
1623
1638
|
prompt += `5. **SAVE the updated JSON to file** using save-locale-file tool
|
|
1624
1639
|
`;
|
|
@@ -1661,28 +1676,44 @@ ${researchSections.join(
|
|
|
1661
1676
|
prompt += ` - Show final 10 keywords **IN TARGET LANGUAGE** with tier assignments - DO NOT show English keywords
|
|
1662
1677
|
|
|
1663
1678
|
`;
|
|
1664
|
-
prompt += `**2. Updated JSON** (complete locale structure with keyword replacements)
|
|
1679
|
+
prompt += `**2. Updated JSON** (complete locale structure with keyword replacements only)
|
|
1680
|
+
`;
|
|
1681
|
+
prompt += ` - **CRITICAL**: Keep ALL existing content structure and meaning unchanged - only replace keywords
|
|
1665
1682
|
`;
|
|
1666
|
-
prompt += ` - MUST include complete \`aso\` object
|
|
1683
|
+
prompt += ` - MUST include complete \`aso\` object (keywords replaced, content structure kept)
|
|
1667
1684
|
`;
|
|
1668
|
-
prompt += ` - MUST include complete \`landing\` object with ALL sections:
|
|
1685
|
+
prompt += ` - MUST include complete \`landing\` object with ALL sections (keywords replaced, content structure kept):
|
|
1669
1686
|
`;
|
|
1670
|
-
prompt += ` * hero (title, description, titleHighlight)
|
|
1687
|
+
prompt += ` * hero (title, description, titleHighlight) - replace keywords only
|
|
1671
1688
|
`;
|
|
1672
|
-
prompt += ` * screenshots.images[] (all items with
|
|
1689
|
+
prompt += ` * screenshots.images[] (all items with keywords replaced in existing titles/descriptions)
|
|
1673
1690
|
`;
|
|
1674
|
-
prompt += ` * features.items[] (all items with
|
|
1691
|
+
prompt += ` * features.items[] (all items with keywords replaced in existing titles/bodies)
|
|
1675
1692
|
`;
|
|
1676
|
-
prompt += ` * reviews (title, description, icons, rating, testimonials)
|
|
1693
|
+
prompt += ` * reviews (title, description, icons, rating, testimonials) - replace keywords if applicable
|
|
1677
1694
|
`;
|
|
1678
|
-
prompt += ` * cta (headline, icons, rating, description)
|
|
1695
|
+
prompt += ` * cta (headline, icons, rating, description) - replace keywords if applicable
|
|
1679
1696
|
`;
|
|
1680
1697
|
prompt += ` - **NO English text in landing sections** - everything must be translated
|
|
1698
|
+
`;
|
|
1699
|
+
prompt += ` - **DO NOT rewrite or restructure content** - only swap keywords for optimized keywords
|
|
1681
1700
|
|
|
1682
1701
|
`;
|
|
1683
1702
|
prompt += `**3. Validation**
|
|
1684
1703
|
`;
|
|
1685
|
-
prompt += ` -
|
|
1704
|
+
prompt += ` - title: X/30 \u2713/\u2717
|
|
1705
|
+
`;
|
|
1706
|
+
prompt += ` - subtitle: X/30 \u2713/\u2717
|
|
1707
|
+
`;
|
|
1708
|
+
prompt += ` - shortDescription: X/80 \u2713/\u2717
|
|
1709
|
+
`;
|
|
1710
|
+
prompt += ` - keywords: X/100 \u2713/\u2717 (deduped \u2713/\u2717; not repeating title/subtitle)
|
|
1711
|
+
`;
|
|
1712
|
+
prompt += ` - intro: X/300 \u2713/\u2717
|
|
1713
|
+
`;
|
|
1714
|
+
prompt += ` - outro: X/200 \u2713/\u2717
|
|
1715
|
+
`;
|
|
1716
|
+
prompt += ` - Store rules (${FIELD_LIMITS_DOC_PATH2}): \u2713/\u2717
|
|
1686
1717
|
|
|
1687
1718
|
`;
|
|
1688
1719
|
prompt += `**4. File Save Confirmation**
|