- The 2.1.1 installer, checksum, and release notes are published through GitHub Releases.
+ The 2.3.0 installer, SHA-256 checksum, and release notes are published through GitHub Releases.
-## ToolKnit 2.1
+## ToolKnit 2.3
-ToolKnit Desktop 2.1 is a local file workbench for Windows. It brings everyday file processing, image and Markdown creation, developer tools, AI content production, professional document workflows, and IDE Agent automation into one product system.
+ToolKnit Desktop 2.3 is a local file workbench for Windows. It brings everyday file processing, image and Markdown creation, developer tools, AI content production, professional document workflows, and IDE Agent automation into one product system.
The same local file can be previewed in the desktop app, batch-processed by the CLI, or called by an MCP Agent, with explicit input, output, progress, error, and safety boundaries.
-
60
Desktop tools
+
65
Desktop tools
12
Categories
46
MCP capabilities
3
Ways to work
@@ -68,7 +68,21 @@ The same local file can be previewed in the desktop app, batch-processed by the
-## What's new in the 2.1 series
+## What's new in 2.3
+
+V2.3 adds five desktop tools and strengthens update handling, dependency downloads, administrator relaunch, rounded-corner rendering, and tool-page interactions:
+
+- `Teleprompter`: smooth scrolling, mirroring, focus mode, and sentence-level voice following driven by Windows speech recognition or ToolKnit offline recognition.
+- `Add PDF Page Numbers`: page ranges, numbering styles, starting values, text templates, position and appearance previews, with page numbers written as vector instructions.
+- `Crop PDF`: visual selection, precise margins, shared or per-page adjustments, and lossless cropping by changing PDF page boundaries.
+- `Background Removal`: transparent-background generation with an on-demand local model, edge refinement, background preview, and source-resolution export.
+- `Excel to PDF`: batch XLSX, XLS, and ODS conversion through a ToolKnit-managed local LibreOffice runtime, including WPS workbook compatibility.
+
+The release also hardens real-world Windows behavior: idle-time GitHub Release checks can be deferred without uploading usage data; the installer carries the WebView2 bootstrapper; dependency downloads, installation-stage messaging, and administrator relaunch are more reliable; tool navigation, export dialogs, and rounded-corner rendering are consistent; and a compatible PDF.js build fixes PDF loading on older WebView2 runtimes.
+
+The desktop app, Tauri bundle, Rust crate, and `@toolknit/cli` share version `2.3.0`. Release checks cover the 65-tool desktop help map, 46 MCP capabilities, frontend regressions, and Rust tests.
+
+### Foundation from the 2.1 series
The 2.1 series adds 11 desktop tools and delivers a broader upgrade across custom backgrounds, glass interactions, local dependency reuse, task lifecycle management, and failure recovery. Heavy editors and algorithm modules load on demand, while Workers, canvases, listeners, and temporary resources are released when a tool closes.
@@ -152,15 +166,15 @@ The 2.1 series adds 11 desktop tools and delivers a broader upgrade across custo
## Complete tool catalog
-The 12 desktop categories below contain all 60 tools. Names correspond to in-app entries; CLI and MCP capabilities use the same input/output contracts as each tool becomes ready.
+The 12 desktop categories below contain all 65 tools. Names correspond to in-app entries; CLI and MCP capabilities use the same input/output contracts as each tool becomes ready.
-
PDF tools · 9
+
PDF tools · 12
-`PDF Merge` · `PDF Split` · `PDF to Image` · `PDF Editor` · `PDF Page Rotate` · `PDF Encrypt` · `PDF Decrypt` · `PDF Compress` · `PDF Enhance`
+`PDF Merge` · `PDF Split` · `Add PDF Page Numbers` · `Crop PDF` · `PDF to Image` · `PDF Editor` · `PDF Page Rotate` · `PDF Encrypt` · `PDF Decrypt` · `PDF Compress` · `PDF Enhance` · `Excel to PDF`
-Supports drag sorting, page-by-page preview, page selection, rotation, text replacement, text and image insertion, append merge, password protection, scanned-document enhancement, and multiple compression levels. PDFs, passwords, and exported results are processed locally by default.
+Supports drag sorting, page-by-page preview, selected-page export, page numbering, lossless cropping, rotation, text replacement, text and image insertion, append merge, password protection, scanned-document enhancement, multiple compression levels, and local workbook rendering. PDFs, workbooks, passwords, and exported results are processed locally by default.
PPT tools · 7
@@ -171,12 +185,12 @@ Supports drag sorting, page-by-page preview, page selection, rotation, text repl
Supports page rendering, page selection, PNG/JPG/WebP output, duplicate asset filtering, title/body/notes extraction, Markdown/TXT/JSON export, media cleanup, and structured outlines plus editable PPTX drafts generated from a brief and source material. The PPT rendering runtime is downloaded on demand.
-
Image tools · 6
+
Image tools · 7
-`Image Crop` · `Smart Color Replace` · `Image Format Converter` · `Image Compressor` · `Long Image Stitcher` · `Icon Generator`
+`Image Crop` · `Smart Color Replace` · `Background Removal` · `Image Format Converter` · `Image Compressor` · `Long Image Stitcher` · `Icon Generator`
-Supports ratio presets and composition guides for cropping, connected-region color replacement, JPG/PNG/WebP/BMP/GIF/SVG conversion, batch compression, horizontal/vertical/seamless stitching of images or PDF pages, and multi-size PNG, ICO, and SVG icon generation with ZIP output.
+Supports ratio presets and composition guides for cropping, connected-region color replacement, local-model background removal, JPG/PNG/WebP/BMP/GIF/SVG conversion, batch compression, horizontal/vertical/seamless stitching of images or PDF pages, and multi-size PNG, ICO, and SVG icon generation with ZIP output.
Audio tools · 4
@@ -195,12 +209,12 @@ Supports MP3, AAC, WAV, FLAC, ALAC, OGG, WMA, and other formats, offline BPM ana
Supports MP4, AVI, MKV, MOV, WebM, FLV, WMV, TS, M4V, and other formats, exact-time PNG/JPG frame export, and palette-optimized GIF creation from clips up to 30 seconds.
-
Text and transcription · 4
+
Text and transcription · 5
-`Markdown Document Editor` · `Audio/Video Transcription` · `Text Statistics` · `Text Formatter`
+`Markdown Document Editor` · `Audio/Video Transcription` · `Teleprompter` · `Text Statistics` · `Text Formatter`
-The Markdown editor provides GFM, Mermaid, math, a heading outline, draft recovery, and offline export. After downloading a Whisper model locally, the app can transcribe Chinese and English audio/video offline and export TXT, SRT, and JSON. Text Statistics and Text Formatter help inspect and clean up plain text.
+The Markdown editor provides GFM, Mermaid, math, a heading outline, draft recovery, and offline export. After downloading a Whisper model locally, the app can transcribe Chinese and English audio/video offline and export TXT, SRT, and JSON; the same local recognition can drive teleprompter voice following. Text Statistics and Text Formatter help inspect and clean up plain text.
Calculator tools · 5
@@ -262,7 +276,7 @@ CLI and MCP require explicit input and output paths by default and do not overwr
## Technology stack
-ToolKnit 2.1 combines a lightweight desktop container with local file engines. The web app, desktop app, CLI, and MCP share clear input/output boundaries.
+ToolKnit 2.3 combines a lightweight desktop container with local file engines. The web app, desktop app, CLI, and MCP share clear input/output boundaries.
@@ -307,7 +321,7 @@ ToolKnit 2.1 combines a lightweight desktop container with local file engines. T
-
+
@@ -325,10 +339,10 @@ ToolKnit 2.1 combines a lightweight desktop container with local file engines. T
## Product previews
-
+
-
2.1 workbench home · Custom wallpaper · Glass cards · Unified search and category navigation
+
ToolKnit workbench home · Custom wallpaper · Glass cards · Unified search and category navigation
ToolKnit.com web version · ready to use
@@ -366,9 +380,9 @@ Open [ToolKnit.com](https://toolknit.com) to start using the web tools without i
### Install the Windows desktop app
-Download the installer from [GitHub Releases](https://github.com/ZihangDong/toolknit-desktop/releases). The 2.1.1 installer, checksum files, and release notes are kept on the Release page. Verify the SHA-256 checksum before running the installer.
+Get the 2.3.0 installer, release notes, and matching `.sha256` file from [GitHub Releases](https://github.com/ZihangDong/toolknit-desktop/releases). Download only from this repository's Release page and verify the SHA-256 checksum before running the installer.
-**Code-signing status:** Version 2.1.1 does not use the SignPath signing workflow. The project has applied for SignPath Foundation open-source code-signing support; once approved and integrated, future versions will follow the [code-signing policy](CODE_SIGNING_POLICY.md).
+**Code-signing status:** Version 2.3.0 is not yet Authenticode-signed, so Windows may display an “Unknown publisher” or SmartScreen prompt. Confirm the download source and SHA-256 checksum before continuing. Future signed releases will follow the [code-signing policy](CODE_SIGNING_POLICY.md).
### Run from source
@@ -448,7 +462,9 @@ ToolKnit's code, documentation, tests, design, and issue reports are built throu
## Support the project
-If ToolKnit helps your work, a one-time donation supports testing devices, dependency mirrors, documentation maintenance, and future development. Support is not a paid outsourcing promise; it helps the project remain open, clean, maintainable, and continuously updated.
+Keeping ToolKnit free and continuously updated currently costs the author more than CNY 500 per month for AI-assisted development and testing alone, paid out of pocket. Carrying that cost alone is becoming difficult. If ToolKnit helps your work, a one-time donation supports AI testing, compatibility devices, dependency mirrors, documentation maintenance, and future development.
+
+After confirmation, supporters may join the ToolKnit preview group to test upcoming builds and submit feature ideas. The group is for discussion, testing, and collecting requirements; a donation is not a purchase of functionality and does not guarantee implementation or priority.
@@ -494,5 +510,5 @@ ToolKnit Desktop and the CLI/MCP source code are released under the [Apache Lice
The license does not grant rights to the ToolKnit name, logos, visual identity, domains, official website, hosted web services, service accounts, or other independently operated products. See [NOTICE](NOTICE).
- ToolKnit Desktop 2.1 · Local-first tools for real work
+ ToolKnit Desktop 2.3 · Local-first tools for real work
diff --git a/toolknit-desktop/assets/id-photo/clothing/blouse-white-women.png b/toolknit-desktop/assets/id-photo/clothing/blouse-white-women.png
new file mode 100644
index 0000000..7a5df00
Binary files /dev/null and b/toolknit-desktop/assets/id-photo/clothing/blouse-white-women.png differ
diff --git a/toolknit-desktop/assets/id-photo/clothing/jk-sailor-gray.png b/toolknit-desktop/assets/id-photo/clothing/jk-sailor-gray.png
new file mode 100644
index 0000000..4c6aa90
Binary files /dev/null and b/toolknit-desktop/assets/id-photo/clothing/jk-sailor-gray.png differ
diff --git a/toolknit-desktop/assets/id-photo/clothing/jk-sailor-navy.png b/toolknit-desktop/assets/id-photo/clothing/jk-sailor-navy.png
new file mode 100644
index 0000000..fa2e862
Binary files /dev/null and b/toolknit-desktop/assets/id-photo/clothing/jk-sailor-navy.png differ
diff --git a/toolknit-desktop/assets/id-photo/clothing/jk-vest-plaid.png b/toolknit-desktop/assets/id-photo/clothing/jk-vest-plaid.png
new file mode 100644
index 0000000..1dc2cf2
Binary files /dev/null and b/toolknit-desktop/assets/id-photo/clothing/jk-vest-plaid.png differ
diff --git a/toolknit-desktop/assets/id-photo/clothing/shirt-blue-men.png b/toolknit-desktop/assets/id-photo/clothing/shirt-blue-men.png
new file mode 100644
index 0000000..0a828fd
Binary files /dev/null and b/toolknit-desktop/assets/id-photo/clothing/shirt-blue-men.png differ
diff --git a/toolknit-desktop/assets/id-photo/clothing/shirt-white-men.png b/toolknit-desktop/assets/id-photo/clothing/shirt-white-men.png
new file mode 100644
index 0000000..de68e81
Binary files /dev/null and b/toolknit-desktop/assets/id-photo/clothing/shirt-white-men.png differ
diff --git a/toolknit-desktop/assets/id-photo/clothing/suit-beige-women.png b/toolknit-desktop/assets/id-photo/clothing/suit-beige-women.png
new file mode 100644
index 0000000..8456fd0
Binary files /dev/null and b/toolknit-desktop/assets/id-photo/clothing/suit-beige-women.png differ
diff --git a/toolknit-desktop/assets/id-photo/clothing/suit-charcoal-men.png b/toolknit-desktop/assets/id-photo/clothing/suit-charcoal-men.png
new file mode 100644
index 0000000..4c156e1
Binary files /dev/null and b/toolknit-desktop/assets/id-photo/clothing/suit-charcoal-men.png differ
diff --git a/toolknit-desktop/assets/id-photo/clothing/suit-dark-women.png b/toolknit-desktop/assets/id-photo/clothing/suit-dark-women.png
new file mode 100644
index 0000000..01cd97f
Binary files /dev/null and b/toolknit-desktop/assets/id-photo/clothing/suit-dark-women.png differ
diff --git a/toolknit-desktop/assets/id-photo/clothing/suit-navy-men.png b/toolknit-desktop/assets/id-photo/clothing/suit-navy-men.png
new file mode 100644
index 0000000..1277215
Binary files /dev/null and b/toolknit-desktop/assets/id-photo/clothing/suit-navy-men.png differ
diff --git a/toolknit-desktop/cli/README.md b/toolknit-desktop/cli/README.md
index cefa526..98ca265 100644
--- a/toolknit-desktop/cli/README.md
+++ b/toolknit-desktop/cli/README.md
@@ -113,7 +113,7 @@ PDF、图片、音视频、文本和非 AI PPT 等本地工具不需要 AI Key
```
```text
-请用 ToolKnit 生成一份可编辑 AI 文档,主题是“开源工具箱 v2.0 发布说明”,输出 PDF、预览图和控件编号图。生成后先检查编号图,如果版式空白或元素重叠,请继续调整工程文件并重新渲染。
+请用 ToolKnit 生成一份可编辑 AI 文档,主题是“开源工具箱 V2.3 发布说明”,输出 PDF、预览图和控件编号图。生成后先检查编号图,如果版式空白或元素重叠,请继续调整工程文件并重新渲染。
```
查看完整中英文 Agent 手册:
diff --git a/toolknit-desktop/cli/guides/agent-guide.en.md b/toolknit-desktop/cli/guides/agent-guide.en.md
index c124427..8d3927a 100644
--- a/toolknit-desktop/cli/guides/agent-guide.en.md
+++ b/toolknit-desktop/cli/guides/agent-guide.en.md
@@ -163,7 +163,7 @@ Call ToolKnit MCP's toolknit_ppt_to_image to export slides 1 through 3 of this p
When the user asks “make a PPT outline from these notes” or “plan an 8-slide talk,” the Agent should call `toolknit_ppt_outline`. This tool does not read PPTX and does not generate PPTX. It generates `outline.md`, `outline.json`, and `manifest.json` from the supplied text. If the source notes come from project files, read and summarize the text first, then pass the concise brief as `prompt`. Never put API keys in the prompt.
```text
-Call ToolKnit MCP's toolknit_ppt_outline to generate an 8-slide Chinese PPT outline from the product notes I provided. The audience is open-source users, and the purpose is to help them understand ToolKnit 2.0's local-first and AI Agent capabilities and want to try it. Save into this workspace's toolknit-output folder. Resolve the output directory to an absolute path first and do not overwrite existing outputs. Report the outline.md, outline.json, manifest.json paths and missing-info list.
+Call ToolKnit MCP's toolknit_ppt_outline to generate an 8-slide Chinese PPT outline from the product notes I provided. The audience is open-source users, and the purpose is to help them understand ToolKnit 2.3's local-first and AI Agent capabilities and want to try it. Save into this workspace's toolknit-output folder. Resolve the output directory to an absolute path first and do not overwrite existing outputs. Report the outline.md, outline.json, manifest.json paths and missing-info list.
```
```text
diff --git a/toolknit-desktop/cli/lib/mcp-server.mjs b/toolknit-desktop/cli/lib/mcp-server.mjs
index c5f11c4..6808e8f 100644
--- a/toolknit-desktop/cli/lib/mcp-server.mjs
+++ b/toolknit-desktop/cli/lib/mcp-server.mjs
@@ -1,7 +1,7 @@
import { errorPayload, ToolKnitError } from './errors.mjs';
import { executeTool, listTools } from './tool-registry.mjs';
-const SERVER_INFO = Object.freeze({ name: 'toolknit', version: '2.1.1' });
+const SERVER_INFO = Object.freeze({ name: 'toolknit', version: '2.3.0' });
const SUPPORTED_PROTOCOLS = new Set(['2024-11-05', '2025-03-26', '2025-06-18']);
function response(id, result) {
diff --git a/toolknit-desktop/cli/lib/transcription-runtime.mjs b/toolknit-desktop/cli/lib/transcription-runtime.mjs
index 180d698..5d18116 100644
--- a/toolknit-desktop/cli/lib/transcription-runtime.mjs
+++ b/toolknit-desktop/cli/lib/transcription-runtime.mjs
@@ -9,6 +9,7 @@ import { fileURLToPath } from 'node:url';
import { compactFfmpegError, resolveFfmpeg, runFfmpeg } from './ffmpeg-runtime.mjs';
import { cancellationError, isCancellationError, ToolKnitError, throwIfAborted } from './errors.mjs';
import { isPlaceholderAiApiKey, requestAiCompletion } from './core/ai-provider-core.js';
+import { simplifyChineseText } from './core/teleprompter-core.js';
const CLI_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
const PROJECT_ROOT = path.resolve(CLI_ROOT, '..');
@@ -331,6 +332,12 @@ export async function transcribeMedia({ input_path, output_dir, language = 'auto
throwIfAborted(options.signal);
const sources = { json: path.join(temporary, 'transcript.json'), srt: path.join(temporary, 'transcript.srt'), txt: path.join(temporary, 'transcript.txt') };
if (!await regularFile(sources.json) || !await regularFile(sources.srt) || !await regularFile(sources.txt)) throw new ToolKnitError('PROCESSING_FAILED', 'The transcription engine did not create every expected output.');
+ // Whisper sometimes answers in traditional characters; publish simplified.
+ for (const filePath of [sources.json, sources.srt, sources.txt]) {
+ const content = await readFile(filePath, 'utf8');
+ const simplified = simplifyChineseText(content);
+ if (simplified !== content) await writeFile(filePath, simplified, 'utf8');
+ }
report(options, 94, 'Publishing transcription results.');
const stem = safeStem(input);
let suffix = 0;
diff --git a/toolknit-desktop/cli/npm-shrinkwrap.json b/toolknit-desktop/cli/npm-shrinkwrap.json
index b10cbb9..beaa54e 100644
--- a/toolknit-desktop/cli/npm-shrinkwrap.json
+++ b/toolknit-desktop/cli/npm-shrinkwrap.json
@@ -1,12 +1,12 @@
{
"name": "@toolknit/cli",
- "version": "2.1.1",
+ "version": "2.3.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@toolknit/cli",
- "version": "2.1.1",
+ "version": "2.3.0",
"license": "Apache-2.0",
"dependencies": {
"@napi-rs/canvas": "^1.0.1",
diff --git a/toolknit-desktop/cli/package.json b/toolknit-desktop/cli/package.json
index ca58356..985a7db 100644
--- a/toolknit-desktop/cli/package.json
+++ b/toolknit-desktop/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@toolknit/cli",
- "version": "2.1.1",
+ "version": "2.3.0",
"license": "Apache-2.0",
"description": "Local-first file processing CLI and MCP server for ToolKnit",
"type": "module",
diff --git a/toolknit-desktop/cli/toolknit.mjs b/toolknit-desktop/cli/toolknit.mjs
index c9d23d1..abbe611 100644
--- a/toolknit-desktop/cli/toolknit.mjs
+++ b/toolknit-desktop/cli/toolknit.mjs
@@ -41,7 +41,7 @@ import { editAiTableProject, generateAiTableProject, inspectAiTableProjectFile,
import { installTranscriptionModel, listTranscriptionModels, setCurrentTranscriptionModel, transcribeMedia } from './lib/transcription-runtime.mjs';
import { TaskRunner } from './lib/shared/task-runtime.mjs';
-const VERSION = '2.1.1';
+const VERSION = '2.3.0';
const CLI_ABORT_CONTROLLER = new AbortController();
let CLI_SIGNAL_COUNT = 0;
diff --git a/toolknit-desktop/docs/agent-guide.en.md b/toolknit-desktop/docs/agent-guide.en.md
index c124427..8d3927a 100644
--- a/toolknit-desktop/docs/agent-guide.en.md
+++ b/toolknit-desktop/docs/agent-guide.en.md
@@ -163,7 +163,7 @@ Call ToolKnit MCP's toolknit_ppt_to_image to export slides 1 through 3 of this p
When the user asks “make a PPT outline from these notes” or “plan an 8-slide talk,” the Agent should call `toolknit_ppt_outline`. This tool does not read PPTX and does not generate PPTX. It generates `outline.md`, `outline.json`, and `manifest.json` from the supplied text. If the source notes come from project files, read and summarize the text first, then pass the concise brief as `prompt`. Never put API keys in the prompt.
```text
-Call ToolKnit MCP's toolknit_ppt_outline to generate an 8-slide Chinese PPT outline from the product notes I provided. The audience is open-source users, and the purpose is to help them understand ToolKnit 2.0's local-first and AI Agent capabilities and want to try it. Save into this workspace's toolknit-output folder. Resolve the output directory to an absolute path first and do not overwrite existing outputs. Report the outline.md, outline.json, manifest.json paths and missing-info list.
+Call ToolKnit MCP's toolknit_ppt_outline to generate an 8-slide Chinese PPT outline from the product notes I provided. The audience is open-source users, and the purpose is to help them understand ToolKnit 2.3's local-first and AI Agent capabilities and want to try it. Save into this workspace's toolknit-output folder. Resolve the output directory to an absolute path first and do not overwrite existing outputs. Report the outline.md, outline.json, manifest.json paths and missing-info list.
```
```text
diff --git a/toolknit-desktop/docs/cli-agent.md b/toolknit-desktop/docs/cli-agent.md
index 25f006f..10fdd6b 100644
--- a/toolknit-desktop/docs/cli-agent.md
+++ b/toolknit-desktop/docs/cli-agent.md
@@ -1,6 +1,6 @@
# ToolKnit CLI and IDE Agent
-ToolKnit Desktop and `@toolknit/cli` are separate v2.1 deliverables. The CLI runs file operations directly and never starts, drives, or depends on the desktop UI.
+ToolKnit Desktop and `@toolknit/cli` are separate v2.3 deliverables. The CLI runs file operations directly and never starts, drives, or depends on the desktop UI.
## Installation and checks
@@ -21,7 +21,7 @@ For a local release archive, install with npm's optional network checks disabled
```powershell
npm pack .\cli
-npm install --global --no-audit --no-fund --prefer-offline .\toolknit-cli-2.1.1.tgz
+npm install --global --no-audit --no-fund --prefer-offline .\toolknit-cli-2.3.0.tgz
```
## Command help
@@ -154,13 +154,13 @@ AI table publication is atomic across the export, editable project, preview, and
## Planned AI polish contract
-AI text polish is not registered as a CLI command or MCP tool in current v2.1. Its future interface will accept one bounded UTF-8 text input, an explicit style instruction, and a separately configured provider credential; it will return polished text only and never write a file by default. It will report `analyze` and `polish` phases, reject missing credentials, inputs above 12,000 UTF-16 code units, provider timeouts, malformed direction data, malformed text responses, and responses above 30,000 characters.
+AI text polish is not registered as a CLI command or MCP tool in current v2.3. Its future interface will accept one bounded UTF-8 text input, an explicit style instruction, and a separately configured provider credential; it will return polished text only and never write a file by default. It will report `analyze` and `polish` phases, reject missing credentials, inputs above 12,000 UTF-16 code units, provider timeouts, malformed direction data, malformed text responses, and responses above 30,000 characters.
The desktop application may offer provider-suggested styles, but a future headless caller must supply the chosen style explicitly. It must not read the desktop application's local storage or expose provider error bodies, prompts, API keys, or text content in diagnostics.
## Planned AI translation contract
-AI translation is not registered as a CLI command or MCP tool in current v2.1. Its future interface will accept one bounded UTF-8 text input, an explicit target language, and a separately configured provider credential; it will return translated text plus optional aligned sentence pairs, without writing a file by default. It will report `translate` and `validate` phases, reject missing credentials, inputs above 12,000 UTF-16 code units, unknown target languages, provider timeouts, malformed responses, and responses above 60,000 characters.
+AI translation is not registered as a CLI command or MCP tool in current v2.3. Its future interface will accept one bounded UTF-8 text input, an explicit target language, and a separately configured provider credential; it will return translated text plus optional aligned sentence pairs, without writing a file by default. It will report `translate` and `validate` phases, reject missing credentials, inputs above 12,000 UTF-16 code units, unknown target languages, provider timeouts, malformed responses, and responses above 60,000 characters.
A later headless implementation must treat the caller's original input as authoritative: model-supplied source sentence fields may be used only after equivalence validation and can never replace the supplied source. It must not infer a Latin-script source language as English, read desktop-local credentials, or include prompts, API keys, or provider error bodies in logs.
@@ -176,7 +176,7 @@ The source must be a non-symbolic regular file below 20 MB and 40 megapixels. Im
## Planned image conversion contract
-Image format conversion is being hardened for a later CLI/MCP release. It is **not** registered as a CLI command or MCP tool in the current v2.1 package, so an IDE Agent must not claim it is available yet.
+Image format conversion is being hardened for a later CLI/MCP release. It is **not** registered as a CLI command or MCP tool in the current v2.3 package, so an IDE Agent must not claim it is available yet.
The future interface will accept one to 100 local JPG/JPEG, PNG, WebP, BMP, or GIF files, a validated target format, and one explicit output directory. It will reject non-regular files, files over 20 MB, images over 40 megapixels, unsupported target formats, duplicate inputs, concurrent conversion jobs, and failed writes. It will never overwrite an existing output and will report per-file success or failure, output paths, progress, cancellation, and a nonzero processing error when no file succeeds.
@@ -184,13 +184,13 @@ The current desktop encoder preserves image dimensions. JPEG output is RGB becau
## Planned image compression contract
-Image compression is also **not** registered as a CLI command or MCP tool in the current v2.1 package. The future interface will accept one to 100 local JPG/JPEG, PNG, or WebP files, a `high`, `medium`, or `low` quality policy, and one explicit output directory. It will apply the same 20 MB per-file and 40-megapixel limits as image conversion, run one conversion job at a time, and report each file's result without overwriting an existing output.
+Image compression is also **not** registered as a CLI command or MCP tool in the current v2.3 package. The future interface will accept one to 100 local JPG/JPEG, PNG, or WebP files, a `high`, `medium`, or `low` quality policy, and one explicit output directory. It will apply the same 20 MB per-file and 40-megapixel limits as image conversion, run one conversion job at a time, and report each file's result without overwriting an existing output.
An output is published only when it is strictly smaller than its source. BMP and GIF are intentionally outside the contract: the bundled encoder cannot safely provide a smaller BMP, and GIF handling can discard animation frames. JPEG and PNG quality policies affect their encoders. WebP is explicitly lossless in the desktop implementation, so the selected quality policy has no effect on WebP files and clients must report it as lossless optimization rather than imply lossy quality control.
## Planned icon generator contract
-The icon generator is not registered as a CLI command or MCP tool in current v2.1. Its future interface will accept one local PNG/JPEG/WebP image and one explicit ZIP output path. It will reject non-regular files, input files above 20 MB, images above 20 megapixels, generated archives above 32 MB, canceled jobs, and unsafe or pre-existing output paths. A successful archive contains fixed-size PNG icons, `icon.ico`, `favicon.ico`, and an SVG wrapper; progress covers decoding, raster generation, archive creation, and atomic publication.
+The icon generator is not registered as a CLI command or MCP tool in current v2.3. Its future interface will accept one local PNG/JPEG/WebP image and one explicit ZIP output path. It will reject non-regular files, input files above 20 MB, images above 20 megapixels, generated archives above 32 MB, canceled jobs, and unsafe or pre-existing output paths. A successful archive contains fixed-size PNG icons, `icon.ico`, `favicon.ico`, and an SVG wrapper; progress covers decoding, raster generation, archive creation, and atomic publication.
It intentionally excludes BMP and GIF sources because static icon output cannot preserve GIF animation and these formats do not provide a useful, deterministic headless contract. It must never reuse a desktop-local provider key or depend on the desktop application being visible.
@@ -234,7 +234,7 @@ Inputs above 1,000,000 UTF-16 code units, files above the corresponding UTF-8 si
## Planned text formatting contract
-Text formatting is not registered as a CLI command or MCP tool in current v2.1. Its future interface will accept one explicit UTF-8 text file or UTF-8 standard input, one declared action, and one explicit UTF-8 output file. It will reject binary or undecodable input, input and output over 1,000,000 UTF-16 code units, more than 100,000 lines for line-oriented actions, unknown actions, unsafe paths, same-path writes, and unapproved output overwrites. Output is written to a temporary file and atomically published only after transformation succeeds.
+Text formatting is not registered as a CLI command or MCP tool in current v2.3. Its future interface will accept one explicit UTF-8 text file or UTF-8 standard input, one declared action, and one explicit UTF-8 output file. It will reject binary or undecodable input, input and output over 1,000,000 UTF-16 code units, more than 100,000 lines for line-oriented actions, unknown actions, unsafe paths, same-path writes, and unapproved output overwrites. Output is written to a temporary file and atomically published only after transformation succeeds.
The action set is `uppercase`, `lowercase`, `titlecase`, `capitalize`, `trim-spaces`, `trim-lines`, `remove-empty-lines`, `remove-duplicate-lines`, `sort-asc`, `sort-desc`, `add-line-numbers`, `remove-line-numbers`, `reverse-lines`, `reverse-text`, `to-half-width`, and `to-full-width`. Sorting uses the fixed `zh-Hans-u-co-pinyin` collator with numeric comparison. `remove-line-numbers` only removes an initial sequence of at least two consecutive line numbers beginning at 1, preventing an ordinary year or numeric heading from being silently deleted. A headless caller must receive structured progress and errors without echoing text content into logs.
diff --git a/toolknit-desktop/index.html b/toolknit-desktop/index.html
index 2cc7d22..94da875 100644
--- a/toolknit-desktop/index.html
+++ b/toolknit-desktop/index.html
@@ -6,6 +6,13 @@
ToolKnit Desktop
+
+
+
+
+
+
+