@liustack/modlens 3.9.0 → 3.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.9.1 - 2026-08-13
4
+
5
+ - dsh follow-ups that missed the 3.9.0 tag during a GitHub outage: the plugin row references the bare package name via a root export, so the dsh plugin list shows `modlens` instead of `modlens/dsh`; install lines use `npx -y @deepseek-ai/dsh` (the developer preview has no global binary); and both READMEs state the paste status honestly, since the dsh DeepSeek adapter declares text-only input and Web-UI image admission runs before any plugin hook, `read_image` is the working path today and paste auto-read stays wired for when images can enter.
6
+
3
7
  ## 3.9.0 - 2026-08-13
4
8
 
5
9
  - **The first plug-in vision plugin for DeepSeek Harness (dsh).** The npm package is now also a dsh bundle: `dsh plugin --profile <name> add @liustack/modlens` is the whole install. It registers a native `read_image` tool (schema in every model request, so there is no trigger heuristic at all) that spawns the modlens CLI shipped in the same package, declares the vision schema as its canonical output contract, and renders evidence text for the model. Phase 2 rides `agent/pre-step`: images pasted or dropped into the dsh Web UI are read automatically and enter the step as modlens evidence blocks, with failed reads degrading to an explanatory note instead of rejecting the step (`autoRead: false` in the plugin row turns this off). The plugin imports no dsh packages (raw JSON-Schema tool registration, node builtins only), which is also the smallest possible surface against developer-preview churn. Verified end to end on a real dsh headless profile: the DeepSeek model called `read_image` and quoted the exact transcription back.
