@mcptoolshop/claude-synergy 1.0.1 → 1.1.0

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/CHANGELOG.md CHANGED
@@ -5,6 +5,50 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.1.0] - 2026-05-22
9
+
10
+ ### Added
11
+ - **`hk diff [product] --since N(d|w|m|y)`** — "what changed in this window," grouped by product+version. Default `--since` is `7d`. Accepts `--until`, `--kind`, `--limit` (default 200; caps total change rows, not releases), `--json`, `--db`. Answers "what landed lately?" without a search term. Relative dates: `7d`, `2w`, `3m`, `1y` (resolved to ISO at the CLI boundary).
12
+ - **`hk breaking`** — filter-browse of breaking changes across the corpus. No search term required. Accepts `--product`, `--since`, `--until`, `--limit` (default 50), `--json`, `--db`.
13
+ - **Three new MCP tools** (8 → 11):
14
+ - `get_changes_since` — `{since (required), until?, product?, kind?, limit?}` → changes grouped by product+version.
15
+ - `search_breaking_changes` — `{product?, since?, until?, limit?}` → flat list of breaking changes.
16
+ - `compare_versions` — `{product, from_version, to_version}` → all changes between two versions of one product.
17
+ - **OpenAI embedding provider** — `text-embedding-3-small` (1536-dim) default, configurable model via `OPENAI_EMBED_MODEL` (`text-embedding-3-large` → 3072, `text-embedding-ada-002` → 1536). Env: `OPENAI_API_KEY`, optional `OPENAI_BASE_URL` for OpenAI-compatible gateways. Supports Matryoshka dim truncation when a smaller dim is requested. Use `--embed openai` on `hk hybrid` / `hk embed`.
18
+ - **Configurable embedding dimension** — `schema_meta.embedding_dim` stamps the active vector dimension. The `chunks_vec` sqlite-vec table is now created dynamically at the stamped dim rather than hard-coded to 768. Switching to a provider with a different dim while chunks exist raises `EMBEDDING_DIM_MISMATCH` (`AppError`) instead of silently corrupting the vector table.
19
+ - **Synergy DB ingestion** — `hk ingest` now populates the previously dead synergy schema (`synergies`, `synergy_products`, `synergy_steps`, `synergy_evidence`, `synergy_change_refs`) from `synergies/*.md` frontmatter + body sections. Powers the `list_synergies` / `read_synergy` MCP tools off the DB. Filesystem fallback retained for lazy migration of existing installs that haven't re-ingested. `INSERT … ON CONFLICT DO UPDATE` preserves synergy IDs across re-ingest. Stub product rows (`source_tier = 0`, `notes = 'synergy-stub'`) are created for synergy-referenced products that have no fetch pipeline yet.
20
+ - **`claude-code` auto-sync** — Anthropic's `claude-code` product is now fetched automatically on every `hk sync` via the GitHub Releases API (Tier 1 / `gh-releases`). Previously the corpus was manually seeded with no incremental sync path. Tier reclassified 2 → 1 to reflect the structured-API source.
21
+ - **Generic `keep-a-changelog` parser** — any product whose source is a CHANGELOG.md in [Keep-a-Changelog](https://keepachangelog.com/) format can be wired with a single entry in `products.yaml` (`fetch_strategy: raw-changelog`, `parser: keep-a-changelog`). Handles bracketed/unbracketed versions, optional `v` prefix, paren or hyphen date separators, pre-release and build-metadata suffixes. `[Unreleased]` and other non-version headings are skipped; undated version headings (`## 1.2.3` with no date) are preserved with `releasedAt: null` so the parser is lossless. The network fetcher (`fetchKeepAChangelog`) drops undated entries on incremental sync since `null > since` can't be evaluated.
22
+ - **GitHub Releases sync — early-exit pagination** — `gh-releases` fetcher now stops paginating once an entire page falls below the `--since` watermark. Repos with 500+ releases (e.g. continue-dev) drop from 5 pages to 1–2 on a daily sync — ~80% reduction in GitHub API quota.
23
+
24
+ ### Changed
25
+ - `hk query` gained `--until <date>` (date upper bound).
26
+ - `hk hybrid` gained `--until <date>` (date upper bound).
27
+ - `hk latest` gained `--since <date>` (date lower bound).
28
+ - MCP `search` tool gained optional `until` input.
29
+ - MCP `latest_releases` tool gained optional `since` input.
30
+ - MCP `list_synergies` tool gained optional `product` filter.
31
+ - MCP tool count 8 → 11.
32
+ - CLI command count 15 → 17.
33
+ - Test suite 382 → 508 (+126 tests across 6 new unit files, 3 extended integration files, and §8.19 regression for ghReleases pagination).
34
+ - claude-code product reclassified Tier 2 → Tier 1 in `products.yaml` and docs to reflect structured-API source (GitHub Releases).
35
+ - README CLI surface and MCP tools tables updated to reflect new commands and flags.
36
+ - Handbook `cli-reference` and `mcp-server` pages updated with new commands and tool input schemas.
37
+
38
+ ### Migration notes
39
+ - **Schema v2 → v3 auto-migrates on first `hk init` after upgrade.** The migration stamps `embedding_dim = 768` into `schema_meta` to preserve existing Ollama-embedded DBs at their current dimension. No data is moved. Migration is one-way — a v3 DB cannot be opened by older tool versions.
40
+ - **Existing 768-dim Ollama embeddings continue to work without re-embed.** The dim guard only triggers if you switch to a provider that produces a different vector size (e.g. Ollama 768 → OpenAI 1536).
41
+ - **Switching embedding providers across different dimensions on a populated DB:** `hk embed` will refuse with `EMBEDDING_DIM_MISMATCH`. To switch, wipe and re-initialize the DB:
42
+ ```bash
43
+ rm data/claude-synergy.db data/claude-synergy.db-wal data/claude-synergy.db-shm
44
+ hk init
45
+ hk ingest
46
+ hk embed --embed <new-provider>
47
+ ```
48
+ Alternatively, OpenAI supports Matryoshka truncation — pass a target dim within the model's native size (e.g. truncate `text-embedding-3-small` from 1536 to 768 to stay compatible with an existing Ollama DB).
49
+ - **Synergies still live as markdown** in `synergies/*.md` — the DB tables (`synergies`, `synergy_products`, `synergy_steps`, `synergy_evidence`, `synergy_change_refs`) are a cache populated on `hk ingest`. Edits to synergy files take effect on next ingest. The MCP server prefers the DB but falls back to the filesystem when the DB is empty (lazy migration for existing installs).
50
+ - **Stub product rows** may appear in `products` table with `source_tier = 0`, `notes = 'synergy-stub'` for synergy-referenced products that have no fetch pipeline yet (e.g. `claude-cowork`, `claude-design`). These satisfy FK constraints without polluting the changelog corpus.
51
+
8
52
  ## [1.0.1] - 2026-05-22
9
53
 
10
54
  ### Changed
@@ -120,6 +164,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
120
164
  - Fetcher strategies: `gh-releases`, `rss`, `raw-changelog`.
121
165
  - SQLite + FTS5 corpus, sqlite-vec semantic search with Contextual Retrieval, `claude-synergy-mcp` MCP server exposing 8 tools over stdio.
122
166
 
167
+ [1.1.0]: https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/v1.1.0
123
168
  [1.0.1]: https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/v1.0.1
124
169
  [1.0.0]: https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/v1.0.0
125
170
  [0.7.2]: https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/v0.7.2
package/CONTRIBUTING.md CHANGED
@@ -30,7 +30,8 @@ Thanks for your interest in contributing. This guide covers adding new products,
30
30
  |---|---|---|
31
31
  | `gh-releases` | Repo publishes GitHub Releases | `repo` (owner/repo). Optional: `multi_package: true` for monorepos with scoped tags. |
32
32
  | `rss` | Source has an RSS feed | `url` (feed URL). Optional: `title_filter` (regex to filter entries). |
33
- | `raw-changelog` | Source is a raw CHANGELOG/HISTORY.md file | `url` (raw file URL), `parser` (currently only `aider-history`). |
33
+ | `raw-changelog` | Source is a raw CHANGELOG/HISTORY.md file (aider-style only) | `url` (raw file URL), `parser` (currently only `aider-history`). |
34
+ | `keep-a-changelog` | Source is a CHANGELOG.md in [Keep-a-Changelog](https://keepachangelog.com/) format | `url` (raw file URL). |
34
35
  | `html-scrape` | Source is a blog/changelog page | `parser` (`github-copilot-blog`, `vscode-updates`). |
35
36
  | `playwright` | Source is client-rendered (no SSR) | No extra fields. Currently hardcoded to Windsurf. |
36
37
  | `catalog` | Source is an MCP registry | `catalog_type` (`official-mcp-registry` or `smithery`). Optional: `max_entries`. |
@@ -50,8 +51,8 @@ hk query "some keyword" # verify releases appear in search
50
51
 
51
52
  | Tier | Meaning | Examples |
52
53
  |------|---------|---------|
53
- | 1 | Structured API (GitHub Releases) — highest fidelity | SDKs, MCP ecosystem |
54
- | 2 | Raw markdown changelog | claude-code, aider |
54
+ | 1 | Structured API (GitHub Releases) — highest fidelity | SDKs, MCP ecosystem, claude-code (since v1.1) |
55
+ | 2 | Raw markdown changelog | aider |
55
56
  | 3 | HTML/RSS scrape | Cursor, Copilot, Cody |
56
57
  | 4 | Catalog snapshot (not versioned releases) | Skills, plugins, MCP registries |
57
58
  | 5 | Advisory / manual | X accounts, community mirrors |
@@ -59,7 +60,7 @@ hk query "some keyword" # verify releases appear in search
59
60
  ## Running tests
60
61
 
61
62
  ```bash
62
- pnpm test # unit + integration + regression (~13s, ~294 tests)
63
+ pnpm test # unit + integration + regression (~18s, 508 tests)
63
64
  pnpm test:watch # interactive mode (re-runs on file change)
64
65
  pnpm test:coverage # generates coverage/index.html (thresholds: 78/75/85/78)
65
66
  pnpm test:smoke # opt-in full-corpus smoke test (set RUN_SMOKE=1)
package/README.es.md CHANGED
@@ -65,7 +65,7 @@ claude-synergy/
65
65
  │ └── plugins-{official,community,knowledge-work}/ # Plugin marketplaces
66
66
  ├── synergies/ # 12 curated cross-product workflows
67
67
  ├── src/ # TypeScript implementation
68
- ├── test/ # 382 tests (unit, integration, regression, smoke)
68
+ ├── test/ # 508 tests (unit, integration, regression, smoke)
69
69
  ├── data/claude-synergy.db # SQLite database (created by `hk init`)
70
70
  ├── schema.sql # Tier 2a tables (products, releases, changes, entities, FTS5, …)
71
71
  ├── schema-vec.sql # Tier 2b tables (chunks, chunks_vec, chunks_fts)
@@ -73,7 +73,7 @@ claude-synergy/
73
73
  └── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
74
74
  ```
75
75
 
76
- **Estadísticas actualizadas (versión 1.0.0):** 44 productos / 1.186 archivos de lanzamiento / 6.042 cambios / 1.225 entidades / 12 sinergias / 382 pruebas.
76
+ **Cifras actualizadas (a partir de la versión 1.1.0):** 44 productos / 1.186 archivos de lanzamiento / 6.042 cambios / 1.225 entidades / 12 sinergias / 508 pruebas / 11 herramientas MCP / 17 comandos de línea de comandos.
77
77
 
78
78
  ---
79
79
 
@@ -84,11 +84,12 @@ claude-synergy/
84
84
  | **1 — corpus de Markdown (inicialización)** | ✅ implementado | Study-swarm recopiló 706 archivos de lanzamiento de enero a mayo de 2026; se ampliaron a 1186 en la etapa 4. |
85
85
  | **2a — SQLite + FTS5 + CLI** | ✅ implementado | CLI `hk`; 15 subcomandos; ingestión en menos de 300 ms. |
86
86
  | **2b — sqlite-vec + Recuperación contextual** | ✅ implementado | Proveedor adaptable (ninguno/estructurado/ollama/contexto de Claude-haiku × incrustaciones de ollama/viaje × ninguno/ollama-judge/viaje/cohere para reordenar). |
87
- | **3 — sincronización + servidor MCP** | ✅ implementado | `hk fetch / sync / seed-markers`; `claude-synergy-mcp` expone 8 herramientas a través de stdio. |
87
+ | **3 — sincronización + servidor MCP** | ✅ implementado | `hk fetch / sync / seed-markers`; `claude-synergy-mcp` expone 11 herramientas a través de stdio (8 en la versión original de Nivel 3, 3 añadidas en la versión 1.1). |
88
88
  | **4a — extender más allá de Anthropic** | ✅ implementado | +15 SDKs de MCP, Cursor (RSS), Aider (HISTORY.md), Continue.dev, Cody Enterprise (RSS filtrado). |
89
89
  | **4b — rastreador de HTML** | ✅ implementado | GitHub Copilot + VS Code Chat (Windsurf necesita Playwright — v0.7). |
90
90
  | **4c — ingestión de HTML a Markdown con turndown** | ✅ implementado | Los cuerpos de HTML (Copilot/VS Code/Cursor) ahora generan filas individuales para FTS5 + extracción de entidades. |
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
+ | **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, `claude-code` se sincroniza automáticamente, analizador genérico `keep-a-changelog`. |
92
93
 
93
94
  Hoja de ruta para la versión 0.8+: se encuentra en [URGENT_FINDINGS.md](URGENT_FINDINGS.md) y en los problemas.
94
95
 
@@ -126,8 +127,12 @@ hk sync # combined fetch → ingest → embed (cron
126
127
  hk seed-markers # one-time setup after initial corpus
127
128
 
128
129
  # Search
129
- hk query "managed agents" # FTS5 keyword search
130
- hk hybrid "credential exfiltration" # FTS5 + vec hybrid via RRF (+ optional --rerank)
130
+ hk query "managed agents" # FTS5 keyword search (+ --until <date>)
131
+ hk hybrid "credential exfiltration" # FTS5 + vec hybrid via RRF (+ --rerank, --until)
132
+
133
+ # Windowed change browsing
134
+ hk diff [product] --since 7d # what changed in a window, grouped by product+version
135
+ hk breaking --since 30d # filter-browse of breaking changes (no search term)
131
136
 
132
137
  # Entity lookups
133
138
  hk env-var CLAUDE_CODE_WORKFLOWS # when introduced + history
@@ -136,7 +141,7 @@ hk model claude-opus-4-7 # model launch + mentions across products
136
141
  hk cve CVE-2025-66414 # CVE references in corpus
137
142
 
138
143
  # Browsing
139
- hk latest [--product X] [--limit N] # recent releases
144
+ hk latest [--product X] [--limit N] # recent releases (+ --since <date>)
140
145
  hk products # list all 44 with counts
141
146
  hk top env_var # most-mentioned by entity type
142
147
  # (env_var, slash_command, cli_option,
@@ -144,6 +149,8 @@ hk top env_var # most-mentioned by entity type
144
149
  # hook_event, setting_key)
145
150
  ```
146
151
 
152
+ **Novedades en la versión 1.1:** `hk diff` y `hk breaking` responden a la pregunta "¿qué ha cambiado recientemente?" sin necesidad de un término de búsqueda. Los límites de fecha son uniformes: cada comando de navegación utiliza `--since` y `--until` en formato `YYYY-MM-DD` (o formato ISO 8601 completo), o en formato relativo (`7d`, `2w`, `3m`, `1y`).
153
+
147
154
  ---
148
155
 
149
156
  ## Ejemplos de flujos de trabajo
@@ -186,6 +193,30 @@ $ hk hybrid "credential exfiltration" --limit 3
186
193
 
187
194
  La consulta nunca dice "env_scrub"; el sistema lo muestra por similitud semántica. FTS5 puro no lo encuentra en absoluto.
188
195
 
196
+ **Cambios en claude-code esta semana:**
197
+ ```
198
+ $ hk diff claude-code --since 7d
199
+ claude-code@2.1.147 2026-05-21 (3 changes)
200
+ [added] Added the `Workflow` tool for deterministic multi-agent orchestration.
201
+ [changed] Slash commands now lazy-load until first invocation.
202
+ [fixed] Race condition in MCP server discovery on Windows.
203
+
204
+ claude-code@2.1.146 2026-05-19 (1 change)
205
+ [fixed] Restored `--debug` flag accidentally removed in 2.1.144.
206
+ ```
207
+
208
+ **Explore los cambios importantes en todo el conjunto de datos:**
209
+ ```
210
+ $ hk breaking --since 30d --limit 5
211
+ 2026-05-15 claude-agent-sdk-python@0.2.82 Headless and SDK sessions now use Task tools by default.
212
+ 2026-05-14 claude-agent-sdk-typescript@0.3.142 Headless and SDK sessions now use Task tools by default.
213
+ 2026-05-08 anthropic-sdk-go@1.42.0 Removed deprecated `client.Beta()` namespace.
214
+ 2026-04-29 cursor@0.49.0 MCP server config moved from `cursor.json` to `.cursor/mcp.json`.
215
+ 2026-04-22 windsurf@1.10.0 Removed `cascade.run` JSON-RPC method.
216
+ ```
217
+
218
+ No se necesita un término de búsqueda: `hk breaking` es la respuesta a la pregunta "¿ha habido algún cambio importante recientemente?".
219
+
189
220
  ---
190
221
 
191
222
  ## Servidor MCP: proporcione a sus agentes acceso a este corpus
@@ -211,14 +242,19 @@ Herramientas disponibles:
211
242
 
212
243
  | Herramienta | Propósito |
213
244
  |---|---|
214
- | `search` | FTS5 + vec híbrido; reordenamiento opcional. Modo predeterminado para consultas en lenguaje natural. |
245
+ | `search` | FTS5 + vec híbrido; reordenamiento opcional. Modo predeterminado para consultas en lenguaje natural. (+ límite superior de fecha `until`) |
215
246
  | `lookup_entity` | Historial exacto de entidades: variables de entorno, comandos, ID de modelos, CVE, etc. |
216
- | `latest_releases` | Lanzamientos recientes en todos los productos (o en uno). |
247
+ | `latest_releases` | Lanzamientos recientes en todos los productos (o en uno). (+ límite inferior de fecha `since`) |
217
248
  | `get_release` | Contenido completo de un lanzamiento. |
218
249
  | `list_products` | Enumeración con conteos + última versión. |
219
250
  | `top_entities` | Entidades más mencionadas por tipo. |
220
- | `list_synergies` | Flujos de trabajo entre productos, seleccionados. |
251
+ | `list_synergies` | Flujos de trabajo entre productos. (+ filtro de producto opcional) |
221
252
  | `read_synergy` | Texto completo de un archivo de sinergia. |
253
+ | `get_changes_since` | **Nuevo.** Cambios en un intervalo de tiempo, agrupados por producto y versión. Entradas: `since` (obligatorio), `until?`, `product?`, `kind?`, `limit?`. |
254
+ | `search_breaking_changes` | **Nuevo.** Lista plana de cambios importantes: no se necesita un término de búsqueda. Entradas: `product?`, `since?`, `until?`, `limit?`. |
255
+ | `compare_versions` | **Nuevo.** Todos los cambios entre dos versiones de un producto. Entradas: `product`, `from_version`, `to_version`. |
256
+
257
+ Las tres nuevas herramientas replican `hk diff` / `hk breaking` y el flujo de trabajo de comparación de versiones que anteriormente requería scripts. Consulte [manual → servidor MCP](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/mcp-server/) para obtener los esquemas de entrada completos.
222
258
 
223
259
  ---
224
260
 
@@ -226,11 +262,11 @@ Herramientas disponibles:
226
262
 
227
263
  Panorama general en [SOURCES.md](SOURCES.md).
228
264
 
229
- - **Nivel 1 (Lanzamientos de GitHub)** — `gh api repos/<owner>/<repo>/releases` para 22 productos, incluidos los SDK de Anthropic (7 idiomas), los SDK de Agentes (2), la CLI de ant, claude-code-action, claude-code-security-review y 15 SDK del ecosistema MCP.
230
- - **Nivel 2 (Markdown sin formato)** — `anthropics/claude-code/CHANGELOG.md` + `Aider-AI/aider/HISTORY.md`
231
- - **Nivel 3 (HTML / RSS)** — `platform.claude.com/docs/release-notes`, `support.claude.com/articles/12138966`, `cursor.com/changelog/rss.xml`, `sourcegraph.com/changelog/featured.rss` (filtrado), `github.blog/changelog/label/copilot/`, `code.visualstudio.com/updates/v1_NNN`
232
- - **Nivel 4 (Catálogo)** — `anthropics/skills`, `claude-plugins-{official,community}`, `knowledge-work-plugins`
233
- - **Nivel 5 (Asesoramiento)** — Cuenta de X `@ClaudeCodeLog`; espejo de changelog de marckrenn.
265
+ - **Nivel 1 (Lanzamientos de GitHub)** — `gh api repos/<owner>/<repo>/releases` para 23 productos, incluidos los SDK de Anthropic (7 idiomas), los SDK de Agentes (2), la CLI de ant, **claude-code** (ahora se sincroniza automáticamente a través de gh-releases a partir de la versión 1.1, anteriormente se inicializaba manualmente), claude-code-action, claude-code-security-review y 15 SDK del ecosistema MCP.
266
+ - **Nivel 2 (markdown sin formato)** — `Aider-AI/aider/HISTORY.md`. El analizador genérico `keep-a-changelog` (v1.1+) también está disponible para cualquier producto cuyo origen sea un archivo CHANGELOG.md en formato Keep-a-Changelog: configúrelo mediante una entrada en `products.yaml`.
267
+ - **Nivel 3 (HTML / RSS)** — `platform.claude.com/docs/release-notes`, `support.claude.com/articles/12138966`, `cursor.com/changelog/rss.xml`, `sourcegraph.com/changelog/featured.rss` (filtrado), `github.blog/changelog/label/copilot/`, `code.visualstudio.com/updates/v1_NNN`.
268
+ - **Nivel 4 (catálogo)** — `anthropics/skills`, `claude-plugins-{official,community}`, `knowledge-work-plugins`.
269
+ - **Nivel 5 (asesoramiento)** — Cuenta de X `@ClaudeCodeLog`; espejo de changelog de marckrenn.
234
270
 
235
271
  Estrategias de recuperación: `gh-releases | rss | raw-changelog | html-scrape | catalog | playwright`. Nuevo producto = una entrada en `products.yaml`.
236
272
 
@@ -255,7 +291,7 @@ Estrategias de recuperación: `gh-releases | rss | raw-changelog | html-scrape |
255
291
  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.
256
292
 
257
293
  ```bash
258
- pnpm test # unit + integration + regression (~16s, 382 tests)
294
+ pnpm test # unit + integration + regression (~18s, 508 tests)
259
295
  pnpm test:watch # interactive
260
296
  pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
261
297
  pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
@@ -265,9 +301,9 @@ Estructura:
265
301
 
266
302
  | Directorio | Lo que cubre |
267
303
  |-----|----------------|
268
- | `test/unit/` | por módulo: extracción, ingestión, consulta, base de datos, incrustación, híbrido, recuperación + cada proveedor + recuperación de RSS/changelog/HTML + recuperación del registro MCP + recuperación de Playwright + configuración de productos. |
269
- | `test/integration/` | de extremo a extremo: canalización, sincronización, servidor MCP (JSON-RPC de stdio), CLI. |
270
- | `test/regression/` | §8.1–§8.18: Cada uno protege contra un error real corregido durante el desarrollo. |
304
+ | `test/unit/` | por módulo: extracción, ingestión, consulta (incl. `until` / navegación / desde / comparación), base de datos (incl. migración de configuración de dimensión v3), incrustación, híbrido, extracción + cada proveedor (Ollama / Voyage / **OpenAI**) + extracción de RSS/changelog (incl. analizador **keep-a-changelog**) / HTML + extracción del registro MCP + extracción de Playwright + configuración de productos + ingestión/consulta de sinergias. |
305
+ | `test/integration/` | de extremo a extremo: canalización, sincronización, servidor MCP (JSON-RPC de stdio, 11 herramientas), CLI (incl. `hk diff`, `hk breaking`). |
306
+ | `test/regression/` | §8.1–§8.19 cada uno protege contra un error real corregido durante el desarrollo (§8.19: la paginación de salida temprana de ghReleases conserva los elementos dentro del intervalo). |
271
307
  | `test/smoke/` | Prueba completa con todo el corpus contra productos reales (1143 archivos). |
272
308
  | `test/fixtures/` | 3 productos falsos + respuestas HTTP simuladas (RSS / GH / Voyage / Cohere / Ollama / Anthropic / Smithery / Registro oficial de MCP). |
273
309
  | `test/helpers/` | `temp-db.ts`, `fetch-mock.ts`, `mcp-client.ts`, `seed-corpus.ts`, `golden-vectors.ts`, `playwright-mock.ts`, `yaml-fixtures.ts` |
@@ -308,8 +344,22 @@ La sincronización es idempotente: es seguro volver a ejecutarla después de un
308
344
 
309
345
  `hk embed` llama a un servicio de incrustación externo:
310
346
 
311
- - **Ollama (predeterminado)** asegúrese de que Ollama se está ejecutando (`ollama serve`) y que el modelo de incrustación se ha descargado (`ollama pull nomic-embed-text`).
312
- - **Voyage** configure `VOYAGE_API_KEY` en su entorno. Verifique su clave de API en [dash.voyageai.com](https://dash.voyageai.com).
347
+ - **Ollama (por defecto, 768 dimensiones)**: asegúrese de que Ollama esté en ejecución (`ollama serve`) y que el modelo de incrustación se haya descargado (`ollama pull nomic-embed-text`).
348
+ - **Voyage (1024 dimensiones)**: configure la variable de entorno `VOYAGE_API_KEY`. Verifique su clave de API en [dash.voyageai.com](https://dash.voyageai.com).
349
+ - **OpenAI (1536 dimensiones por defecto, configurable)**: configure la variable `OPENAI_API_KEY`. El modelo predeterminado es `text-embedding-3-small`; puede cambiarlo con `OPENAI_EMBED_MODEL` (por ejemplo, `text-embedding-3-large` para 3072 dimensiones). Utilícelo a través de `hk hybrid --embed openai` o `hk embed --embed openai`.
350
+
351
+ **Incompatibilidad de dimensiones de incrustación al cambiar de proveedor**
352
+
353
+ Cada proveedor genera vectores de una dimensión fija (Ollama 768, Voyage 1024, OpenAI 1536 por defecto; OpenAI admite dimensiones configurables dentro del tamaño nativo del modelo). La base de datos almacena la dimensión activa en `schema_meta.embedding_dim`. Cambiar de proveedor a una dimensión diferente mientras existen fragmentos genera un error `EMBEDDING_DIM_MISMATCH` (un error de la aplicación) en lugar de corromper silenciosamente la tabla de vectores. Para cambiar:
354
+
355
+ ```bash
356
+ rm data/claude-synergy.db data/claude-synergy.db-wal data/claude-synergy.db-shm
357
+ hk init
358
+ hk ingest
359
+ hk embed --embed openai # new provider, new dim, fresh chunks_vec
360
+ ```
361
+
362
+ Para la truncación de Matryoshka de OpenAI (dimensión menor a la nativa), configure `OPENAI_EMBED_MODEL` y pase la dimensión deseada a través de la construcción del proveedor en `hk embed`; consulte la [sección de incrustaciones del manual](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cli-reference/#embedding-providers-and-dimensions) para obtener más detalles.
313
363
 
314
364
  **Incompatibilidad de versión de esquema / base de datos corrupta**
315
365
 
package/README.fr.md CHANGED
@@ -65,7 +65,7 @@ claude-synergy/
65
65
  │ └── plugins-{official,community,knowledge-work}/ # Plugin marketplaces
66
66
  ├── synergies/ # 12 curated cross-product workflows
67
67
  ├── src/ # TypeScript implementation
68
- ├── test/ # 382 tests (unit, integration, regression, smoke)
68
+ ├── test/ # 508 tests (unit, integration, regression, smoke)
69
69
  ├── data/claude-synergy.db # SQLite database (created by `hk init`)
70
70
  ├── schema.sql # Tier 2a tables (products, releases, changes, entities, FTS5, …)
71
71
  ├── schema-vec.sql # Tier 2b tables (chunks, chunks_vec, chunks_fts)
@@ -73,7 +73,7 @@ claude-synergy/
73
73
  └── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
74
74
  ```
75
75
 
76
- **Chiffres clés (à partir de la version 1.0.0) :** 44 produits / 1 186 fichiers de publication / 6 042 modifications / 1 225 entités / 12 synergies / 382 tests.
76
+ **Chiffres en direct (version v1.1.0) :** 44 produits / 1 186 fichiers de publication / 6 042 modifications / 1 225 entités / 12 synergies / 508 tests / 11 outils MCP / 17 commandes CLI.
77
77
 
78
78
  ---
79
79
 
@@ -84,11 +84,12 @@ claude-synergy/
84
84
  | **1 — corpus Markdown (bootstrap)** | ✅ réalisé | Study-swarm a alimenté 706 fichiers de publication de janvier à mai 2026 ; étendu à 1 186 par l'étape 4. |
85
85
  | **2a — SQLite + FTS5 + CLI** | ✅ réalisé | CLI `hk` ; 15 sous-commandes ; ingestion inférieure à 300 ms. |
86
86
  | **2b — sqlite-vec + récupération contextuelle** | ✅ réalisé | Fournisseur adaptable (aucun/structuré/ollama/claude-haiku contexte × ollama/voyage embed × aucun/ollama-judge/voyage/cohere rerank). |
87
- | **3 — synchronisation + serveur MCP** | ✅ réalisé | `hk fetch / sync / seed-markers` ; `claude-synergy-mcp` expose 8 outils via stdio. |
87
+ | **3 — synchronisation + serveur MCP** | ✅ réalisé | `hk fetch / sync / seed-markers` ; `claude-synergy-mcp` expose 11 outils via stdio (8 dans la version initiale, 3 ajoutés en v1.1). |
88
88
  | **4a — extension au-delà d'Anthropic** | ✅ réalisé | +15 SDK MCP, Cursor (RSS), Aider (HISTORY.md), Continue.dev, Cody Enterprise (RSS filtré). |
89
89
  | **4b — récupérateur HTML** | ✅ réalisé | GitHub Copilot + VS Code Chat (Windsurf nécessite Playwright — v0.7). |
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
+ | **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`. |
92
93
 
93
94
  Feuille de route pour la version 0.8+ : consultable dans [URGENT_FINDINGS.md](URGENT_FINDINGS.md) et les problèmes.
94
95
 
@@ -126,8 +127,12 @@ hk sync # combined fetch → ingest → embed (cron
126
127
  hk seed-markers # one-time setup after initial corpus
127
128
 
128
129
  # Search
129
- hk query "managed agents" # FTS5 keyword search
130
- hk hybrid "credential exfiltration" # FTS5 + vec hybrid via RRF (+ optional --rerank)
130
+ hk query "managed agents" # FTS5 keyword search (+ --until <date>)
131
+ hk hybrid "credential exfiltration" # FTS5 + vec hybrid via RRF (+ --rerank, --until)
132
+
133
+ # Windowed change browsing
134
+ hk diff [product] --since 7d # what changed in a window, grouped by product+version
135
+ hk breaking --since 30d # filter-browse of breaking changes (no search term)
131
136
 
132
137
  # Entity lookups
133
138
  hk env-var CLAUDE_CODE_WORKFLOWS # when introduced + history
@@ -136,7 +141,7 @@ hk model claude-opus-4-7 # model launch + mentions across products
136
141
  hk cve CVE-2025-66414 # CVE references in corpus
137
142
 
138
143
  # Browsing
139
- hk latest [--product X] [--limit N] # recent releases
144
+ hk latest [--product X] [--limit N] # recent releases (+ --since <date>)
140
145
  hk products # list all 44 with counts
141
146
  hk top env_var # most-mentioned by entity type
142
147
  # (env_var, slash_command, cli_option,
@@ -144,6 +149,8 @@ hk top env_var # most-mentioned by entity type
144
149
  # hook_event, setting_key)
145
150
  ```
146
151
 
152
+ **Nouveautés de la version v1.1 :** `hk diff` et `hk breaking` répondent à la question "qu'est-ce qui a changé récemment ?" sans nécessiter de terme de recherche. Les limites de date sont uniformes : chaque commande de navigation accepte `--since` et `--until` au format `AAAA-MM-JJ` (ou format ISO 8601 complet), ou sous forme relative (`7d`, `2w`, `3m`, `1y`).
153
+
147
154
  ---
148
155
 
149
156
  ## Exemples de flux de travail
@@ -186,6 +193,30 @@ $ hk hybrid "credential exfiltration" --limit 3
186
193
 
187
194
  La requête ne contient jamais "env_scrub" ; le système le détecte par similarité sémantique. La recherche FTS5 classique ne le trouve pas du tout.
188
195
 
196
+ **Ce qui a changé dans claude-code cette semaine :**
197
+ ```
198
+ $ hk diff claude-code --since 7d
199
+ claude-code@2.1.147 2026-05-21 (3 changes)
200
+ [added] Added the `Workflow` tool for deterministic multi-agent orchestration.
201
+ [changed] Slash commands now lazy-load until first invocation.
202
+ [fixed] Race condition in MCP server discovery on Windows.
203
+
204
+ claude-code@2.1.146 2026-05-19 (1 change)
205
+ [fixed] Restored `--debug` flag accidentally removed in 2.1.144.
206
+ ```
207
+
208
+ **Parcourir les modifications importantes dans l'ensemble des données :**
209
+ ```
210
+ $ hk breaking --since 30d --limit 5
211
+ 2026-05-15 claude-agent-sdk-python@0.2.82 Headless and SDK sessions now use Task tools by default.
212
+ 2026-05-14 claude-agent-sdk-typescript@0.3.142 Headless and SDK sessions now use Task tools by default.
213
+ 2026-05-08 anthropic-sdk-go@1.42.0 Removed deprecated `client.Beta()` namespace.
214
+ 2026-04-29 cursor@0.49.0 MCP server config moved from `cursor.json` to `.cursor/mcp.json`.
215
+ 2026-04-22 windsurf@1.10.0 Removed `cascade.run` JSON-RPC method.
216
+ ```
217
+
218
+ Pas de terme de recherche nécessaire — `hk breaking` est la réponse à la question "est-ce qu'il y a eu des modifications importantes récemment ?".
219
+
189
220
  ---
190
221
 
191
222
  ## Serveur MCP : donnez à vos agents accès à ce corpus
@@ -211,14 +242,19 @@ Outils exposés :
211
242
 
212
243
  | Outil | Fonctionnalité |
213
244
  |---|---|
214
- | `search` | FTS5 + recherche vectorielle ; réordonnancement optionnel. Mode par défaut pour les requêtes en langage naturel. |
245
+ | `search` | FTS5 + vecteur hybride ; réordonnancement optionnel. Mode par défaut pour les requêtes en langage naturel. (+ limite de date supérieure `until`) |
215
246
  | `lookup_entity` | Historique précis des entités : variables d'environnement, commandes, identifiants de modèles, CVE, etc. |
216
- | `latest_releases` | Dernières versions disponibles pour les différents produits (ou un seul). |
247
+ | `latest_releases` | Nouvelles versions récentes pour les produits (ou un seul). (+ limite de date inférieure `since`) |
217
248
  | `get_release` | Contenu complet d'une version. |
218
249
  | `list_products` | Énumération avec nombre d'occurrences + dernière version. |
219
250
  | `top_entities` | Entités les plus mentionnées par type. |
220
- | `list_synergies` | Flux de travail inter-produits sélectionnés. |
251
+ | `list_synergies` | Flux de travail inter-produits. (+ filtre `product` optionnel) |
221
252
  | `read_synergy` | Texte intégral d'un fichier de synergie. |
253
+ | `get_changes_since` | **Nouveau.** Modifications dans une fenêtre de temps, regroupées par produit + version. Entrées : `since` (obligatoire), `until?`, `product?`, `kind?`, `limit?`. |
254
+ | `search_breaking_changes` | **Nouveau.** Liste plate des modifications importantes — aucun terme de recherche n'est nécessaire. Entrées : `product?`, `since?`, `until?`, `limit?`. |
255
+ | `compare_versions` | **Nouveau.** Toutes les modifications entre deux versions d'un même produit. Entrées : `product`, `from_version`, `to_version`. |
256
+
257
+ Les trois nouveaux outils reprennent `hk diff` / `hk breaking` et le flux de travail de comparaison de versions qui nécessitait auparavant un script. Consultez [manuel → serveur MCP](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/mcp-server/) pour les schémas d'entrée complets.
222
258
 
223
259
  ---
224
260
 
@@ -226,11 +262,11 @@ Outils exposés :
226
262
 
227
263
  Vue d'ensemble complète dans [SOURCES.md](SOURCES.md).
228
264
 
229
- - **Niveau 1 (Dépôts GitHub)** — `gh api repos/<owner>/<repo>/releases` pour 22 produits, y compris les SDK Anthropic (7 langages), les SDK Agent (2), l'interface de ligne de commande ant, claude-code-action, claude-code-security-review, et 15 SDK de l'écosystème MCP.
230
- - **Niveau 2 (Markdown brut)** — `anthropics/claude-code/CHANGELOG.md` + `Aider-AI/aider/HISTORY.md`
231
- - **Niveau 3 (HTML / RSS)** — `platform.claude.com/docs/release-notes`, `support.claude.com/articles/12138966`, `cursor.com/changelog/rss.xml`, `sourcegraph.com/changelog/featured.rss` (filtré), `github.blog/changelog/label/copilot/`, `code.visualstudio.com/updates/v1_NNN`
232
- - **Niveau 4 (Catalogue)** — `anthropics/skills`, `claude-plugins-{official,community}`, `knowledge-work-plugins`
233
- - **Niveau 5 (Conseils)** — Compte X `@ClaudeCodeLog` ; miroir de changelog de marckrenn.
265
+ - **Niveau 1 (Publications GitHub)** — `gh api repos/<owner>/<repo>/releases` pour 23 produits, y compris les SDK Anthropic (7 langages), les SDK Agent (2), l'outil CLI ant, **claude-code** (maintenant synchronisé automatiquement via gh-releases depuis la version v1.1 — auparavant configuré manuellement), claude-code-action, claude-code-security-review, et 15 SDK de l'écosystème MCP.
266
+ - **Niveau 2 (Markdown brut)** — `Aider-AI/aider/HISTORY.md`. L'analyseur générique `keep-a-changelog` (v1.1+) est également disponible pour tout produit dont la source est un fichier CHANGELOG.md au format Keep-a-Changelog — à configurer via une entrée dans `products.yaml`.
267
+ - **Niveau 3 (HTML / RSS)** — `platform.claude.com/docs/release-notes`, `support.claude.com/articles/12138966`, `cursor.com/changelog/rss.xml`, `sourcegraph.com/changelog/featured.rss` (filtré), `github.blog/changelog/label/copilot/`, `code.visualstudio.com/updates/v1_NNN`.
268
+ - **Niveau 4 (catalogue)** — `anthropics/skills`, `claude-plugins-{official,community}`, `knowledge-work-plugins`.
269
+ - **Niveau 5 (conseils)** — Compte X `@ClaudeCodeLog` ; miroir de changelog de marckrenn.
234
270
 
235
271
  Stratégies de récupération : `gh-releases | rss | raw-changelog | html-scrape | catalog | playwright`. Nouveau produit = une entrée dans `products.yaml`.
236
272
 
@@ -255,7 +291,7 @@ Index complet dans [synergies/INDEX.md](synergies/INDEX.md).
255
291
  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.
256
292
 
257
293
  ```bash
258
- pnpm test # unit + integration + regression (~16s, 382 tests)
294
+ pnpm test # unit + integration + regression (~18s, 508 tests)
259
295
  pnpm test:watch # interactive
260
296
  pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
261
297
  pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
@@ -265,9 +301,9 @@ Structure :
265
301
 
266
302
  | Dossier | Ce qu'il couvre |
267
303
  |-----|----------------|
268
- | `test/unit/` | par module — extraction, ingestion, requête, base de données, intégration, recherche vectorielle, récupération + tous les fournisseurs + récupération-rss/changelog/html + récupération-mcp-registry + récupération-playwright + configuration des produits. |
269
- | `test/integration/` | de bout en bout — pipeline, synchronisation, serveur MCP (JSON-RPC via le flux standard), interface de ligne de commande. |
270
- | `test/regression/` | §8.1–§8.18 : chaque section protège contre un bug réel corrigé pendant le développement. |
304
+ | `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. |
305
+ | `test/integration/` | de bout en bout — pipeline, synchronisation, serveur MCP (JSON-RPC stdio, 11 outils), CLI (incl. `hk diff`, `hk breaking`). |
306
+ | `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). |
271
307
  | `test/smoke/` | Test complet sur l'ensemble des fichiers (1 143 fichiers) simulant les produits réels. |
272
308
  | `test/fixtures/` | 3 produits factices + réponses HTTP simulées (RSS / GH / Voyage / Cohere / Ollama / Anthropic / Smithery / Registre MCP officiel). |
273
309
  | `test/helpers/` | `temp-db.ts`, `fetch-mock.ts`, `mcp-client.ts`, `seed-corpus.ts`, `golden-vectors.ts`, `playwright-mock.ts`, `yaml-fixtures.ts` |
@@ -308,8 +344,22 @@ La synchronisation est idempotente : il est sûr de la relancer après un échec
308
344
 
309
345
  La commande `hk embed` appelle un service d'intégration externe :
310
346
 
311
- - **Ollama (par défaut)** : assurez-vous qu'Ollama est en cours d'exécution (`ollama serve`) et que le modèle d'intégration est téléchargé (`ollama pull nomic-embed-text`).
312
- - **Voyage** : définissez la variable d'environnement `VOYAGE_API_KEY`. Vérifiez votre clé API sur [dash.voyageai.com](https://dash.voyageai.com).
347
+ - **Ollama (par défaut, 768 dimensions)** : assurez-vous qu'Ollama est en cours d'exécution (`ollama serve`) et que le modèle d'intégration est téléchargé (`ollama pull nomic-embed-text`).
348
+ - **Voyage (1024 dimensions)** : définissez la variable d'environnement `VOYAGE_API_KEY`. Vérifiez votre clé API sur [dash.voyageai.com](https://dash.voyageai.com).
349
+ - **OpenAI (1536 dimensions par défaut, configurable)** : définissez la variable `OPENAI_API_KEY`. Le modèle par défaut est `text-embedding-3-small`; vous pouvez le modifier avec `OPENAI_EMBED_MODEL` (par exemple, `text-embedding-3-large` pour 3072 dimensions). Utilisez-le via `hk hybrid --embed openai` ou `hk embed --embed openai`.
350
+
351
+ **Incompatibilité de la dimension des vecteurs lors du changement de fournisseur**
352
+
353
+ Chaque fournisseur produit des vecteurs d'une dimension fixe (Ollama 768, Voyage 1024, OpenAI 1536 par défaut – OpenAI prend en charge une dimension configurable dans les limites de la taille native du modèle). La base de données stocke la dimension active dans `schema_meta.embedding_dim`. Le changement de fournisseur entre des dimensions différentes alors que des fragments existent déclenche une erreur `EMBEDDING_DIM_MISMATCH` (une erreur de l'application) plutôt que de corrompre silencieusement la table des vecteurs. Pour changer de fournisseur :
354
+
355
+ ```bash
356
+ rm data/claude-synergy.db data/claude-synergy.db-wal data/claude-synergy.db-shm
357
+ hk init
358
+ hk ingest
359
+ hk embed --embed openai # new provider, new dim, fresh chunks_vec
360
+ ```
361
+
362
+ Pour la troncature Matryoshka d'OpenAI (dimension inférieure à la dimension native), définissez `OPENAI_EMBED_MODEL` et passez la dimension souhaitée via la construction du fournisseur dans `hk embed` – consultez la [section sur les intégrations du manuel](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cli-reference/#embedding-providers-and-dimensions) pour plus de détails.
313
363
 
314
364
  **Incompatibilité de version du schéma / base de données corrompue**
315
365