dsh-claude-move 0.4.9 → 0.4.10

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
@@ -2,7 +2,14 @@
2
2
 
3
3
  All notable changes to this project are documented here. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow [SemVer](https://semver.org/).
4
4
 
5
- ## [Unreleased]
5
+ ## [0.4.10] - 2026-09-23
6
+
7
+ ### Changed
8
+
9
+ - Move the fifteen `@deepseek-ai/dsh-*` dev/test pins from `0.1.7-alpha.1` to `0.1.7-alpha.2`, so the suite executes the alpha.2 host packages instead of the alpha.1 ones it was still testing against.
10
+ - The declared host range gains `|| >=0.1.7-0 <0.2.0` on both sites (`engines.dsh` and the `@deepseek-ai/dsh-tools` peer band), which now read `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0`. This is a correctness fix, not a tightening: under npm semver's prerelease rule a comparator set whose only prerelease comparators sit on earlier `[major, minor, patch]` tuples cannot admit a later alpha, so the three-clause range could not match the very host line this release targets. Nothing was narrowed and no existing segment moved.
11
+ - `dshWorkshop.compatibility.dshVersions` records `0.1.7-alpha.2`; the five-language README compatibility rows name `dsh 0.1.7-alpha.2` and quote the four-clause band; the `compat.yml` `profile-alpha` job installs the `0.1.7-alpha.2` CLI and bundle, while the `profile` job keeps covering the legacy `0.1.2-rc.1` line.
12
+ - `AGENTS.md`, `ARCHITECTURE.md`, `COMPLIANCE.md` and the `npm install` comments in the five READMEs now state the four-clause band, the `0.1.7-alpha.2` target and the `0.1.7-alpha.2` `profile-alpha` baseline. `COMPLIANCE.md` also picks up the peer carets the manifest actually declares (`@deepseek-ai/cordis` `^4.0.4`, `@deepseek-ai/schemastery` `^3.18.4`).
6
13
 
7
14
  ## [0.4.9] - 2026-09-22
8
15
 
package/README-es.md CHANGED
@@ -17,6 +17,7 @@
17
17
  [![Version](https://img.shields.io/github/v/tag/PerryLink/dsh-claude-move?label=version)](https://github.com/PerryLink/dsh-claude-move/releases)
18
18
  [![npm version](https://img.shields.io/npm/v/dsh-claude-move)](https://www.npmjs.com/package/dsh-claude-move)
19
19
  [![npm downloads](https://img.shields.io/npm/dm/dsh-claude-move)](https://www.npmjs.com/package/dsh-claude-move)
20
+ [![dshfind](https://dshfind.com/api/badge/PerryLink/dsh-claude-move?metric=downloads&lang=es)](https://dshfind.com/es/plugins/PerryLink/dsh-claude-move?ref=badge)
20
21
 
21
22
  [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
22
23
 
@@ -26,7 +27,7 @@
26
27
 
27
28
  ## Compatibilidad
28
29
 
29
- - Dirigido a `dsh 0.1.7-alpha.1` (perfil web, formato de sesión V4 en la línea actual); las dependencias peer requieren `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0`. Verificado el 2026-09-22 (puerta de tipos checkJs + 291 aserciones, 38 suites). Los logs importados vuelven a satisfacer la frontera de restauración actual: `tool/result` se escribe como mensaje de rol tool de primera clase de V4, y el traspaso de reanudación lleva un kind de origen propio del productor (`dsh-claude-move`), porque 0.1.7-alpha.1 retiró el origen comodín `{ kind: 'plugin', plugin }` tanto en la capa de tipos como en la admisión de filas durables. El botón «abrir sesión» del panel se renderiza deshabilitado con un título explicativo cuando el host no expone `sessions.open()`. Node `^22.19 || >=24`.
30
+ - Dirigido a `dsh 0.1.7-alpha.2` (perfil web, formato de sesión V4 en la línea actual); las dependencias peer requieren `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0`. Verificado el 2026-09-22 (puerta de tipos checkJs + 291 aserciones, 38 suites). Los logs importados vuelven a satisfacer la frontera de restauración actual: `tool/result` se escribe como mensaje de rol tool de primera clase de V4, y el traspaso de reanudación lleva un kind de origen propio del productor (`dsh-claude-move`), porque 0.1.7-alpha.1 retiró el origen comodín `{ kind: 'plugin', plugin }` tanto en la capa de tipos como en la admisión de filas durables. El botón «abrir sesión» del panel se renderiza deshabilitado con un título explicativo cuando el host no expone `sessions.open()`. Node `^22.19 || >=24`.
30
31
  `0.1.2-rc.1` (adaptado el 2026-09-04): el sobre de sesión conserva su campo ignorable solo para compatibilidad de lectura de logs almacenados - Session.append aún no puede estamparlo, por lo que el comportamiento de la puerta no cambia.
31
32
  - 0.4.0 incluye un shim de doble línea base para `sessionPersistence` en tiempo de ejecución, detectado por la forma de la API (nunca por versión): funcionan tanto la API heredada (`create`/`append`/`readFrom`, `list()` devolviendo cabeceras) como la costura de handle (`create` devolviendo un `SessionHandle`, `list()`/`stat()` devolviendo instantáneas). La costura de handle ya está publicada en la línea alpha (`@deepseek-ai/dsh-session-persistence` / `-jsonl` `0.1.5-rc.2`), así que el workflow de compatibilidad la cubre. En la ruta handle, cada append va seguido de `flush()` (barrera de durabilidad) y un `close()` emparejado (propiedad de escritor único); las cabeceras se sellan con la versión de formato actual del backend y un `isSeeded` explícito; las fuentes de modelo de asistente ausentes caen al provider. Ambas rutas de escritura toman su forma de la versión de formato que el propio backend declara: los eventos `assistant/message` sintetizados llevan `stream: []` desde el formato 2 (la frontera de restauración exige `Array.isArray(data.stream)`, así que sin él el log se escribía y se leía pero no se podía reanudar), y `tool/result` es un mensaje de rol tool de primera clase de V4 desde el formato 4, pero el envoltorio `tool-result` de v3 por debajo: nunca se escribe un log con una forma que su propio backend rechazaría. La limpieza del escaneo de importación se niega a ejecutarse cuando el `header.id` de un elemento listado no se puede resolver, por lo que `imports.json` nunca se vacía en silencio.
32
33
  - Última verificación con una instalación nueva desde tarball: escaneo real, importación por lotes real (reimportación idempotente), adjuntado al workspace y artefactos de persistencia confirmados; macOS/Linux cubiertos por la matriz de CI. Los logs importados usan el formato de sesión actual del backend (V4 en `0.1.7-alpha.1`, V3 en la línea `0.1.6`, v0 en `<= 0.1.2-rc.1`) y `dsh <= 0.1.2-rc.1` no puede leerlos (la actualización es unidireccional; la alternativa es reimportar desde el transcript de origen). La exportación vuelve a leer cada una de esas formas.
@@ -258,7 +259,7 @@ Este proyecto está licenciado bajo la Apache License 2.0; los siguientes compon
258
259
  ## Desarrollo
259
260
 
260
261
  ```sh
261
- npm install # peer deps: @deepseek-ai/dsh-tools@>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0, @deepseek-ai/cordis, schemastery
262
+ npm install # peer deps: @deepseek-ai/dsh-tools@>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0, @deepseek-ai/cordis, schemastery
262
263
  npm test # node --test test/*.test.mjs
263
264
  ```
264
265
 
package/README-hi.md CHANGED
@@ -17,6 +17,7 @@
17
17
  [![Version](https://img.shields.io/github/v/tag/PerryLink/dsh-claude-move?label=version)](https://github.com/PerryLink/dsh-claude-move/releases)
18
18
  [![npm version](https://img.shields.io/npm/v/dsh-claude-move)](https://www.npmjs.com/package/dsh-claude-move)
19
19
  [![npm downloads](https://img.shields.io/npm/dm/dsh-claude-move)](https://www.npmjs.com/package/dsh-claude-move)
20
+ [![dshfind](https://dshfind.com/api/badge/PerryLink/dsh-claude-move?metric=downloads&lang=hi)](https://dshfind.com/hi/plugins/PerryLink/dsh-claude-move?ref=badge)
20
21
 
21
22
  [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
22
23
 
@@ -26,7 +27,7 @@
26
27
 
27
28
  ## अनुकूलता
28
29
 
29
- - `dsh 0.1.7-alpha.1` (web profile, वर्तमान लाइन पर सत्र प्रारूप V4) को लक्षित करता है; peer निर्भरताएँ `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0` चाहिए। 2026-09-22 को सत्यापित (checkJs प्रकार गेट + 291 असर्शन, 38 सूट)। आयातित लॉग वर्तमान पुनर्स्थापन सीमा को फिर से पूरा करते हैं: `tool/result` V4 के प्रथम-श्रेणी tool रोल संदेश के रूप में लिखा जाता है, और रिज़्यूम हैंडऑफ़ उत्पादक-स्वामित्व वाला संदेश स्रोत kind (`dsh-claude-move`) लेकर चलता है, क्योंकि 0.1.7-alpha.1 ने सामान्य `{ kind: 'plugin', plugin }` स्रोत को प्रकार-परत और टिकाऊ-पंक्ति प्रवेश, दोनों से हटा दिया। जब होस्ट `sessions.open()` नहीं देता, पैनल का "सत्र खोलें" बटन विवरणी title के साथ निष्क्रिय रूप में प्रस्तुत होता है। Node `^22.19 || >=24`।
30
+ - `dsh 0.1.7-alpha.2` (web profile, वर्तमान लाइन पर सत्र प्रारूप V4) को लक्षित करता है; peer निर्भरताएँ `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0` चाहिए। 2026-09-22 को सत्यापित (checkJs प्रकार गेट + 291 असर्शन, 38 सूट)। आयातित लॉग वर्तमान पुनर्स्थापन सीमा को फिर से पूरा करते हैं: `tool/result` V4 के प्रथम-श्रेणी tool रोल संदेश के रूप में लिखा जाता है, और रिज़्यूम हैंडऑफ़ उत्पादक-स्वामित्व वाला संदेश स्रोत kind (`dsh-claude-move`) लेकर चलता है, क्योंकि 0.1.7-alpha.1 ने सामान्य `{ kind: 'plugin', plugin }` स्रोत को प्रकार-परत और टिकाऊ-पंक्ति प्रवेश, दोनों से हटा दिया। जब होस्ट `sessions.open()` नहीं देता, पैनल का "सत्र खोलें" बटन विवरणी title के साथ निष्क्रिय रूप में प्रस्तुत होता है। Node `^22.19 || >=24`।
30
31
  `0.1.2-rc.1` (2026-09-04 को अनुकूलित): सत्र लिफ़ाफ़ा अपना ignorable फ़ील्ड केवल संग्रहीत-लॉग पठन संगतता के लिए रखता है - Session.append अभी भी इसे स्टैम्प नहीं कर सकता, इसलिए गेट व्यवहार अपरिवर्तित है।
31
32
  - 0.4.0 में `sessionPersistence` के लिए दोहरी-बेसलाइन रनटाइम shim शामिल है, जिसे API आकार से पहचाना जाता है (संस्करण से कभी नहीं): लीगेसी API (`create`/`append`/`readFrom`, `list()` हेडर लौटाता है) और हैंडल सीम (`create` एक `SessionHandle` लौटाता है, `list()`/`stat()` स्नैपशॉट लौटाते हैं) दोनों काम करते हैं। हैंडल सीम अब alpha लाइन पर प्रकाशित है (`@deepseek-ai/dsh-session-persistence` / `-jsonl` `0.1.5-rc.2`), इसलिए compat वर्कफ़्लो उसे कवर करता है। हैंडल पथ पर हर append के बाद `flush()` (स्थायित्व अवरोध) और युग्मित `close()` (एकल-लेखक स्वामित्व) होता है; हेडर पर बैकएंड का वर्तमान प्रारूप संस्करण और स्पष्ट `isSeeded` अंकित होता है; अनुपस्थित assistant model स्रोत provider पर गिरते हैं। दोनों लेखन-पथ अपना आकार बैकएंड के स्वयं घोषित प्रारूप संस्करण से लेते हैं: संश्लेषित `assistant/message` ईवेंट प्रारूप 2 से `stream: []` लेकर आते हैं (पुनर्स्थापन सीमा `Array.isArray(data.stream)` माँगती है, इसलिए उसके बिना लॉग लिखा और पढ़ा तो जाता था पर फिर से शुरू नहीं हो सकता था), और `tool/result` प्रारूप 4 से V4 का प्रथम-श्रेणी tool रोल संदेश है, उसके नीचे v3 का `tool-result` आवरण — लॉग कभी ऐसी आकृति में नहीं लिखा जाता जिसे उसका अपना बैकएंड अस्वीकार कर दे। जब किसी सूचीबद्ध तत्व का `header.id` हल नहीं हो पाता तो आयात-स्कैन की सफ़ाई चलने से मना कर देती है, इसलिए `imports.json` कभी चुपचाप खाली नहीं होता।
32
33
  - अंतिम बार एक ताज़ा tarball इंस्टॉल के विरुद्ध सत्यापित: वास्तविक स्कैन, वास्तविक बैच आयात (आइडेम्पोटेंट पुनः-आयात), workspace जुड़ाव और पर्सिस्टेंस आर्टिफैक्ट की पुष्टि; macOS/Linux CI मैट्रिक्स द्वारा कवर हैं। आयातित लॉग बैकएंड के वर्तमान सत्र प्रारूप में हैं (`0.1.7-alpha.1` पर V4, `0.1.6` लाइन पर V3, `<= 0.1.2-rc.1` पर v0) और `dsh <= 0.1.2-rc.1` उन्हें पढ़ नहीं सकता (उन्नयन एकतरफ़ा है; विकल्प स्रोत transcript से पुनः आयात है)। निर्यात इनमें से हर आकृति को वापस पढ़ लेता है।
@@ -258,7 +259,7 @@ claude_export { sessionId: "...", path: "~/.claude/projects/<slug>/<id>.jsonl" }
258
259
  ## विकास
259
260
 
260
261
  ```sh
261
- npm install # peer deps: @deepseek-ai/dsh-tools@>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0, @deepseek-ai/cordis, schemastery
262
+ npm install # peer deps: @deepseek-ai/dsh-tools@>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0, @deepseek-ai/cordis, schemastery
262
263
  npm test # node --test test/*.test.mjs
263
264
  ```
264
265
 
package/README-pt.md CHANGED
@@ -17,6 +17,7 @@
17
17
  [![Version](https://img.shields.io/github/v/tag/PerryLink/dsh-claude-move?label=version)](https://github.com/PerryLink/dsh-claude-move/releases)
18
18
  [![npm version](https://img.shields.io/npm/v/dsh-claude-move)](https://www.npmjs.com/package/dsh-claude-move)
19
19
  [![npm downloads](https://img.shields.io/npm/dm/dsh-claude-move)](https://www.npmjs.com/package/dsh-claude-move)
20
+ [![dshfind](https://dshfind.com/api/badge/PerryLink/dsh-claude-move?metric=downloads&lang=pt)](https://dshfind.com/pt/plugins/PerryLink/dsh-claude-move?ref=badge)
20
21
 
21
22
  [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
22
23
 
@@ -26,7 +27,7 @@
26
27
 
27
28
  ## Compatibilidade
28
29
 
29
- - Direcionado a `dsh 0.1.7-alpha.1` (perfil web, formato de sessão V4 na linha atual); dependências peer exigem `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0`. Verificado em 2026-09-22 (portão de tipos checkJs + 291 asserções, 38 suítes). Os logs importados voltam a satisfazer a fronteira de restauração atual: `tool/result` é escrito como mensagem de papel tool de primeira classe do V4, e o repasse de retomada carrega um kind de origem próprio do produtor (`dsh-claude-move`), porque a 0.1.7-alpha.1 retirou a origem genérica `{ kind: 'plugin', plugin }` tanto na camada de tipos quanto na admissão de linhas duráveis. O botão «abrir sessão» do painel é renderizado desabilitado com um título explicativo quando o host não expõe `sessions.open()`. Node `^22.19 || >=24`.
30
+ - Direcionado a `dsh 0.1.7-alpha.2` (perfil web, formato de sessão V4 na linha atual); dependências peer exigem `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0`. Verificado em 2026-09-22 (portão de tipos checkJs + 291 asserções, 38 suítes). Os logs importados voltam a satisfazer a fronteira de restauração atual: `tool/result` é escrito como mensagem de papel tool de primeira classe do V4, e o repasse de retomada carrega um kind de origem próprio do produtor (`dsh-claude-move`), porque a 0.1.7-alpha.1 retirou a origem genérica `{ kind: 'plugin', plugin }` tanto na camada de tipos quanto na admissão de linhas duráveis. O botão «abrir sessão» do painel é renderizado desabilitado com um título explicativo quando o host não expõe `sessions.open()`. Node `^22.19 || >=24`.
30
31
  `0.1.2-rc.1` (adaptado em 2026-09-04): o envelope de sessão mantém seu campo ignorable apenas para compatibilidade de leitura de logs armazenados - o Session.append ainda não consegue estampá-lo, então o comportamento da porta não muda.
31
32
  - A 0.4.0 inclui um shim de linha de base dupla para `sessionPersistence` em tempo de execução, detectado pela forma da API (nunca pela versão): funcionam tanto a API legada (`create`/`append`/`readFrom`, `list()` retornando cabeçalhos) quanto a costura de handle (`create` retornando um `SessionHandle`, `list()`/`stat()` retornando snapshots). A costura de handle já está publicada na linha alpha (`@deepseek-ai/dsh-session-persistence` / `-jsonl` `0.1.5-rc.2`), então o fluxo de compatibilidade a cobre. No caminho handle, todo append é seguido de `flush()` (barreira de durabilidade) e um `close()` pareado (propriedade de escritor único); os cabeçalhos são carimbados com a versão de formato atual do backend e um `isSeeded` explícito; fontes de modelo de assistente ausentes caem para o provider. Ambos os caminhos de escrita tomam a forma da versão de formato que o próprio backend declara: os eventos `assistant/message` sintetizados carregam `stream: []` a partir do formato 2 (a fronteira de restauração exige `Array.isArray(data.stream)`, então sem isso o log era escrito e lido, mas não podia ser retomado), e `tool/result` é uma mensagem de papel tool de primeira classe do V4 a partir do formato 4, mas o invólucro `tool-result` do v3 abaixo disso — um log nunca é escrito numa forma que o próprio backend recusaria. A limpeza da varredura de importação se recusa a executar quando o `header.id` de um elemento listado não pode ser resolvido, então `imports.json` nunca é esvaziado silenciosamente.
32
33
  - Última verificação contra uma instalação nova de tarball: varredura real, importação em lote real (reimportação idempotente), anexo ao workspace e artefatos de persistência confirmados; macOS/Linux cobertos pela matriz de CI. Os logs importados usam o formato de sessão atual do backend (V4 em `0.1.7-alpha.1`, V3 na linha `0.1.6`, v0 em `<= 0.1.2-rc.1`) e `dsh <= 0.1.2-rc.1` não consegue lê-los (a atualização é unidirecional; a alternativa é reimportar do transcript de origem). A exportação lê de volta cada uma dessas formas.
@@ -258,7 +259,7 @@ Este projeto está licenciado sob a Apache License 2.0; os seguintes componentes
258
259
  ## Desenvolvimento
259
260
 
260
261
  ```sh
261
- npm install # peer deps: @deepseek-ai/dsh-tools@>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0, @deepseek-ai/cordis, schemastery
262
+ npm install # peer deps: @deepseek-ai/dsh-tools@>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0, @deepseek-ai/cordis, schemastery
262
263
  npm test # node --test test/*.test.mjs
263
264
  ```
264
265
 
package/README-zh.md CHANGED
@@ -17,6 +17,7 @@
17
17
  [![Version](https://img.shields.io/github/v/tag/PerryLink/dsh-claude-move?label=version)](https://github.com/PerryLink/dsh-claude-move/releases)
18
18
  [![npm version](https://img.shields.io/npm/v/dsh-claude-move)](https://www.npmjs.com/package/dsh-claude-move)
19
19
  [![npm downloads](https://img.shields.io/npm/dm/dsh-claude-move)](https://www.npmjs.com/package/dsh-claude-move)
20
+ [![dshfind](https://dshfind.com/api/badge/PerryLink/dsh-claude-move?metric=downloads&lang=zh)](https://dshfind.com/zh/plugins/PerryLink/dsh-claude-move?ref=badge)
20
21
 
21
22
  [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
22
23
 
@@ -26,7 +27,7 @@
26
27
 
27
28
  ## 兼容性
28
29
 
29
- - 面向 `dsh 0.1.7-alpha.1`(web profile,当前线会话格式 V4);peer 依赖要求 `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0`。已于 2026-09-22 核验(checkJs 类型门 + 291 项断言、38 个套件)。导入日志重新满足当前恢复边界:`tool/result` 写成 V4 一等 tool 角色消息,续聊交接摘要带生产者自有消息来源 kind(`dsh-claude-move`)——0.1.7-alpha.1 在类型层与落盘行准入层双双删除了笼统的 `{ kind: 'plugin', plugin }`。宿主没有 `sessions.open()` 时,面板「打开会话」按钮置灰渲染并带说明 title。
30
+ - 面向 `dsh 0.1.7-alpha.2`(web profile,当前线会话格式 V4);peer 依赖要求 `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0`。已于 2026-09-22 核验(checkJs 类型门 + 291 项断言、38 个套件)。导入日志重新满足当前恢复边界:`tool/result` 写成 V4 一等 tool 角色消息,续聊交接摘要带生产者自有消息来源 kind(`dsh-claude-move`)——0.1.7-alpha.1 在类型层与落盘行准入层双双删除了笼统的 `{ kind: 'plugin', plugin }`。宿主没有 `sessions.open()` 时,面板「打开会话」按钮置灰渲染并带说明 title。
30
31
  `0.1.2-rc.1`(2026-09-04 已适配):会话信封保留 ignorable 字段但仅用于存量日志读取兼容——Session.append 仍无法盖章,门控行为不变。
31
32
  - 0.4.0 内置 `sessionPersistence` 双基线运行时 shim,按 API 形状特性探测(绝不按版本号猜测):旧 API(`create`/`append`/`readFrom`,`list()` 返回会话头)与 handle seam(`create` 返回 `SessionHandle`,`list()`/`stat()` 返回快照)都能工作。handle seam 已随 alpha 线发布(`@deepseek-ai/dsh-session-persistence` / `-jsonl` `0.1.5-rc.2`),因此 compat workflow 可以覆盖它。handle 路径上每次 append 之后必须 `flush()`(耐久屏障)并成对 `close()`(单写所有权);header 盖上后端当前格式版本并显式补 `isSeeded`;缺失的 assistant model 来源回退 provider。两条写盘路径都按后端自报的格式版本决定形状:合成的 `assistant/message` 自格式 2 起带 `stream: []`(恢复边界断言 `Array.isArray(data.stream)`,缺它则日志能写入、能读回却不可续聊);`tool/result` 自格式 4 起是 V4 一等 tool 角色消息,之下折回 v3 的 `tool-result` 包裹块——绝不写出目标后端自己会拒收的形状。导入扫描的清理在列表元素的 `header.id` 无法解析时拒绝执行,绝不静默清空 `imports.json`。
32
33
  - 最近针对全新 tarball 安装验证:真实扫描、真实批量导入(幂等重导入)、工作区挂载与持久化产物均已确认;macOS/Linux 由 CI 矩阵覆盖。导入日志使用后端当前的会话格式(`0.1.7-alpha.1` 上为 V4、`0.1.6` 线为 V3、`<= 0.1.2-rc.1` 为 v0),`dsh <= 0.1.2-rc.1` 无法读取(升级是单向的;回退办法是从源 transcript 重新导入)。导出的读取侧把上述每种形状都读得回来。
@@ -258,7 +259,7 @@ Web 面板:一个浮动迁移面板,包含项目/会话树、状态徽章(
258
259
  ## 开发
259
260
 
260
261
  ```sh
261
- npm install # peer 依赖:@deepseek-ai/dsh-tools@>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0、@deepseek-ai/cordis、schemastery
262
+ npm install # peer 依赖:@deepseek-ai/dsh-tools@>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0、@deepseek-ai/cordis、schemastery
262
263
  npm test # node --test test/*.test.mjs
263
264
  ```
264
265
 
package/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  # 🚚 dsh-claude-move
4
4
  - **1024 store channel**: `npm i -g dsh1024` once, then `dsh1024 plugin --profile web add dsh-claude-move` (counts toward the [deepseek1024.com](https://deepseek1024.com) install ranking).
5
5
  [![Gitee](https://img.shields.io/badge/Gitee-mirror-c71d23?logo=gitee)](https://gitee.com/perrylink/dsh-claude-move)
6
+ [![dshfind](https://dshfind.com/api/badge/PerryLink/dsh-claude-move?metric=downloads)](https://dshfind.com/plugins/PerryLink/dsh-claude-move?ref=badge)
6
7
 
7
8
  **Migrate Claude Code, Codex, OpenCode and Hermes into DeepSeek Harness — copy sessions, memories, skills, instructions and slash commands as resumable DSH sessions, copy-only and approval-gated.**
8
9
 
@@ -26,7 +27,7 @@
26
27
 
27
28
  ## Compatibility
28
29
 
29
- - Targets `dsh 0.1.7-alpha.1` (web profile, session format V4 on the current line); peer dependencies require `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0`. Verified 2026-09-22 (checkJs type gate + 291 assertions, 38 suites). Imported logs satisfy the current restore boundary again: `tool/result` is written as the V4 first-class tool-role message, and the resume handoff carries a producer-owned message source kind (`dsh-claude-move`) because 0.1.7-alpha.1 retired the catch-all `{ kind: 'plugin', plugin }` source in both the type layer and durable-row admission. The panel's "open session" button renders disabled with an explanatory title when the host exposes no `sessions.open()`. Node `^22.19 || >=24`.
30
+ - Targets `dsh 0.1.7-alpha.2` (web profile, session format V4 on the current line); peer dependencies require `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0`. Verified 2026-09-22 (checkJs type gate + 291 assertions, 38 suites). Imported logs satisfy the current restore boundary again: `tool/result` is written as the V4 first-class tool-role message, and the resume handoff carries a producer-owned message source kind (`dsh-claude-move`) because 0.1.7-alpha.1 retired the catch-all `{ kind: 'plugin', plugin }` source in both the type layer and durable-row admission. The panel's "open session" button renders disabled with an explanatory title when the host exposes no `sessions.open()`. Node `^22.19 || >=24`.
30
31
  `0.1.2-rc.1` (adapted 2026-09-04): the session envelope keeps its ignorable field for stored-log read compatibility only - Session.append still cannot stamp it, so audit-gate behavior is unchanged.
31
32
  - 0.4.0 ships a dual-baseline `sessionPersistence` runtime shim, feature-detected by API shape (never by version): the legacy API (`create`/`append`/`readFrom`, `list()` returning headers) and the handle seam (`create` returning a `SessionHandle`, `list()`/`stat()` returning snapshots) both work. The handle seam is published on the alpha line (`@deepseek-ai/dsh-session-persistence` / `-jsonl` `0.1.5-rc.2`), so the compat workflow covers it. On the handle path every append is followed by `flush()` (durability barrier) and a paired `close()` (single-writer ownership); headers are stamped with the backend's current format version plus an explicit `isSeeded`; missing assistant model sources fall back to the provider. Both write paths are shaped by the format version the backend itself reports: synthesized `assistant/message` events carry `stream: []` from format 2 up (the restore boundary asserts `Array.isArray(data.stream)`, so without it a log was written and readable but could not be resumed), and `tool/result` is a V4 first-class tool-role message from format 4 up but the v3 `tool-result` wrapper below it — a log is never written in a shape its own backend would refuse. Import-scan cleanup refuses to run when a listed element's `header.id` cannot be resolved, so `imports.json` is never silently cleared.
32
33
  - Last verified against a fresh tarball install: real scan, real batch import (idempotent re-import), workspace attach and persistence artifacts confirmed; macOS/Linux covered by the CI matrix. Imported logs use the backend's current session format (V4 on `0.1.7-alpha.1`, V3 on the `0.1.6` line, v0 on `<= 0.1.2-rc.1`) and cannot be read by `dsh <= 0.1.2-rc.1` (upgrading is one-way; re-import from the source transcript is the fallback). Export reads every one of those shapes back.
@@ -258,7 +259,7 @@ This project is licensed under the Apache License 2.0; the following MIT-license
258
259
  ## Development
259
260
 
260
261
  ```sh
261
- npm install # peer deps: @deepseek-ai/dsh-tools@>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0, @deepseek-ai/cordis, schemastery
262
+ npm install # peer deps: @deepseek-ai/dsh-tools@>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0, @deepseek-ai/cordis, schemastery
262
263
  npm test # node --test test/*.test.mjs
263
264
  ```
264
265
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dsh-claude-move",
3
3
  "description": "Four-source migration wizard: copy Claude Code, Codex, OpenCode and Hermes sessions, memories, skills, instructions and slash commands into DeepSeek Harness as resumable sessions — copy-only, approval-gated, idempotent",
4
- "version": "0.4.9",
4
+ "version": "0.4.10",
5
5
  "type": "module",
6
6
  "main": "./index.mjs",
7
7
  "exports": {
@@ -67,7 +67,7 @@
67
67
  "filesystem:write"
68
68
  ],
69
69
  "compatibility": {
70
- "dshVersions": ["0.1.2-rc.1", "0.1.7-alpha.1"]
70
+ "dshVersions": ["0.1.2-rc.1", "0.1.7-alpha.1", "0.1.7-alpha.2"]
71
71
  },
72
72
  "capability": {
73
73
  "id": "move-wizard",
@@ -83,9 +83,9 @@
83
83
  }
84
84
  },
85
85
  "peerDependencies": {
86
- "@deepseek-ai/cordis": "^4.0.2",
87
- "@deepseek-ai/dsh-tools": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0",
88
- "@deepseek-ai/schemastery": "^3.18.3"
86
+ "@deepseek-ai/cordis": "^4.0.4",
87
+ "@deepseek-ai/dsh-tools": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0",
88
+ "@deepseek-ai/schemastery": "^3.18.4"
89
89
  },
90
90
  "scripts": {
91
91
  "test": "node --test \"test/**/*.test.mjs\"",
@@ -108,29 +108,29 @@
108
108
  ],
109
109
  "engines": {
110
110
  "node": "^22.19.0 || >=24.0.0",
111
- "dsh": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0"
111
+ "dsh": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0"
112
112
  },
113
113
  "license": "Apache-2.0",
114
114
  "devDependencies": {
115
- "@deepseek-ai/cordis": "^4.0.3",
115
+ "@deepseek-ai/cordis": "^4.0.4",
116
116
  "@deepseek-ai/cordis-plugin-include": "^1.0.7",
117
117
  "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
118
118
  "@deepseek-ai/cosmokit": "^1.8.4",
119
- "@deepseek-ai/dsh-agent": "0.1.7-alpha.1",
120
- "@deepseek-ai/dsh-attachment": "0.1.7-alpha.1",
121
- "@deepseek-ai/dsh-brand": "0.1.7-alpha.1",
122
- "@deepseek-ai/dsh-commands": "0.1.7-alpha.1",
123
- "@deepseek-ai/dsh-invariants": "0.1.7-alpha.1",
124
- "@deepseek-ai/dsh-llm": "0.1.7-alpha.1",
125
- "@deepseek-ai/dsh-sandbox": "0.1.7-alpha.1",
126
- "@deepseek-ai/dsh-scope": "0.1.7-alpha.1",
127
- "@deepseek-ai/dsh-session": "0.1.7-alpha.1",
128
- "@deepseek-ai/dsh-session-projection": "0.1.7-alpha.1",
129
- "@deepseek-ai/dsh-system-prompt": "0.1.7-alpha.1",
130
- "@deepseek-ai/dsh-timeout": "0.1.7-alpha.1",
131
- "@deepseek-ai/dsh-tools": "0.1.7-alpha.1",
132
- "@deepseek-ai/dsh-typert-protocol": "0.1.7-alpha.1",
133
- "@deepseek-ai/dsh-user-approval": "0.1.7-alpha.1",
119
+ "@deepseek-ai/dsh-agent": "0.1.7-alpha.2",
120
+ "@deepseek-ai/dsh-attachment": "0.1.7-alpha.2",
121
+ "@deepseek-ai/dsh-brand": "0.1.7-alpha.2",
122
+ "@deepseek-ai/dsh-commands": "0.1.7-alpha.2",
123
+ "@deepseek-ai/dsh-invariants": "0.1.7-alpha.2",
124
+ "@deepseek-ai/dsh-llm": "0.1.7-alpha.2",
125
+ "@deepseek-ai/dsh-sandbox": "0.1.7-alpha.2",
126
+ "@deepseek-ai/dsh-scope": "0.1.7-alpha.2",
127
+ "@deepseek-ai/dsh-session": "0.1.7-alpha.2",
128
+ "@deepseek-ai/dsh-session-projection": "0.1.7-alpha.2",
129
+ "@deepseek-ai/dsh-system-prompt": "0.1.7-alpha.2",
130
+ "@deepseek-ai/dsh-timeout": "0.1.7-alpha.2",
131
+ "@deepseek-ai/dsh-tools": "0.1.7-alpha.2",
132
+ "@deepseek-ai/dsh-typert-protocol": "0.1.7-alpha.2",
133
+ "@deepseek-ai/dsh-user-approval": "0.1.7-alpha.2",
134
134
  "oxlint": "^0.18.1",
135
135
  "@types/node": "^22.0.0",
136
136
  "typescript": "^5.9.0"