package/README.md CHANGED
@@ -32,7 +32,7 @@ Issues are welcome any time: [open one](https://github.com/liustack/modlens/issu
32
32
 
33
33
  ## Highlights
34
34
 
35
- **🥇 The first plug-in vision plugin for DeepSeek Harness (dsh):** one command, `dsh plugin --profile web add @liustack/modlens`, and the text-only DeepSeek model behind dsh reads images, as a native `read_image` tool plus automatic reading of pasted images.
35
+ **🥇 The first plug-in vision plugin for DeepSeek Harness (dsh):** one command, `npx -y @deepseek-ai/dsh plugin --profile web add @liustack/modlens`, and the text-only DeepSeek model behind dsh reads images through a native `read_image` tool. (Pasted-image auto-read is wired but currently blocked upstream: the dsh DeepSeek adapter declares text-only, so the Web UI refuses pastes before any plugin runs; reference images by file path for now.)
36
36
 
37
37
  **Paste an image and it reads it.** No saving to a file and passing a path first.
38
38
 
package/README.zh-CN.md CHANGED
@@ -32,7 +32,7 @@ DeepSeek 和 GLM 没有视觉能力,无法进行图片识别。ModLens 借助
32
32
 
33
33
  ## 亮点
34
34
 
35
- **🥇 全网第一个支持 DeepSeek Harness(dsh)的外挂视觉识别插件:**一条命令 `dsh plugin --profile web add @liustack/modlens`,dsh 背后的纯文本 DeepSeek 模型即可读图,原生 `read_image` 工具加粘贴图片自动识别。
35
+ **🥇 全网第一个支持 DeepSeek Harness(dsh)的外挂视觉识别插件:**一条命令 `npx -y @deepseek-ai/dsh plugin --profile web add @liustack/modlens`,dsh 背后的纯文本 DeepSeek 模型即可通过原生 `read_image` 工具读图。(粘贴自动识别已内置,但目前被上游拦截:dsh 的 DeepSeek 适配器声明纯文本,Web 界面在任何插件运行前就拒绝贴图,暂时请用文件路径指图。)
36
36
 
37
37
  **直接粘贴图片识别** 无需先保存成文件再提供路径。
38
38
 
@@ -60,10 +60,10 @@ agy # 浏览器完成
60
60
  **DeepSeek Harness(dsh)用户不走 skill 流程**,本包就是原生 dsh 插件:
61
61
 
62
62
  ```sh
63
- dsh plugin --profile web add @liustack/modlens
63
+ npx -y @deepseek-ai/dsh plugin --profile web add @liustack/modlens
64
64
  ```
65
65
 
66
- 装完即有 `read_image` 工具和粘贴图片自动识别。引擎配置同样在 `~/.modlens`,详见[宿主接入](docs/harness-setup.md)。
66
+ 装完即有 `read_image` 工具(粘贴自动识别待上游放行图片进气后自动生效)。引擎配置同样在 `~/.modlens`,详见[宿主接入](docs/harness-setup.md)。
67
67
 
68
68
  ## 用法
69
69
 
package/cordis.patch.yml CHANGED
@@ -1,4 +1,5 @@
1
- # dsh bundle layer: mount the modlens vision plugin (see dsh/index.js).
1
+ # dsh bundle layer: mount the modlens vision plugin (dsh/index.js via the
2
+ # package root export; bin stays the CLI, nothing imports the root otherwise).
2
3
  - insert:
3
4
  - id: modlens
4
- name: '@liustack/modlens/dsh'
5
+ name: '@liustack/modlens'
package/dist/main.js CHANGED
@@ -30560,7 +30560,7 @@ function recoverPastedImages(options = {}) {
30560
30560
  return result;
30561
30561
  }
30562
30562
  const program = new Command();
30563
- program.name("modlens").description("Plug-in vision for text-only LLMs: image in, structured JSON evidence out").version("3.9.0");
30563
+ program.name("modlens").description("Plug-in vision for text-only LLMs: image in, structured JSON evidence out").version("3.9.1");
30564
30564
  program.command("analyze", { isDefault: true }).description("Analyze an image into structured JSON evidence (default command)").requiredOption("-i, --input <path|url>", "Input image path or https URL").option("-o, --output <path>", "Write result JSON to a file").option("-m, --model <name>", "Provider model name").option("-p, --provider <name>", `Vision provider (${listProviders().join(", ")})`).option("--prompt <text>", "Extra focus for this image").option("--timeout <ms>", "Provider timeout in milliseconds", "180000").option("--provider-bin <path>", "Provider binary path (default: agy)").option("--workdir <path>", "Working directory for the provider").option(
30565
30565
  "--extra-body <json>",
30566
30566
  `JSON merged into the API request body, e.g. '{"thinking":{"type":"disabled"}}'`
@@ -53,7 +53,7 @@ OpenCode with DeepSeek: `opencode auth login`, pick DeepSeek and paste the key (
53
53
  dsh is different from the other harnesses: modlens plugs in as a native tool, not a prompt-triggered skill. The package itself is a dsh bundle, so one command installs it into a profile:
54
54
 
55
55
  ```sh
56
- dsh plugin --profile web add @liustack/modlens
56
+ npx -y @deepseek-ai/dsh plugin --profile web add @liustack/modlens
57
57
  ```
58
58
 
59
59
  This registers a `read_image` tool whose schema reaches the model on every request (no trigger heuristics), runs the modlens CLI shipped inside the same package, and returns the structured evidence as the tool's canonical JSON output. Engines, reuse grants, and guard rules stay in `~/.modlens/config.json`, shared with every other harness. dsh is in developer preview and its plugin surface may change; the plugin touches only `ctx.tools.register` to keep that surface minimal.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liustack/modlens",
3
- "version": "3.9.0",
3
+ "version": "3.9.1",
4
4
  "description": "Plug-in vision for text-only LLMs, powered by the free Antigravity CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -68,6 +68,7 @@
68
68
  "vitest": "^3.2.7"
69
69
  },
70
70
  "exports": {
71
+ ".": "./dsh/index.js",
71
72
  "./dsh": "./dsh/index.js",
72
73
  "./package.json": "./package.json"
73
74
  },
@@ -20,11 +20,11 @@ powershell -ExecutionPolicy Bypass -File <skill-dir>\scripts\run.ps1 <args>
20
20
 
21
21
  It resolves a working runtime (PATH `modlens`, then `npx`, then `bunx`) and forwards your arguments unchanged. Exit 78 means no runtime: relay the `nextSteps` from its stderr JSON instead of retrying.
22
22
 
23
- If your harness forbids running scripts, reason through the same order by hand and run the first line that works (the pinned version is 3.9.0):
23
+ If your harness forbids running scripts, reason through the same order by hand and run the first line that works (the pinned version is 3.9.1):
24
24
 
25
- 1. A `modlens` on `PATH` whose major version is 3 and is at least 3.9.0: `modlens <args>`.
26
- 2. Otherwise, if `npx` exists: `npx --yes --package @liustack/modlens@3.9.0 modlens <args>`.
27
- 3. Otherwise, if `bunx` exists: `bunx --bun @liustack/modlens@3.9.0 <args>`.
25
+ 1. A `modlens` on `PATH` whose major version is 3 and is at least 3.9.1: `modlens <args>`.
26
+ 2. Otherwise, if `npx` exists: `npx --yes --package @liustack/modlens@3.9.1 modlens <args>`.
27
+ 3. Otherwise, if `bunx` exists: `bunx --bun @liustack/modlens@3.9.1 <args>`.
28
28
  4. Otherwise tell the user no JavaScript runtime was found and that installing Node 22.13+ (https://nodejs.org) or Bun (https://bun.sh) is the next step. Do not claim modlens itself failed.
29
29
 
30
30
  `references/runtime.md` documents the pin and the diagnostic fields.
@@ -8,7 +8,7 @@ shell syntax.
8
8
 
9
9
  ## Pinned version
10
10
 
11
- - Pinned CLI version: 3.9.0
11
+ - Pinned CLI version: 3.9.1
12
12
  - npm package: `@liustack/modlens`
13
13
  - CLI binary name: `modlens`
14
14
 
@@ -24,7 +24,7 @@ $ErrorActionPreference = 'Stop'
24
24
  # package.json version, and the release script rewrites it on every bump.
25
25
  $Package = '@liustack/modlens'
26
26
  $Bin = 'modlens'
27
- $Pinned = '3.9.0'
27
+ $Pinned = '3.9.1'
28
28
  # -------------------------------------------------------------------------------
29
29
 
30
30
  $NativeNote = 'no native artifact is published for this tool yet; phase A ships npm launch paths only'
@@ -22,7 +22,7 @@ set -eu
22
22
  # package.json version, and the release script rewrites it on every bump.
23
23
  PKG="@liustack/modlens"
24
24
  BIN="modlens"
25
- PINNED="3.9.0"
25
+ PINNED="3.9.1"
26
26
  # -------------------------------------------------------------------------------
27
27
 
28
28
  NATIVE_NOTE="no native artifact is published for this tool yet; phase A ships npm launch paths only"