diff --git a/README.md b/README.md
index 96a7a09..57b4b7a 100644
--- a/README.md
+++ b/README.md
@@ -8,8 +8,8 @@
-
-
+
+
@@ -105,27 +105,6 @@ codex resume --cd /new/path/finspec
ThreadRelink never automatically treats a nested folder as its parent Git
repository.
-## Migrating from RepoRecall
-
-ThreadRelink `0.4.0` recognizes existing RepoRecall data:
-
-- `~/.reporecall/registry.json`
-- `reporecall.projectId` in local Git configuration
-- `.reporecall/project.json`
-- `REPORECALL_HOME` and `REPORECALL_CODEX_PATH`
-
-When the new location is absent, valid legacy data is copied to the
-ThreadRelink namespace with the same project UUID. Existing new data is never
-overwritten, and legacy files remain available as a rollback copy.
-
-The renamed VS Code extension has a new extension ID. Uninstall the old
-RepoRecall VSIX after installing ThreadRelink to avoid duplicate Activity Bar
-views. VS Code asks for metadata consent again, but this does not affect Codex
-transcripts or migrated project links.
-
-Legacy `reporecall` CLI and command aliases remain available for one
-compatibility release.
-
## CLI
Requirements:
@@ -190,8 +169,9 @@ pnpm package:vscode
CI runs checks and VSIX packaging on macOS, Linux, and Windows.
Publishing is triggered by a matching `vX.Y.Z` GitHub Release after all checks
-pass. See [Marketplace publishing](docs/MARKETPLACE_PUBLISHING.md) for the
-one-time identity setup and release procedure.
+pass. See the
+[Marketplace publishing guide (Chinese)](docs/MARKETPLACE_PUBLISHING.md) for
+the one-time identity setup and release procedure.
## License
diff --git a/README.zh-CN.md b/README.zh-CN.md
index bc47991..e7ec836 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -8,8 +8,8 @@
-
-
+
+
@@ -95,24 +95,6 @@ codex resume --cd /new/path/finspec
ThreadRelink 不会自动把嵌套文件夹当成父级 Git 仓库。
-## 从 RepoRecall 迁移
-
-ThreadRelink `0.4.0` 可以识别以下旧数据:
-
-- `~/.reporecall/registry.json`
-- Git 本地配置中的 `reporecall.projectId`
-- `.reporecall/project.json`
-- `REPORECALL_HOME` 和 `REPORECALL_CODEX_PATH`
-
-如果新位置还没有数据,ThreadRelink 会验证旧数据,并使用相同 UUID 将其复制到
-新命名空间。已有的新数据不会被覆盖,旧文件也会保留,方便回退。
-
-新版 VS Code 扩展使用新的扩展 ID。安装 ThreadRelink 后,请卸载旧的 RepoRecall
-VSIX,避免活动栏同时出现两个入口。VS Code 会重新询问一次元数据授权,但这不会
-影响 Codex 聊天文件和已经迁移的项目关联。
-
-旧的 `reporecall` CLI 和命令别名会继续兼容一个版本。
-
## CLI
要求:
diff --git a/docs/MARKETPLACE_PUBLISHING.md b/docs/MARKETPLACE_PUBLISHING.md
index f90a568..6836e86 100644
--- a/docs/MARKETPLACE_PUBLISHING.md
+++ b/docs/MARKETPLACE_PUBLISHING.md
@@ -1,22 +1,21 @@
-# Marketplace publishing
+# Marketplace 发布
-ThreadRelink is published as `ascendho.threadrelink`. A GitHub Release whose tag
-matches the extension version publishes the VSIX to the Visual Studio
-Marketplace and attaches the same package to the GitHub Release.
+ThreadRelink 以 `ascendho.threadrelink` 发布。创建与扩展版本一致的 GitHub
+Release 后,自动化工作流会把 VSIX 发布到 Visual Studio Marketplace,并将同一
+文件添加到 GitHub Release。
-Marketplace installs receive VS Code extension updates automatically. A
-manually installed VSIX does not receive automatic updates by default.
+通过 Marketplace 安装的扩展会随 VS Code 自动更新。手动安装的 VSIX 默认不会
+自动更新。
-## One-time identity setup
+## 一次性身份配置
-The publishing workflow uses Microsoft Entra ID and GitHub OIDC. It does not
-store a Personal Access Token.
+发布工作流使用 Microsoft Entra ID 和 GitHub OIDC,不保存 Personal Access
+Token。
-1. Sign in to Azure DevOps and the Visual Studio Marketplace with the same
- Microsoft account.
-2. Create the Marketplace publisher `ascendho`. Publisher IDs cannot be renamed.
-3. In an Azure subscription, create a resource group and a user-assigned managed
- identity:
+1. 使用同一个 Microsoft 账户登录 Azure DevOps 和 Visual Studio Marketplace。
+2. 创建 Marketplace publisher `ascendho`。Publisher ID 创建后无法修改。
+3. 在 Azure subscription 中创建 resource group 和 user-assigned managed
+ identity:
```bash
az group create \
@@ -28,9 +27,8 @@ store a Personal Access Token.
--resource-group threadrelink-publishing
```
-4. Give the identity Reader access to the subscription. Replace the
- placeholders with values returned by `az account show` and
- `az identity show`:
+4. 为该 identity 授予 subscription 的 Reader 权限。将占位符替换为
+ `az account show` 和 `az identity show` 返回的值:
```bash
az role assignment create \
@@ -40,8 +38,8 @@ store a Personal Access Token.
--scope /subscriptions/
```
-5. Add a federated credential that trusts only the `marketplace` GitHub
- Environment in this repository:
+5. 添加 federated credential,只信任本仓库的 `marketplace` GitHub
+ Environment:
```bash
az identity federated-credential create \
@@ -53,30 +51,29 @@ store a Personal Access Token.
--audiences api://AzureADTokenExchange
```
- This repository uses GitHub's immutable owner and repository IDs in OIDC
- subjects. The numeric IDs remain stable if the owner or repository is
- renamed. A fork or transferred repository must use the subject shown in its
- own GitHub OIDC assertion.
+ OIDC subject 使用 GitHub 不可变的 owner ID 和 repository ID。即使 owner
+ 或仓库改名,这些数字 ID 也不会变化。Fork 或转移仓库后,必须改用该仓库自身
+ GitHub OIDC assertion 中的 subject。
-6. Create a GitHub Environment named `marketplace`. Restrict its deployment
- tags to `v*`, then add these non-secret environment variables:
+6. 创建名为 `marketplace` 的 GitHub Environment,将 deployment tag 限制为
+ `v*`,并添加以下非敏感环境变量:
- `AZURE_CLIENT_ID`
- `AZURE_TENANT_ID`
- `AZURE_SUBSCRIPTION_ID`
-7. Run **Check Marketplace Publishing Identity** with `verify_access` set to
- `false`. Copy the Marketplace profile ID shown in the workflow summary.
-8. In the Marketplace publisher management page, add that profile ID as a
- member of `ascendho` with the Contributor role.
-9. Run the identity check again with `verify_access` set to `true`. Do not create
- a release until this check succeeds.
+7. 运行 **Check Marketplace Publishing Identity**,将 `verify_access` 设置为
+ `false`,并复制 workflow summary 中显示的 Marketplace profile ID。
+8. 在 Marketplace publisher 管理页面中,将该 profile ID 添加为 `ascendho`
+ 的 Contributor。
+9. 再次运行身份检查,将 `verify_access` 设置为 `true`。检查成功前不要创建
+ Release。
-## Publish a version
+## 发布新版本
-1. Update `packages/vscode/package.json` to the new `X.Y.Z` version.
-2. Add the same version heading to `packages/vscode/CHANGELOG.md`.
-3. Run:
+1. 将 `packages/vscode/package.json` 更新为新的 `X.Y.Z` 版本。
+2. 在 `packages/vscode/CHANGELOG.md` 中添加相同的版本标题。
+3. 运行:
```bash
pnpm check
@@ -84,23 +81,8 @@ store a Personal Access Token.
pnpm package:vscode
```
-4. Merge the release commit into `main`.
-5. Create and publish a GitHub Release whose tag is exactly `vX.Y.Z`.
+4. 将 release commit 合并到 `main`。
+5. 创建并发布 Tag 恰好为 `vX.Y.Z` 的 GitHub Release。
-The release workflow repeats all checks, attaches `threadrelink.vsix`, and
-publishes the same package to the Marketplace. Duplicate workflow retries are
-safe because publishing uses `--skip-duplicate`.
-
-## First Marketplace installation
-
-The development VSIX used the old extension ID
-`ascendho.threadrelink-vscode`. Uninstall it once, then install the Marketplace
-edition:
-
-```bash
-code --uninstall-extension ascendho.threadrelink-vscode
-code --install-extension ascendho.threadrelink
-```
-
-This changes only the installed extension identity. ThreadRelink's registry,
-stable project UUIDs, and Codex conversation files are preserved.
+Release 工作流会重新执行全部检查、附加 `threadrelink.vsix`,并将同一个包发布到
+Marketplace。发布命令使用 `--skip-duplicate`,因此重复运行工作流是安全的。
diff --git a/packages/vscode/README.md b/packages/vscode/README.md
index 35aa06b..24fb99f 100644
--- a/packages/vscode/README.md
+++ b/packages/vscode/README.md
@@ -8,8 +8,8 @@
-
-
+
+
@@ -65,16 +65,6 @@ codex resume --cd
An unconfigured project never displays all global conversations. A nested
folder also never inherits a parent Git project without an explicit choice.
-## Upgrading from RepoRecall
-
-ThreadRelink migrates valid RepoRecall registry, Git project IDs, and directory
-identity files while preserving their UUIDs. Existing ThreadRelink data is
-never overwritten, and legacy files remain as a rollback copy.
-
-This renamed extension has a new extension ID. Remove the old RepoRecall VSIX
-after installing ThreadRelink to avoid duplicate Activity Bar entries. Metadata
-consent is requested again for the new extension.
-
## Privacy
ThreadRelink reads thread ID, title/preview, timestamps, recorded cwd, archive
diff --git a/packages/vscode/package.json b/packages/vscode/package.json
index 68b7724..01df338 100644
--- a/packages/vscode/package.json
+++ b/packages/vscode/package.json
@@ -1,7 +1,7 @@
{
"name": "threadrelink",
"displayName": "ThreadRelink",
- "description": "Keep local Codex conversations discoverable after a repository is renamed or moved.",
+ "description": "A VS Code extension that keeps local Codex conversations discoverable after a repository is renamed or moved.",
"version": "0.4.0",
"icon": "resources/threadrelink.png",
"publisher": "ascendho",
diff --git a/packages/vscode/test/manifest.test.ts b/packages/vscode/test/manifest.test.ts
index 166e706..0e5156a 100644
--- a/packages/vscode/test/manifest.test.ts
+++ b/packages/vscode/test/manifest.test.ts
@@ -13,6 +13,7 @@ interface WalkthroughStep {
interface ExtensionManifest {
name: string;
displayName: string;
+ description: string;
version: string;
icon: string;
pricing: string;
@@ -44,6 +45,9 @@ describe("VS Code extension manifest", () => {
expect(manifest.name).toBe("threadrelink");
expect(manifest.publisher).toBe("ascendho");
expect(manifest.displayName).toBe("ThreadRelink");
+ expect(manifest.description).toBe(
+ "A VS Code extension that keeps local Codex conversations discoverable after a repository is renamed or moved.",
+ );
expect(manifest.version).toMatch(/^\d+\.\d+\.\d+$/);
expect(manifest.pricing).toBe("Free");
expect(manifest.galleryBanner).toEqual({