@mcptoolshop/claude-synergy 1.2.0 → 1.2.1
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/README.es.md +3 -2
- package/README.fr.md +8 -7
- package/README.hi.md +8 -7
- package/README.it.md +3 -2
- package/README.ja.md +8 -7
- package/README.md +3 -2
- package/README.pt-BR.md +3 -2
- package/README.zh.md +3 -2
- package/dist/{chunk-MTW6UZBF.js → chunk-2J45LIMO.js} +3 -1
- package/dist/{chunk-X25ZTSCJ.js → chunk-6MUY565T.js} +18 -13
- package/dist/cli.js +2 -2
- package/dist/{fetch-XS3IETWW.js → fetch-CRO7KXFP.js} +1 -1
- package/dist/mcp-server.js +7 -6
- package/package.json +1 -1
- package/products.yaml +9 -4
package/README.es.md
CHANGED
|
@@ -73,7 +73,7 @@ claude-synergy/
|
|
|
73
73
|
└── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
-
**Datos actualizados (a partir de la versión 1.2.
|
|
76
|
+
**Datos actualizados (a partir de la versión 1.2.1):** 44 productos / 1.171 archivos de lanzamiento / 6.573 cambios / 1.260 entidades / 12 sinergias / 519 pruebas / 13 herramientas MCP / 17 comandos de línea de comandos. (La base de datos se actualizó mediante `sync_now` el 24 de mayo de 2026).
|
|
77
77
|
|
|
78
78
|
---
|
|
79
79
|
|
|
@@ -91,6 +91,7 @@ claude-synergy/
|
|
|
91
91
|
| **4d — Playwright + registro de MCP + configuración YAML** | ✅ implementado | Windsurf a través de Playwright; Smithery + registro oficial de MCP como catálogos de la etapa 4; productos consolidados en `products.yaml`. |
|
|
92
92
|
| **5 — Navegación con ventanas en la versión 1.1 + integración de OpenAI** | ✅ implementado | `hk diff` / `hk breaking`, límites de fecha para todos los comandos de navegación, 3 nuevas herramientas MCP (un total de 11), proveedor de incrustación de OpenAI, dimensión de incrustación configurable, sincronización automática de `claude-code`, analizador genérico `keep-a-changelog`. |
|
|
93
93
|
| **6 — Sincronización desde MCP en la versión 1.2** | ✅ implementado | `sync_status` (frescura por producto, detección de "obsoleto") y `sync_now` (obtención bajo demanda → ingestión → incrustación con vista previa de `dry_run` + bloqueo de concurrencia en el proceso). Elimina la brecha donde un agente podía consultar la base de datos pero no actualizarla. **También corrige:** el error de "limpieza de marcadores" donde `INSERT OR REPLACE INTO products` desencadenaba un DELETE en la clave externa `markers`, restableciendo silenciosamente el cursor `since` de cada producto en cada ingestión (regresión §8.20). |
|
|
94
|
+
| **6.1 — Centralización de marcadores en la versión 1.2.1** | ✅ implementado | Se centralizó la función `writeMarker` en `fetchOne` para que cada extracción exitosa actualice el marcador. Las estrategias que devolvían 0 elementos con fecha dentro del período especificado (especialmente el registro de cambios "raw" de `aider`) nunca escribían un marcador y volvían a descargar `HISTORY.md` en cada sincronización. Se renombró la estrategia `webfetch` no implementada a `manual` para `claude-api` y `anthropic-apps`; ahora, `sync_status` muestra los productos configurados manualmente como "manual" en lugar de "nunca" y los excluye de `stale_only` (regresión §8.21). |
|
|
94
95
|
|
|
95
96
|
Hoja de ruta para la versión 0.8+: se encuentra en [URGENT_FINDINGS.md](URGENT_FINDINGS.md) y en los problemas.
|
|
96
97
|
|
|
@@ -294,7 +295,7 @@ Estrategias de recuperación: `gh-releases | rss | raw-changelog | html-scrape |
|
|
|
294
295
|
El conjunto de pruebas Vitest cubre los niveles de unidad / integración / regresión / pruebas básicas. **[test-spec-3.md](test-spec-3.md) es la autoridad actual** a partir de la versión v0.7.0; [test-spec.md](test-spec.md) (v1) y [test-spec-2.md](test-spec-2.md) (v2) permanecen en el repositorio como registro histórico de la línea de diseño.
|
|
295
296
|
|
|
296
297
|
```bash
|
|
297
|
-
pnpm test # unit + integration + regression (~36s,
|
|
298
|
+
pnpm test # unit + integration + regression (~36s, 519 tests)
|
|
298
299
|
pnpm test:watch # interactive
|
|
299
300
|
pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
|
|
300
301
|
pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
|
package/README.fr.md
CHANGED
|
@@ -73,7 +73,7 @@ claude-synergy/
|
|
|
73
73
|
└── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
-
**Chiffres en direct (version
|
|
76
|
+
**Chiffres en direct (version v1.2.1) :** 44 produits / 1 171 fichiers de publication / 6 573 modifications / 1 260 entités / 12 synergies / 519 tests / 13 outils MCP / 17 commandes CLI. (La base de données a été actualisée via `sync_now` le 24 mai 2026.)
|
|
77
77
|
|
|
78
78
|
---
|
|
79
79
|
|
|
@@ -90,7 +90,8 @@ claude-synergy/
|
|
|
90
90
|
| **4c — ingestion HTML→Markdown avec turndown** | ✅ réalisé | Les corps HTML (Copilot/VS Code/Cursor) génèrent désormais des lignes individuelles pour FTS5 + l'extraction d'entités. |
|
|
91
91
|
| **4d — Playwright + registre MCP + configuration YAML** | ✅ réalisé | Windsurf via Playwright ; Smithery + registre MCP officiel comme catalogues de l'étape 4 ; les produits sont regroupés dans `products.yaml`. |
|
|
92
92
|
| **5 — Navigation avec fenêtrage v1.1 + intégration OpenAI** | ✅ réalisé | `hk diff` / `hk breaking`, limites de date pour toutes les commandes de navigation, 3 nouveaux outils MCP (total de 11), fournisseur d'intégration OpenAI, dimension d'intégration configurable, synchronisation automatique de `claude-code`, analyseur générique `keep-a-changelog`. |
|
|
93
|
-
| **6 — v1.2 synchronisation à partir de MCP** | ✅ réalisé | `sync_status` (fraîcheur par produit, détection
|
|
93
|
+
| **6 — v1.2 synchronisation à partir de MCP** | ✅ réalisé | `sync_status` (état de fraîcheur par produit, détection "jamais/obsolète") et `sync_now` (récupération à la demande → ingestion → intégration avec aperçu `dry_run` + verrouillage de concurrence en cours). Comble le fossé où un agent pouvait interroger la base de données, mais pas la mettre à jour. **Corrige également :** un bug de suppression de marqueur où `INSERT OR REPLACE INTO products` déclenchait une suppression sur la clé étrangère `markers`, remettant silencieusement à zéro le curseur `since` de chaque produit à chaque ingestion (régression §8.20). |
|
|
94
|
+
| **6.1 — v1.2.1 centralisation des marqueurs de récupération** | ✅ réalisé | La fonction `writeMarker` a été centralisée dans `fetchOne` afin que chaque récupération réussie mette à jour le marqueur. Les stratégies qui renvoyaient 0 éléments datés dans la plage spécifiée (notamment `aider` pour le journal des modifications brut) n'écrivaient pas de marqueur et ré-téléchargeaient `HISTORY.md` à chaque synchronisation. La stratégie `webfetch` non implémentée a été renommée en `manual` pour `claude-api` et `anthropic-apps` ; `sync_status` affiche désormais les produits "manuels" comme "manual" au lieu de "jamais" et les exclut de `stale_only` (régression §8.21). |
|
|
94
95
|
|
|
95
96
|
Feuille de route pour la version 0.8+ : consultable dans [URGENT_FINDINGS.md](URGENT_FINDINGS.md) et les problèmes.
|
|
96
97
|
|
|
@@ -254,10 +255,10 @@ Outils exposés :
|
|
|
254
255
|
| `get_changes_since` | **Nouveau.** Modifications dans une fenêtre de temps, regroupées par produit + version. Entrées : `since` (obligatoire), `until?`, `product?`, `kind?`, `limit?`. |
|
|
255
256
|
| `search_breaking_changes` | **Nouveau.** Liste plate des modifications importantes — aucun terme de recherche n'est nécessaire. Entrées : `product?`, `since?`, `until?`, `limit?`. |
|
|
256
257
|
| `compare_versions` | **Nouveau.** Toutes les modifications entre deux versions d'un même produit. Entrées : `product`, `from_version`, `to_version`. |
|
|
257
|
-
| `sync_status` | **v1.2.** Fraîcheur de la synchronisation par produit : horodatage de la dernière récupération, heures écoulées depuis la récupération, nombre de publications ingérées. Paramètres : `product?`, `stale_only?`, `stale_hours?`. Utilisez
|
|
258
|
-
| `sync_now` | **v1.2.** Actualisation à la demande (
|
|
258
|
+
| `sync_status` | **v1.2.** Fraîcheur de la synchronisation par produit : horodatage de la dernière récupération, heures écoulées depuis la récupération, nombre de publications ingérées. Paramètres : `product?`, `stale_only?`, `stale_hours?`. Utilisez cette fonctionnalité AVANT de faire confiance à `latest_releases` pour savoir si la base de données est obsolète. |
|
|
259
|
+
| `sync_now` | **v1.2.** Actualisation à la demande (similaire à `hk sync`). Paramètres : `product?`, `dry_run?`, `include_ingest?`, `include_embed?`, `timeout_ms?`. Renvoie une erreur `InvalidParams` si une autre instance de `sync_now` est déjà en cours. NE COMMET PAS les modifications dans Git. |
|
|
259
260
|
|
|
260
|
-
Les outils
|
|
261
|
+
Les outils v1.1 sont similaires à `hk diff` / `hk breaking` et au flux de travail de comparaison de versions qui nécessitait auparavant des scripts. Les outils de synchronisation v1.2 comblent le fossé où une session pouvait interroger la base de données, mais pas la mettre à jour : `sync_status` signale l'obsolescence, `sync_now` exécute le pipeline. Consultez [le manuel → serveur MCP](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/mcp-server/) pour les schémas de paramètres complets.
|
|
261
262
|
|
|
262
263
|
---
|
|
263
264
|
|
|
@@ -294,7 +295,7 @@ Index complet dans [synergies/INDEX.md](synergies/INDEX.md).
|
|
|
294
295
|
La suite Vitest couvre les niveaux unitaires, d'intégration, de régression et de test de base. **[test-spec-3.md](test-spec-3.md) est la référence actuelle** à partir de la version v0.7.0 ; [test-spec.md](test-spec.md) (v1) et [test-spec-2.md](test-spec-2.md) (v2) restent dans le dépôt comme enregistrement historique de l'évolution de la conception.
|
|
295
296
|
|
|
296
297
|
```bash
|
|
297
|
-
pnpm test # unit + integration + regression (~36s,
|
|
298
|
+
pnpm test # unit + integration + regression (~36s, 519 tests)
|
|
298
299
|
pnpm test:watch # interactive
|
|
299
300
|
pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
|
|
300
301
|
pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
|
|
@@ -305,7 +306,7 @@ Structure :
|
|
|
305
306
|
| Dossier | Ce qu'il couvre |
|
|
306
307
|
|-----|----------------|
|
|
307
308
|
| `test/unit/` | par module — extraction, ingestion, requête (incl. `until` / navigation / depuis / comparaison), base de données (incl. migration de configuration de dimension v3), intégration, hybride, récupération + tous les fournisseurs (Ollama / Voyage / **OpenAI**) + récupération-RSS/changelog (incl. analyseur **keep-a-changelog**) / HTML + récupération-registre-MCP + récupération-playwright + configuration-produits + ingestion/requête de synergies. |
|
|
308
|
-
| `test/integration/` | de bout en bout
|
|
309
|
+
| `test/integration/` | de bout en bout — pipeline, synchronisation, serveur MCP (JSON-RPC via stdin/stdout, 13 outils dont `sync_status` / `sync_now`), CLI (dont `hk diff`, `hk breaking`) |
|
|
309
310
|
| `test/regression/` | §8.1–§8.19 — chacun protège contre un bug réel corrigé pendant le développement (§8.19 : la pagination précoce de ghReleases préserve les éléments dans la fenêtre). |
|
|
310
311
|
| `test/smoke/` | Test complet sur l'ensemble des fichiers (1 143 fichiers) simulant les produits réels. |
|
|
311
312
|
| `test/fixtures/` | 3 produits factices + réponses HTTP simulées (RSS / GH / Voyage / Cohere / Ollama / Anthropic / Smithery / Registre MCP officiel). |
|
package/README.hi.md
CHANGED
|
@@ -73,7 +73,7 @@ claude-synergy/
|
|
|
73
73
|
└── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
-
**वर्तमान आंकड़े (v1.2.
|
|
76
|
+
**वर्तमान आंकड़े (v1.2.1 के अनुसार):** 44 उत्पाद / 1,171 रिलीज़ फ़ाइलें / 6,573 परिवर्तन / 1,260 इकाइयां / 12 तालमेल / 519 परीक्षण / 13 एमसीपी उपकरण / 17 सीएलआई कमांड। (डेटाबेस 2026-05-24 को `sync_now` के माध्यम से अपडेट किया गया।)
|
|
77
77
|
|
|
78
78
|
---
|
|
79
79
|
|
|
@@ -90,7 +90,8 @@ claude-synergy/
|
|
|
90
90
|
| **4c — टर्नडाउन एचटीएमएल→मार्कडाउन इनजेस्ट** | ✅ जारी किया गया | एचटीएमएल बॉडी (कोपायलट/वीएस कोड/कर्सर) अब एफटीएस5 (FTS5) + एंटिटी एक्सट्रैक्शन के लिए प्रति-बुलेट पंक्तियाँ उत्पन्न करते हैं। |
|
|
91
91
|
| **4d — प्लेराइट + एमसीपी रजिस्ट्री + YAML कॉन्फ़िगरेशन** | ✅ जारी किया गया | प्लेराइट के माध्यम से विंडसर्फ़; स्मिथरी + आधिकारिक एमसीपी रजिस्ट्री को चौथे स्तर के कैटलॉग के रूप में उपयोग किया जाता है; उत्पादों को `products.yaml` में समेकित किया गया है। |
|
|
92
92
|
| **5 — v1.1 विंडो ब्राउज़िंग + ओपनएआई एम्बेड** | ✅ जारी किया गया | `hk diff` / `hk breaking`, सभी ब्राउज़िंग कमांड के लिए तारीख सीमा, 3 नए एमसीपी उपकरण (कुल 11), ओपनएआई एम्बेडिंग प्रदाता, कॉन्फ़िगर करने योग्य एम्बेडिंग आयाम, `claude-code` ऑटो-सिंक, सामान्य `keep-a-changelog` पार्सर। |
|
|
93
|
-
| **6 — v1.2 एमसीपी से सिंक** | ✅ जारी किया गया | `sync_status` (प्रत्येक उत्पाद की
|
|
93
|
+
| **6 — v1.2 एमसीपी से सिंक** | ✅ जारी किया गया | `sync_status` (प्रत्येक उत्पाद की ताज़गी की स्थिति, कभी नहीं/पुरानी स्थिति का पता लगाना) और `sync_now` (मांग पर डेटा प्राप्त करना → संसाधित करना → `dry_run` पूर्वावलोकन के साथ एम्बेड करना + प्रक्रिया में समवर्ती लॉक)। यह उस स्थिति को समाप्त करता है जहां एक उपयोगकर्ता डेटाबेस से जानकारी प्राप्त कर सकता था लेकिन उसे अपडेट नहीं कर सकता था। **इसके अतिरिक्त, यह निम्नलिखित समस्या को भी ठीक करता है:** "मार्कर-वाइप" बग, जिसमें `INSERT OR REPLACE INTO products` कमांड `markers` विदेशी कुंजी पर एक DELETE ऑपरेशन चलाता था, जिसके कारण प्रत्येक उत्पाद के लिए `since` कर्सर हर बार डेटा आयात करने पर रीसेट हो जाता था (प्रतिगमन §8.20)। |
|
|
94
|
+
| **6.1 — v1.2.1 फ़ेचर-मार्कर केंद्रीकरण** | ✅ जारी किया गया | `writeMarker` फ़ंक्शन को `fetchOne` में केंद्रीकृत किया गया है, ताकि प्रत्येक सफल डेटा आयात के साथ मार्कर अपडेट हो जाए। पहले, उन रणनीतियों ने जो 0 इन-विंडो दिनांकित आइटम लौटाती थीं (विशेष रूप से `aider` कच्चा परिवर्तन लॉग), मार्कर नहीं लिखते थीं और हर सिंक पर `HISTORY.md` फ़ाइल को फिर से डाउनलोड करती थीं। `webfetch` रणनीति, जिसे लागू नहीं किया गया था, का नाम बदलकर `manual` कर दिया गया है, जिसका उपयोग `claude-api` और `anthropic-apps` के लिए किया जाता है; `sync_status` अब मैन्युअल उत्पादों को "never" के बजाय "manual" के रूप में प्रदर्शित करता है और उन्हें `stale_only` से बाहर रखता है (प्रतिगमन §8.21)। |
|
|
94
95
|
|
|
95
96
|
v0.8+ के लिए रोडमैप: [URGENT_FINDINGS.md](URGENT_FINDINGS.md) और मुद्दों में ट्रैक किया गया है।
|
|
96
97
|
|
|
@@ -254,10 +255,10 @@ GitHub Copilot के लिए `.vscode/mcp.json` फ़ाइल में, `m
|
|
|
254
255
|
| `get_changes_since` | **नया।** एक समय विंडो में परिवर्तन, उत्पाद+संस्करण द्वारा समूहीकृत। इनपुट: `since` (आवश्यक), `until?`, `product?`, `kind?`, `limit?`. |
|
|
255
256
|
| `search_breaking_changes` | **नया।** महत्वपूर्ण परिवर्तनों की एक सपाट सूची — किसी खोज शब्द की आवश्यकता नहीं। इनपुट: `product?`, `since?`, `until?`, `limit?`. |
|
|
256
257
|
| `compare_versions` | **नया।** एक उत्पाद के दो संस्करणों के बीच सभी परिवर्तन। इनपुट: `product`, `from_version`, `to_version`. |
|
|
257
|
-
| `sync_status` | **v1.2.** प्रत्येक उत्पाद के लिए सिंक की
|
|
258
|
-
| `sync_now` | **v1.2.** मांग पर
|
|
258
|
+
| `sync_status` | **v1.2.** प्रत्येक उत्पाद के लिए सिंक की ताज़गी की स्थिति — अंतिम डेटा आयात का समय, डेटा आयात के बाद से घंटे, संसाधित रिलीज़ की संख्या। इनपुट: `product?`, `stale_only?`, `stale_hours?`. `latest_releases` पर भरोसा करने से पहले, यह जांचना महत्वपूर्ण है कि डेटाबेस पुराना है या नहीं। |
|
|
259
|
+
| `sync_now` | **v1.2.** मांग पर ताज़ा करना (यह `hk sync` के समान है)। इनपुट: `product?`, `dry_run?`, `include_ingest?`, `include_embed?`, `timeout_ms?`. यदि कोई अन्य `sync_now` प्रक्रिया चल रही है, तो यह `InvalidParams` त्रुटि प्रदर्शित करता है। यह परिवर्तन सीधे git में नहीं करता है। |
|
|
259
260
|
|
|
260
|
-
v1.1 उपकरण `hk diff` / `hk breaking` और संस्करण तुलना
|
|
261
|
+
v1.1 उपकरण `hk diff` / `hk breaking` और संस्करण तुलना कार्यप्रवाह को प्रतिबिंबित करते हैं, जिसके लिए पहले स्क्रिप्टिंग की आवश्यकता होती थी। v1.2 सिंक उपकरण उस स्थिति को समाप्त करते हैं जहां एक सत्र डेटाबेस से जानकारी प्राप्त कर सकता था लेकिन उसे अपडेट नहीं कर सकता था — `sync_status` पुरानी स्थिति की रिपोर्ट करता है, और `sync_now` पाइपलाइन चलाता है। पूर्ण इनपुट स्कीमा के लिए, [हैंडबुक → एमसीपी सर्वर](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/mcp-server/) देखें।
|
|
261
262
|
|
|
262
263
|
---
|
|
263
264
|
|
|
@@ -294,7 +295,7 @@ v1.1 उपकरण `hk diff` / `hk breaking` और संस्करण त
|
|
|
294
295
|
विटेस्ट (Vitest) में यूनिट, इंटीग्रेशन, रिग्रेशन और स्मोक परीक्षण शामिल हैं। v0.7.0 के अनुसार, "[test-spec-3.md](test-spec-3.md)" वर्तमान में आधिकारिक दस्तावेज है; [test-spec.md](test-spec.md) (v1) और [test-spec-2.md](test-spec-2.md) (v2) डिज़ाइन के ऐतिहासिक रिकॉर्ड के रूप में रिपॉजिटरी में मौजूद हैं।
|
|
295
296
|
|
|
296
297
|
```bash
|
|
297
|
-
pnpm test # unit + integration + regression (~36s,
|
|
298
|
+
pnpm test # unit + integration + regression (~36s, 519 tests)
|
|
298
299
|
pnpm test:watch # interactive
|
|
299
300
|
pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
|
|
300
301
|
pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
|
|
@@ -305,7 +306,7 @@ pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
|
|
|
305
306
|
| मुझे खेद है, लेकिन मैं इस अनुरोध को पूरा करने में असमर्थ हूं क्योंकि यह अपूर्ण है। कृपया पूरा वाक्य या पाठ प्रदान करें जिसका आप अनुवाद करवाना चाहते हैं। | यह क्या शामिल करता है। |
|
|
306
307
|
|-----|----------------|
|
|
307
308
|
| `test/unit/` | प्रति-मॉड्यूल — निकालें, इनजेस्ट करें, क्वेरी करें (शामिल `until` / ब्राउज़ / since / तुलना), डेटाबेस (शामिल dim-config v3 माइग्रेशन), एम्बेड, हाइब्रिड, फेच + प्रत्येक प्रदाता (Ollama / Voyage / **OpenAI**) + फेच-rss/changelog (शामिल **keep-a-changelog** पार्सर)/html + फेच-mcp-registry + फेच-playwright + उत्पादों-कॉन्फ़िग + सि synergy इनजेस्ट/क्वेरी |
|
|
308
|
-
| `test/integration/` | एंड-टू-एंड — पाइपलाइन, सिंक, एमसीपी सर्वर (
|
|
309
|
+
| `test/integration/` | एंड-टू-एंड — पाइपलाइन, सिंक, एमसीपी सर्वर (stdio JSON-RPC, 13 उपकरण जिनमें `sync_status` / `sync_now` शामिल हैं), सीएलआई (जिनमें `hk diff`, `hk breaking` शामिल हैं)। |
|
|
309
310
|
| `test/regression/` | §8.1–§8.19 — प्रत्येक एक वास्तविक बग से बचाता है जिसे विकास के दौरान ठीक किया गया था (§8.19: ghReleases शुरुआती-निकास पेजिंग विंडो में आइटम को संरक्षित करता है) |
|
|
310
311
|
| `test/smoke/` | पूर्ण डेटासेट, वास्तविक `products/` (1,143 फ़ाइलें) के लिए। |
|
|
311
312
|
| `test/fixtures/` | 3 नकली उत्पाद + मॉक एचटीटीपी प्रतिक्रियाएं (RSS / GH / Voyage / Cohere / Ollama / Anthropic / Smithery / आधिकारिक MCP रजिस्ट्री)। |
|
package/README.it.md
CHANGED
|
@@ -73,7 +73,7 @@ claude-synergy/
|
|
|
73
73
|
└── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
-
**Dati aggiornati (alla versione
|
|
76
|
+
**Dati aggiornati (alla versione 1.2.1):** 44 prodotti / 1.171 file di rilascio / 6.573 modifiche / 1.260 entità / 12 sinergie / 519 test / 13 strumenti MCP / 17 comandi CLI. (Il database è stato aggiornato tramite `sync_now` il 24 maggio 2026.)
|
|
77
77
|
|
|
78
78
|
---
|
|
79
79
|
|
|
@@ -91,6 +91,7 @@ claude-synergy/
|
|
|
91
91
|
| **4d — Playwright + registro MCP + configurazione YAML** | ✅ implementato | Windsurf tramite Playwright; Smithery + registro ufficiale MCP come cataloghi del livello 4; prodotti consolidati in `products.yaml`. |
|
|
92
92
|
| **5 — v1.1: navigazione con finestre + integrazione OpenAI** | ✅ implementato | `hk diff` / `hk breaking`, limiti di data per tutti i comandi di navigazione, 3 nuovi strumenti MCP (totale di 11), provider di embedding OpenAI, dimensione dell'embedding configurabile, sincronizzazione automatica di `claude-code`, parser generico `keep-a-changelog`. |
|
|
93
93
|
| **6 — v1.2: sincronizzazione da MCP** | ✅ implementato | `sync_status` (freschezza per prodotto, rilevamento di dati obsoleti) e `sync_now` (recupero su richiesta → ingestione → embedding con anteprima `dry_run` + blocco di concorrenza in-process). Risolve il problema in cui un'applicazione poteva interrogare il database ma non aggiornarlo. **Corregge anche:** un bug che causava la cancellazione di tutti i marker quando `INSERT OR REPLACE INTO products` propagava una cancellazione sulla chiave esterna `markers`, reimpostando silenziosamente il cursore `since` di ogni prodotto ad ogni ingestione (regressione §8.20). |
|
|
94
|
+
| **6.1 — Centralizzazione del marcatore nel modulo fetcher (versione 1.2.1)** | ✅ implementato | La funzione `writeMarker` è stata centralizzata in `fetchOne` in modo che ogni operazione di recupero riuscita aggiorni il marcatore. Le strategie che restituivano 0 elementi datati all'interno della finestra temporale (in particolare, il registro delle modifiche "raw" di `aider`) non scrivevano mai un marcatore e scaricavano ripetutamente il file `HISTORY.md` ad ogni sincronizzazione. La strategia `webfetch` non implementata è stata rinominata in `manual` per `claude-api` e `anthropic-apps`; `sync_status` ora visualizza i prodotti configurati manualmente come "manual" invece di "mai" e li esclude da `stale_only` (regressione §8.21). |
|
|
94
95
|
|
|
95
96
|
Roadmap per la versione 0.8+: disponibile in [URGENT_FINDINGS.md](URGENT_FINDINGS.md) e nella sezione issues.
|
|
96
97
|
|
|
@@ -294,7 +295,7 @@ Indice completo in [synergies/INDEX.md](synergies/INDEX.md).
|
|
|
294
295
|
La suite di test Vitest copre i livelli di unità, integrazione, regressione e test preliminari. **[test-spec-3.md](test-spec-3.md) è la documentazione di riferimento corrente** a partire dalla versione 0.7.0; [test-spec.md](test-spec.md) (versione 1) e [test-spec-2.md](test-spec-2.md) (versione 2) rimangono nel repository come documentazione storica della progettazione.
|
|
295
296
|
|
|
296
297
|
```bash
|
|
297
|
-
pnpm test # unit + integration + regression (~36s,
|
|
298
|
+
pnpm test # unit + integration + regression (~36s, 519 tests)
|
|
298
299
|
pnpm test:watch # interactive
|
|
299
300
|
pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
|
|
300
301
|
pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
|
package/README.ja.md
CHANGED
|
@@ -73,7 +73,7 @@ claude-synergy/
|
|
|
73
73
|
└── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
-
**現在の数値 (v1.2.
|
|
76
|
+
**現在の数値 (v1.2.1時点):** 44製品 / 1,171リリースファイル / 6,573変更 / 1,260エンティティ / 12の相乗効果 / 519テスト / 13のMCPツール / 17のCLIコマンド。 (2026年5月24日に`sync_now`でコーパスを更新しました。)
|
|
77
77
|
|
|
78
78
|
---
|
|
79
79
|
|
|
@@ -90,7 +90,8 @@ claude-synergy/
|
|
|
90
90
|
| **4c — turndown HTML→Markdownインジェスト** | ✅ リリース済み | HTMLの本文(Copilot/VS Code/Cursor)が、FTS5とエンティティ抽出のための、行ごとのリストを生成 |
|
|
91
91
|
| **4d — Playwright + MCPレジストリ + YAML設定** | ✅ リリース済み | WindsurfはPlaywright経由; Smitheryと公式MCPレジストリをTier-4カタログとして使用; 製品は`products.yaml`に統合 |
|
|
92
92
|
| **5 — v1.1:ウィンドウ表示機能 + OpenAIの埋め込み機能** | ✅ リリース済み | `hk diff` / `hk breaking`:すべての閲覧コマンドで日付範囲を指定可能。3つの新しいMCPツール(合計11個)、OpenAIの埋め込み機能、設定可能な埋め込み次元、`claude-code`の自動同期、汎用的な`keep-a-changelog`パーサー。 |
|
|
93
|
-
| **6 — v1.2 MCP
|
|
93
|
+
| **6 — v1.2 sync-from-MCP** | ✅ リリース済み | `sync_status`(製品ごとの鮮度、"never"または"stale"の状態検出)と`sync_now`(オンデマンドでの取得→取り込み→埋め込み。`dry_run`プレビューと、処理中の同時実行ロック機能付き)。 これにより、コーパスを問い合わせできるものの、更新できないという問題を解消します。 **また、以下の問題を修正:** `INSERT OR REPLACE INTO products`によって`markers`の外部キーにDELETEが連鎖し、すべての製品の`since`カーソルが、取り込みのたびにリセットされていたバグ(回帰 §8.20)。 |
|
|
94
|
+
| **6.1 — v1.2.1 fetcher-markerの中央管理** | ✅ リリース済み | `fetchOne`内で`writeMarker`を中央管理化し、すべての正常な取得でマーカーを更新するようにしました。 以前は、一定期間内に0件のアイテムを返した戦略(特に`aider`のraw-changelog)は、マーカーを書き込まず、`HISTORY.md`を毎回再取得していました。 実装されていない`webfetch`戦略を、`claude-api`および`anthropic-apps`向けに`manual`に改名しました。 `sync_status`では、現在、手動で設定された製品を"never"ではなく"manual"として表示し、`stale_only`から除外するようにしました(回帰 §8.21)。 |
|
|
94
95
|
|
|
95
96
|
v0.8以降のロードマップ:[URGENT_FINDINGS.md](URGENT_FINDINGS.md)およびissueで追跡中。
|
|
96
97
|
|
|
@@ -254,10 +255,10 @@ GitHub Copilotの`.vscode/mcp.json`ファイルでは、`mcpServers`ではなく
|
|
|
254
255
|
| `get_changes_since` | **新規。** 製品とバージョンごとにグループ化された、時間範囲内の変更点。入力:`since`(必須)、`until?`、`product?`、`kind?`、`limit?`。 |
|
|
255
256
|
| `search_breaking_changes` | **新規。** 検索語句不要の、変更点のフラットリスト。入力:`product?`、`since?`、`until?`、`limit?`。 |
|
|
256
257
|
| `compare_versions` | **新規。** 単一の製品の2つのバージョン間のすべての変更点。入力:`product`、`from_version`、`to_version`。 |
|
|
257
|
-
| `sync_status` | **v1.2.**
|
|
258
|
-
| `sync_now` | **v1.2.** オンデマンドでの更新(`hk sync
|
|
258
|
+
| `sync_status` | **v1.2.** 製品ごとの同期の鮮度:最終取得時刻、取得からの経過時間、取り込まれたリリース数。 入力:`product?`、`stale_only?`、`stale_hours?`。 `latest_releases`を信頼する前に、コーパスが最新の状態かどうかを確認するために使用してください。 |
|
|
259
|
+
| `sync_now` | **v1.2.** オンデマンドでの更新(`hk sync`と同様)。 入力:`product?`、`dry_run?`、`include_ingest?`、`include_embed?`、`timeout_ms?`。 別の`sync_now`が実行中の場合、`InvalidParams`エラーで拒否されます。 Gitへのコミットは行いません。 |
|
|
259
260
|
|
|
260
|
-
v1.1のツールは、`hk diff` / `hk breaking`および、以前はスクリプトが必要だったバージョン比較のワークフローを模倣しています。v1.2
|
|
261
|
+
v1.1のツールは、`hk diff` / `hk breaking`および、以前はスクリプトが必要だったバージョン比較のワークフローを模倣しています。 v1.2の同期ツールは、セッションがコーパスを問い合わせできるものの、更新できないという問題を解消します。 `sync_status`は鮮度を報告し、`sync_now`はパイプラインを実行します。 完全な入力スキーマについては、[マニュアル → MCPサーバー](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/mcp-server/)を参照してください。
|
|
261
262
|
|
|
262
263
|
---
|
|
263
264
|
|
|
@@ -294,7 +295,7 @@ v1.1のツールは、`hk diff` / `hk breaking`および、以前はスクリプ
|
|
|
294
295
|
Vitestスイートは、ユニットテスト、統合テスト、回帰テスト、および初期動作確認(smoke)の各レベルをカバーします。**[test-spec-3.md](test-spec-3.md)が現在の仕様**です(v0.7.0時点)。[test-spec.md](test-spec.md)(v1)および[test-spec-2.md](test-spec-2.md)(v2)は、設計の経緯を示すための履歴として、リポジトリに残っています。
|
|
295
296
|
|
|
296
297
|
```bash
|
|
297
|
-
pnpm test # unit + integration + regression (~36s,
|
|
298
|
+
pnpm test # unit + integration + regression (~36s, 519 tests)
|
|
298
299
|
pnpm test:watch # interactive
|
|
299
300
|
pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
|
|
300
301
|
pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
|
|
@@ -305,7 +306,7 @@ pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
|
|
|
305
306
|
| ディレクトリ | 内容 |
|
|
306
307
|
|-----|----------------|
|
|
307
308
|
| `test/unit/` | モジュールごと — 抽出、取り込み、クエリ(`until` / 閲覧 / `since` / 比較を含む)、データベース(次元設定v3移行を含む)、埋め込み、ハイブリッド、取り込み + すべてのプロバイダー(Ollama / Voyage / **OpenAI**)+ RSS/変更ログの取り込み(**keep-a-changelog**パーサーを含む)/HTML + MCPレジストリの取り込み + Playwrightの取り込み + 製品設定 + 連携の取り込み/クエリ |
|
|
308
|
-
| `test/integration/` | エンドツーエンド:パイプライン、同期、MCPサーバー(stdio JSON-RPC、13
|
|
309
|
+
| `test/integration/` | エンドツーエンド:パイプライン、同期、MCPサーバー(stdio JSON-RPC、13のツール(`sync_status` / `sync_now`を含む)、CLI(`hk diff`、`hk breaking`を含む)) |
|
|
309
310
|
| `test/regression/` | §8.1–§8.19 — それぞれが、開発中に修正された実際のバグに対する対策。(§8.19:ghReleasesの早期終了ページネーションは、指定範囲内のアイテムを保持します) |
|
|
310
311
|
| `test/smoke/` | 実際の`products/`ディレクトリ(1,143個のファイル)に対するフルコーパスのテスト。 |
|
|
311
312
|
| `test/fixtures/` | 3つのダミー製品と、モックHTTPレスポンス(RSS / GH / Voyage / Cohere / Ollama / Anthropic / Smithery / 公式MCPレジストリ)。 |
|
package/README.md
CHANGED
|
@@ -73,7 +73,7 @@ claude-synergy/
|
|
|
73
73
|
└── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
-
**Live numbers (as of v1.2.
|
|
76
|
+
**Live numbers (as of v1.2.1):** 44 products / 1,171 release files / 6,573 changes / 1,260 entities / 12 synergies / 519 tests / 13 MCP tools / 17 CLI commands. (Corpus refreshed via `sync_now` on 2026-05-24.)
|
|
77
77
|
|
|
78
78
|
---
|
|
79
79
|
|
|
@@ -91,6 +91,7 @@ claude-synergy/
|
|
|
91
91
|
| **4d — Playwright + MCP registry + YAML config** | ✅ shipped | Windsurf via Playwright; Smithery + official MCP Registry as Tier-4 catalogs; products consolidated into `products.yaml` |
|
|
92
92
|
| **5 — v1.1 windowed browsing + OpenAI embed** | ✅ shipped | `hk diff` / `hk breaking`, date bounds across all browsing commands, 3 new MCP tools (11 total), OpenAI embedding provider, configurable embedding dimension, `claude-code` auto-sync, generic `keep-a-changelog` parser |
|
|
93
93
|
| **6 — v1.2 sync-from-MCP** | ✅ shipped | `sync_status` (per-product freshness, never/stale detection) and `sync_now` (on-demand fetch → ingest → embed with `dry_run` preview + in-process concurrency lock). Closes the seam where a calling agent could query the corpus but not refresh it. **Also fixes:** marker-wipe bug where `INSERT OR REPLACE INTO products` cascaded a DELETE on the `markers` FK, silently resetting every product's `since` cursor on each ingest (regression §8.20). |
|
|
94
|
+
| **6.1 — v1.2.1 fetcher-marker centralization** | ✅ shipped | Centralized `writeMarker` in `fetchOne` so every successful fetch updates the marker — pre-fix, strategies that returned 0 in-window dated items (most notably `aider` raw-changelog) never wrote a marker and re-pulled `HISTORY.md` on every sync. Renamed unimplemented `webfetch` strategy to `manual` for `claude-api` + `anthropic-apps`; `sync_status` now renders manual products as "manual" instead of "never" and excludes them from `stale_only` (regression §8.21). |
|
|
94
95
|
|
|
95
96
|
Roadmap beyond v1.2: tracked in [URGENT_FINDINGS.md](URGENT_FINDINGS.md) and issues.
|
|
96
97
|
|
|
@@ -294,7 +295,7 @@ Full index in [synergies/INDEX.md](synergies/INDEX.md).
|
|
|
294
295
|
Vitest suite covers unit / integration / regression / smoke tiers. **[test-spec-3.md](test-spec-3.md) is the current authority** as of v0.7.0; [test-spec.md](test-spec.md) (v1) and [test-spec-2.md](test-spec-2.md) (v2) remain in the repo as historical record of the design lineage.
|
|
295
296
|
|
|
296
297
|
```bash
|
|
297
|
-
pnpm test # unit + integration + regression (~36s,
|
|
298
|
+
pnpm test # unit + integration + regression (~36s, 519 tests)
|
|
298
299
|
pnpm test:watch # interactive
|
|
299
300
|
pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
|
|
300
301
|
pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
|
package/README.pt-BR.md
CHANGED
|
@@ -73,7 +73,7 @@ claude-synergy/
|
|
|
73
73
|
└── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
-
**Números atualizados (versão 1.2.
|
|
76
|
+
**Números atualizados (versão 1.2.1):** 44 produtos / 1.171 arquivos de lançamento / 6.573 alterações / 1.260 entidades / 12 sinergias / 519 testes / 13 ferramentas MCP / 17 comandos de linha de comando. (O corpus foi atualizado via `sync_now` em 24 de maio de 2026.)
|
|
77
77
|
|
|
78
78
|
---
|
|
79
79
|
|
|
@@ -91,6 +91,7 @@ claude-synergy/
|
|
|
91
91
|
| **4d — Playwright + registro MCP + configuração YAML** | ✅ implementado | Windsurf via Playwright; Smithery + registro oficial MCP como catálogos da etapa 4; produtos consolidados em `products.yaml`. |
|
|
92
92
|
| **5 — Navegação com janelas (v1.1) + incorporação da OpenAI** | ✅ implementado | `hk diff` / `hk breaking`, limites de data em todos os comandos de navegação, 3 novas ferramentas MCP (total de 11), provedor de incorporação da OpenAI, dimensão de incorporação configurável, sincronização automática do `claude-code`, analisador genérico `keep-a-changelog`. |
|
|
93
93
|
| **6 — v1.2 sync-from-MCP** | ✅ implementado | `sync_status` (frescor por produto, detecção de "obsoleto") e `sync_now` (busca sob demanda → ingestão → incorporação com visualização "dry_run" + bloqueio de concorrência em processo). Elimina a lacuna onde um agente poderia consultar o corpus, mas não atualizá-lo. **Corrige também:** um erro em que a exclusão de marcadores, ao usar `INSERT OR REPLACE INTO products`, causava uma exclusão em cascata na chave estrangeira `markers`, reiniciando silenciosamente o cursor "since" de cada produto a cada ingestão (regressão §8.20). |
|
|
94
|
+
| **6.1 — Centralização do marcador de recuperação (versão 1.2.1)** | ✅ implementado | Centralizei a função `writeMarker` em `fetchOne` para que cada recuperação bem-sucedida atualize o marcador. Estratégias que retornavam 0 itens datados dentro do período especificado (principalmente o "changelog" bruto do `aider`) nunca escreviam um marcador e, portanto, baixavam o arquivo `HISTORY.md` a cada sincronização. Renomeei a estratégia `webfetch` não implementada para `manual` para as APIs `claude-api` e `anthropic-apps`. Agora, o `sync_status` exibe os produtos configurados como "manual" em vez de "nunca" e os exclui do processo `stale_only` (regressão §8.21). |
|
|
94
95
|
|
|
95
96
|
Roteiro para a versão 0.8+: acompanhado em [URGENT_FINDINGS.md](URGENT_FINDINGS.md) e nas issues.
|
|
96
97
|
|
|
@@ -294,7 +295,7 @@ Estratégias de busca: `gh-releases | rss | raw-changelog | html-scrape | catalo
|
|
|
294
295
|
O conjunto de testes Vitest cobre os níveis de unidade / integração / regressão / teste rápido. **[test-spec-3.md](test-spec-3.md) é a documentação atual** a partir da versão v0.7.0; [test-spec.md](test-spec.md) (v1) e [test-spec-2.md](test-spec-2.md) (v2) permanecem no repositório como registro histórico da linhagem do design.
|
|
295
296
|
|
|
296
297
|
```bash
|
|
297
|
-
pnpm test # unit + integration + regression (~36s,
|
|
298
|
+
pnpm test # unit + integration + regression (~36s, 519 tests)
|
|
298
299
|
pnpm test:watch # interactive
|
|
299
300
|
pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
|
|
300
301
|
pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
|
package/README.zh.md
CHANGED
|
@@ -73,7 +73,7 @@ claude-synergy/
|
|
|
73
73
|
└── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
**实时数据(截至 v1.2.1 版本):** 44 个产品 / 1,171 个发布文件 / 6,573 个变更 / 1,260 个实体 / 12 个协同关系 / 519 个测试 / 13 个 MCP 工具 / 17 个 CLI 命令。(语料库已于 2026-05-24 通过 `sync_now` 命令刷新。)
|
|
77
77
|
|
|
78
78
|
---
|
|
79
79
|
|
|
@@ -91,6 +91,7 @@ claude-synergy/
|
|
|
91
91
|
| 4d — playwright + MCP 注册 + YAML 配置文件。 | ✅ 已发货。 | 使用 Playwright 进行网页抓取;Smithery + 官方 MCP 注册信息作为第四级目录;产品信息已整合到 `products.yaml` 文件中。 |
|
|
92
92
|
| **5 — v1.1 版本:窗口浏览 + OpenAI 嵌入** | ✅ 已发货。 | `hk diff` / `hk breaking`,所有浏览命令都支持日期范围;3 个新的 MCP 工具 (总共 11 个);OpenAI 嵌入提供程序;可配置的嵌入维度;`claude-code` 自动同步;通用的 `keep-a-changelog` 解析器。 |
|
|
93
93
|
| **6 — v1.2 版本:从 MCP 同步** | ✅ 已发货。 | `sync_status` (报告每个产品的更新状态,检测是否过时) 和 `sync_now` (按需获取 → 导入 → 嵌入,并提供 `dry_run` 预览 + 进程内并发锁定)。 解决了调用方可以查询语料库,但无法刷新的问题。 **此外,还修复了:** 标记清除错误,即 `INSERT OR REPLACE INTO products` 会级联删除 `markers` 上的外键,从而在每次导入时静默地重置每个产品的 `since` 游标 (回归 §8.20)。 |
|
|
94
|
+
| **6.1 — v1.2.1:Fetcher 标记集中化** | ✅ 已发货。 | 将 `writeMarker` 函数集中到 `fetchOne` 函数中,以便每次成功的获取都更新标记。之前,一些策略(特别是 `aider` 原始变更日志)返回 0 个在窗口期内的条目,因此从未写入标记,并且每次同步都会重新拉取 `HISTORY.md` 文件。已将未实现的 `webfetch` 策略重命名为 `manual`,适用于 `claude-api` 和 `anthropic-apps`。现在,`sync_status` 会将手动配置的产品显示为 "manual",而不是 "never",并且将其排除在 `stale_only` 列表中(回归问题 §8.21)。 |
|
|
94
95
|
|
|
95
96
|
v0.8 及后续版本的开发计划,请参考 [URGENT_FINDINGS.md](URGENT_FINDINGS.md) 文件以及相关问题列表。
|
|
96
97
|
|
|
@@ -294,7 +295,7 @@ v1.1 版本的工具模仿了 `hk diff` / `hk breaking` 命令,以及以前需
|
|
|
294
295
|
Vitest 测试套件覆盖单元测试、集成测试、回归测试和初步测试。 **[test-spec-3.md](test-spec-3.md) 是当前版本 (v0.7.0) 的权威文档**;[test-spec.md](test-spec.md) (v1) 和 [test-spec-2.md](test-spec-2.md) (v2) 仍然保存在代码库中,作为设计演进的历史记录。
|
|
295
296
|
|
|
296
297
|
```bash
|
|
297
|
-
pnpm test # unit + integration + regression (~36s,
|
|
298
|
+
pnpm test # unit + integration + regression (~36s, 519 tests)
|
|
298
299
|
pnpm test:watch # interactive
|
|
299
300
|
pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
|
|
300
301
|
pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
|
|
@@ -123,7 +123,9 @@ function getSyncStatus(db, opts = {}) {
|
|
|
123
123
|
const rows = db.prepare(sql).all(params);
|
|
124
124
|
if (opts.staleOnly) {
|
|
125
125
|
const cutoff = opts.staleHours ?? 24;
|
|
126
|
-
return rows.filter(
|
|
126
|
+
return rows.filter(
|
|
127
|
+
(r) => r.fetch_strategy !== "manual" && (r.hours_since_fetch === null || r.hours_since_fetch > cutoff)
|
|
128
|
+
);
|
|
127
129
|
}
|
|
128
130
|
return rows;
|
|
129
131
|
}
|
|
@@ -791,23 +791,31 @@ function buildSummary(results) {
|
|
|
791
791
|
}
|
|
792
792
|
async function fetchOne(db, productsRoot, target, sinceOverride, signal) {
|
|
793
793
|
assertProductShape(target.product);
|
|
794
|
-
const
|
|
794
|
+
const existingMarker = readMarker(db, target.product);
|
|
795
|
+
const since = sinceOverride ?? existingMarker ?? "2026-01-01";
|
|
795
796
|
const outDir = resolve(productsRoot, target.product, "releases");
|
|
796
797
|
mkdirSync2(outDir, { recursive: true });
|
|
798
|
+
let stats;
|
|
797
799
|
try {
|
|
798
800
|
switch (target.strategy) {
|
|
799
801
|
case "gh-releases":
|
|
800
|
-
|
|
802
|
+
stats = await fetchGhReleases(db, outDir, target, since);
|
|
803
|
+
break;
|
|
801
804
|
case "rss":
|
|
802
|
-
|
|
805
|
+
stats = await fetchRss(db, outDir, target, since, signal);
|
|
806
|
+
break;
|
|
803
807
|
case "raw-changelog":
|
|
804
|
-
|
|
808
|
+
stats = await fetchRawChangelog(db, outDir, target, since, signal);
|
|
809
|
+
break;
|
|
805
810
|
case "html-scrape":
|
|
806
|
-
|
|
811
|
+
stats = await fetchHtmlScrape(db, outDir, target, since, signal);
|
|
812
|
+
break;
|
|
807
813
|
case "catalog":
|
|
808
|
-
|
|
814
|
+
stats = await fetchCatalogStrategy(db, productsRoot, target, since, signal);
|
|
815
|
+
break;
|
|
809
816
|
case "playwright":
|
|
810
|
-
|
|
817
|
+
stats = await fetchPlaywrightStrategy(db, outDir, target, since);
|
|
818
|
+
break;
|
|
811
819
|
}
|
|
812
820
|
} catch (e) {
|
|
813
821
|
return {
|
|
@@ -818,6 +826,9 @@ async function fetchOne(db, productsRoot, target, sinceOverride, signal) {
|
|
|
818
826
|
errors: [`fetch failed: ${e.message}`]
|
|
819
827
|
};
|
|
820
828
|
}
|
|
829
|
+
const markerVersion = stats.latest ?? existingMarker ?? since;
|
|
830
|
+
writeMarker(db, target.product, markerVersion, target.strategy);
|
|
831
|
+
return stats;
|
|
821
832
|
}
|
|
822
833
|
async function fetchGhReleases(db, outDir, target, since) {
|
|
823
834
|
if (!target.repo) throw new Error(`${target.product}: gh-releases strategy requires repo`);
|
|
@@ -845,7 +856,6 @@ async function fetchGhReleases(db, outDir, target, since) {
|
|
|
845
856
|
errors.push(`${r.tag_name}: ${e.message}`);
|
|
846
857
|
}
|
|
847
858
|
}
|
|
848
|
-
if (latest) writeMarker(db, target.product, latest, target.strategy);
|
|
849
859
|
return { product: target.product, fetched, newSince: since, latest, errors };
|
|
850
860
|
}
|
|
851
861
|
function ghReleases(repo, sinceIso) {
|
|
@@ -959,7 +969,6 @@ async function fetchRss(db, outDir, target, since, signal) {
|
|
|
959
969
|
errors.push(`${item.slug}: ${e.message}`);
|
|
960
970
|
}
|
|
961
971
|
}
|
|
962
|
-
if (latest) writeMarker(db, target.product, latest, target.strategy);
|
|
963
972
|
return { product: target.product, fetched, newSince: since, latest, errors };
|
|
964
973
|
}
|
|
965
974
|
async function fetchRawChangelog(db, outDir, target, since, signal) {
|
|
@@ -1008,7 +1017,6 @@ async function fetchRawChangelog(db, outDir, target, since, signal) {
|
|
|
1008
1017
|
errors.push(`${item.version}: ${e.message}`);
|
|
1009
1018
|
}
|
|
1010
1019
|
}
|
|
1011
|
-
if (latest) writeMarker(db, target.product, latest, target.strategy);
|
|
1012
1020
|
return { product: target.product, fetched, newSince: since, latest, errors };
|
|
1013
1021
|
}
|
|
1014
1022
|
async function fetchHtmlScrape(db, outDir, target, since, signal) {
|
|
@@ -1048,7 +1056,6 @@ async function fetchHtmlScrape(db, outDir, target, since, signal) {
|
|
|
1048
1056
|
errors.push(`${item.slug}: ${e.message}`);
|
|
1049
1057
|
}
|
|
1050
1058
|
}
|
|
1051
|
-
if (latest) writeMarker(db, target.product, latest, target.strategy);
|
|
1052
1059
|
return { product: target.product, fetched, newSince: since, latest, errors };
|
|
1053
1060
|
}
|
|
1054
1061
|
async function fetchPlaywrightStrategy(db, outDir, target, since) {
|
|
@@ -1088,7 +1095,6 @@ async function fetchPlaywrightStrategy(db, outDir, target, since) {
|
|
|
1088
1095
|
errors.push(`${item.slug}: ${e.message}`);
|
|
1089
1096
|
}
|
|
1090
1097
|
}
|
|
1091
|
-
if (latest) writeMarker(db, target.product, latest, target.strategy);
|
|
1092
1098
|
return { product: target.product, fetched, newSince: since, latest, errors };
|
|
1093
1099
|
}
|
|
1094
1100
|
async function fetchCatalogStrategy(db, productsRoot, target, since, signal) {
|
|
@@ -1097,7 +1103,6 @@ async function fetchCatalogStrategy(db, productsRoot, target, since, signal) {
|
|
|
1097
1103
|
const productDir = resolve(productsRoot, target.product);
|
|
1098
1104
|
writeCatalog(productDir, target.product, entries);
|
|
1099
1105
|
const nowIso = (/* @__PURE__ */ new Date()).toISOString();
|
|
1100
|
-
writeMarker(db, target.product, nowIso, target.strategy);
|
|
1101
1106
|
return {
|
|
1102
1107
|
product: target.product,
|
|
1103
1108
|
fetched: entries.length,
|
package/dist/cli.js
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
lookupEntity,
|
|
9
9
|
recentReleases,
|
|
10
10
|
searchChanges
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-2J45LIMO.js";
|
|
12
12
|
import {
|
|
13
13
|
ingestAll
|
|
14
14
|
} from "./chunk-KFAQPOGV.js";
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
import {
|
|
23
23
|
fetchAll,
|
|
24
24
|
seedMarkersFromDb
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-6MUY565T.js";
|
|
26
26
|
import "./chunk-MZLFGICO.js";
|
|
27
27
|
|
|
28
28
|
// src/cli.ts
|
package/dist/mcp-server.js
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
lookupEntity,
|
|
13
13
|
recentReleases,
|
|
14
14
|
searchChanges
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-2J45LIMO.js";
|
|
16
16
|
import {
|
|
17
17
|
openDb
|
|
18
18
|
} from "./chunk-CEIOLMDT.js";
|
|
@@ -781,14 +781,15 @@ function handleSyncStatus(args) {
|
|
|
781
781
|
return args.staleOnly ? `(no stale products \u2014 threshold ${args.staleHours ?? 24}h)` : "(no products in DB \u2014 run `hk ingest` first)";
|
|
782
782
|
}
|
|
783
783
|
const lines = [
|
|
784
|
-
"Product Strategy Last fetch
|
|
785
|
-
"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"
|
|
784
|
+
"Product Strategy Last fetch Hours Ingested Latest release",
|
|
785
|
+
"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"
|
|
786
786
|
];
|
|
787
787
|
for (const r of rows) {
|
|
788
|
+
const isManual = r.fetch_strategy === "manual";
|
|
788
789
|
const product = (r.product ?? "").padEnd(36);
|
|
789
790
|
const strategy = (r.fetch_strategy ?? "\u2014").padEnd(14);
|
|
790
|
-
const lastFetch = r.last_fetch_attempt ? r.last_fetch_attempt.split("T")[0] : "never ";
|
|
791
|
-
const hours = formatHours(r.hours_since_fetch).padStart(
|
|
791
|
+
const lastFetch = r.last_fetch_attempt ? r.last_fetch_attempt.split("T")[0] : isManual ? "manual " : "never ";
|
|
792
|
+
const hours = (isManual && r.hours_since_fetch == null ? "manual" : formatHours(r.hours_since_fetch)).padStart(6);
|
|
792
793
|
const ingested = String(r.releases_ingested).padStart(8);
|
|
793
794
|
const latest = r.last_release_at ? r.last_release_at.split("T")[0] : "\u2014";
|
|
794
795
|
lines.push(`${product} ${strategy} ${lastFetch} ${hours} ${ingested} ${latest}`);
|
|
@@ -809,7 +810,7 @@ async function handleSyncNow(args) {
|
|
|
809
810
|
const includeIngest = args.includeIngest ?? true;
|
|
810
811
|
const includeEmbed = args.includeEmbed ?? true;
|
|
811
812
|
const timeoutMs = args.timeoutMs ?? 3e5;
|
|
812
|
-
const { fetchAll, listFetchTargets } = await import("./fetch-
|
|
813
|
+
const { fetchAll, listFetchTargets } = await import("./fetch-CRO7KXFP.js");
|
|
813
814
|
if (dryRun) {
|
|
814
815
|
const targets = args.product ? listFetchTargets().filter((t) => t.product === args.product) : listFetchTargets();
|
|
815
816
|
if (targets.length === 0) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcptoolshop/claude-synergy",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "Local mirror of Anthropic product changelogs + curated cross-product synergies. So the LLM agent inside the harness knows what the harness can do.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
package/products.yaml
CHANGED
|
@@ -77,19 +77,24 @@ products:
|
|
|
77
77
|
type: gh-releases
|
|
78
78
|
repo: anthropics/claude-code
|
|
79
79
|
|
|
80
|
-
# ── Tier 3 /
|
|
80
|
+
# ── Tier 3 / manual-seed (no automated fetcher yet) ──────────────────────
|
|
81
|
+
# Renamed from `webfetch` to `manual` in v1.2.1 — the original label suggested
|
|
82
|
+
# an automated WebFetch-based fetcher that was never implemented. These two
|
|
83
|
+
# corpora are still seeded by hand (the initial study-swarm pulled them via
|
|
84
|
+
# WebFetch one-shot, but `sync_now` does not refresh them). `sync_status`
|
|
85
|
+
# renders the strategy as "manual" instead of "never" so callers can
|
|
86
|
+
# distinguish "needs implementation" from "stale gh-releases."
|
|
81
87
|
- name: claude-api
|
|
82
88
|
display_name: Claude API / Platform
|
|
83
89
|
tier: 3
|
|
84
90
|
source_url: https://platform.claude.com/docs/en/release-notes/overview
|
|
85
|
-
fetch_strategy:
|
|
86
|
-
# WebFetch-based; corpus seeded by initial swarm.
|
|
91
|
+
fetch_strategy: manual
|
|
87
92
|
|
|
88
93
|
- name: anthropic-apps
|
|
89
94
|
display_name: Anthropic Apps (Design / Cowork / Chat / Mobile)
|
|
90
95
|
tier: 3
|
|
91
96
|
source_url: https://support.claude.com/en/articles/12138966-release-notes
|
|
92
|
-
fetch_strategy:
|
|
97
|
+
fetch_strategy: manual
|
|
93
98
|
|
|
94
99
|
# ── Tier 1 / GitHub Releases — Anthropic SDKs ────────────────────────────
|
|
95
100
|
- name: claude-agent-sdk-python
|