bookmark-research 0.5.0-beta.4 → 0.5.0-beta.6
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/.agents/plugins/marketplace.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +21 -1
- package/README.zh.md +21 -1
- package/bundle.patch.yml +18 -0
- package/docs/distribution.md +3 -3
- package/docs/harness-compatibility.md +7 -5
- package/docs/host-validation.json +31 -0
- package/docs/installation.en.md +12 -3
- package/docs/installation.md +13 -4
- package/docs/release-notes-0.5.0-beta.4.md +1 -1
- package/docs/release-notes-0.5.0-beta.5.md +31 -0
- package/docs/release-notes-0.5.0-beta.6.md +30 -0
- package/docs/wiki-quality.md +3 -1
- package/docs/wiki-quality.zh.md +3 -1
- package/hosts/dsh/package.json +3 -0
- package/hosts/dsh/plugin.js +49 -1
- package/package.json +5 -3
- package/scripts/build_zip.py +1 -0
- package/scripts/export_bundle.py +43 -20
- package/scripts/host_assets.py +4 -0
- package/scripts/host_clients.py +69 -7
- package/scripts/host_install.py +1 -1
- package/scripts/npm_source.py +33 -4
- package/skills/bookmark-research/SKILL.md +18 -5
- package/skills/bookmark-research/references/wiki-and-evaluation.md +3 -1
- package/skills/bookmark-research/references/zh/skill-guide.md +17 -4
- package/skills/bookmark-research/references/zh/wiki-and-evaluation.md +3 -1
- package/src/archive.py +24 -3
- package/src/mcp_server.py +2 -2
- package/src/wiki.py +30 -14
package/README.md
CHANGED
|
@@ -11,6 +11,8 @@ Works in **Codex, Claude Code, Pi and DSH (DeepSeek Harness)**.
|
|
|
11
11
|
> [!NOTE]
|
|
12
12
|
> **0.5.0 is a beta.** Report problems on [GitHub Issues](https://github.com/Browser-bookmark-hub/Bookmark-Research/issues).
|
|
13
13
|
|
|
14
|
+
**Install releases from [npm](https://www.npmjs.com/package/bookmark-research).** GitHub Releases retain version notes and npm links; downloadable installation/test packages have been withdrawn. GitHub's automatic **Source code** archives are source checkouts, not installation packages.
|
|
15
|
+
|
|
14
16
|
## Requirements
|
|
15
17
|
|
|
16
18
|
- Python 3.9+ with SQLite FTS5 (check with `bookmark-research doctor`)
|
|
@@ -20,7 +22,15 @@ Works in **Codex, Claude Code, Pi and DSH (DeepSeek Harness)**.
|
|
|
20
22
|
|
|
21
23
|
## Install
|
|
22
24
|
|
|
23
|
-
**
|
|
25
|
+
**Current beta (`0.5.0-beta.6`)**, interactive on macOS, Linux and Windows:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
npx bookmark-research@0.5.0-beta.6 install --source npm:bookmark-research@0.5.0-beta.6
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
This pins both the installer and the content. The `@latest` examples below follow the default channel, which remains `0.5.0-beta.3`; `@beta` currently points to `0.5.0-beta.6`. Changing only the npx selector does not change the installer's default content source.
|
|
32
|
+
|
|
33
|
+
**Default-channel interactive installation:**
|
|
24
34
|
|
|
25
35
|
```sh
|
|
26
36
|
npx bookmark-research@latest install
|
|
@@ -41,6 +51,8 @@ For a permanent `bookmark-research` command: `npm install -g bookmark-research`.
|
|
|
41
51
|
|
|
42
52
|
**One release source for all four hosts:** npm contains the shared runtime, Skill and host adapters. The installer downloads the release, prepares the selected host format, then invokes the host’s native commands. Updates retain an npm selector rather than an npx cache path. GitHub hosts source and installation catalogs; unpublished source uses the Python installer. See [distribution policy and official references](docs/distribution.md).
|
|
43
53
|
|
|
54
|
+
**DSH installs the release directly:** the published package declares `dsh.bundle.patch`, so `dsh plugin --profile <name> add bookmark-research@<version>` — or the DSH plugin manager — installs it with no export first, resolving Python and MCP paths from the installed package. DeepSeek Harness Desktop reserves the `desktop` profile for its own carrier, so install that one with the app's CLI. See the [installation guide](docs/installation.en.md).
|
|
55
|
+
|
|
44
56
|
**Windows:** the installer writes the detected Python path into each client's MCP config, because Windows often has no working `python3`. Install Codex with `bookmark-research install codex` rather than adding the repository to Codex directly. `bookmark-research status` shows the interpreter in use.
|
|
45
57
|
|
|
46
58
|
Several at once: `npx bookmark-research@latest install claude dsh --profile web --non-interactive`. Project scope: `--scope project --project /path/to/project` (Claude Code, Pi). All options: [installation guide](docs/installation.en.md).
|
|
@@ -102,6 +114,14 @@ Nothing is written into your bookmark files or the plugin. The data directory is
|
|
|
102
114
|
| `raw-library.sqlite3` | Rebuildable full-text index for `search_archive` |
|
|
103
115
|
| `${XDG_CONFIG_HOME:-~/.config}/bookmark-research/` | `settings.json` and `credentials.json` (private, owner-only) |
|
|
104
116
|
|
|
117
|
+
## Agent loops and delegation
|
|
118
|
+
|
|
119
|
+
The host model plans the research, searches or reads pages, evaluates the evidence and follows unresolved questions. The Skill guides this loop; MCP stores inputs, evidence, budgets and progress. Saving a research task does not start a background agent.
|
|
120
|
+
|
|
121
|
+
For a grouped report, the plugin supplies a reader → fresh verifier → coverage check → follow-up → report workflow. Codex uses its native subagent tools and the bundled delegation guide; Claude Code and DSH use available host workflow hooks, while Pi requires a loaded subagent/workflow extension. The host owns concurrency, cancellation and agent lifetime. All children must receive the relevant instructions and access the same research store.
|
|
122
|
+
|
|
123
|
+
The workflow adapters have simulated contract tests, but a successful install does not prove that every host can execute the complete multi-agent workflow. See [host workflows](skills/bookmark-research/references/host-workflows.md) for requirements and [the validation matrix](docs/validation-0.4.0.md#host-and-provider-boundaries) for observed limits.
|
|
124
|
+
|
|
105
125
|
## What's inside
|
|
106
126
|
|
|
107
127
|
A bundle of one Skill, one local MCP server, and the remote MCPs and services that server connects to. The client registers only the local MCP.
|
package/README.zh.md
CHANGED
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
> [!NOTE]
|
|
12
12
|
> **0.5.0 是测试版。** 遇到问题请到 [GitHub Issues](https://github.com/Browser-bookmark-hub/Bookmark-Research/issues) 反馈。
|
|
13
13
|
|
|
14
|
+
**发布版统一从 [npm](https://www.npmjs.com/package/bookmark-research) 安装。** GitHub Releases 保留版本说明和 npm 链接,安装包/测试包附件已撤下。GitHub 自动生成的 **Source code** 压缩包是源码快照,不是安装包。
|
|
15
|
+
|
|
14
16
|
## 环境要求
|
|
15
17
|
|
|
16
18
|
- Python 3.9+,含 SQLite FTS5(可用 `bookmark-research doctor` 检查)
|
|
@@ -20,7 +22,15 @@
|
|
|
20
22
|
|
|
21
23
|
## 安装
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
**当前测试版(`0.5.0-beta.6`)**,支持 macOS、Linux、Windows 交互安装:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
npx bookmark-research@0.5.0-beta.6 install --source npm:bookmark-research@0.5.0-beta.6
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
这条命令同时固定安装器和插件内容。下面的 `@latest` 示例使用默认渠道,目前仍为 `0.5.0-beta.3`;`@beta` 当前指向 `0.5.0-beta.6`。只改 npx 的版本选择,不会改变安装器默认下载的内容来源。
|
|
32
|
+
|
|
33
|
+
**默认渠道的交互安装:**
|
|
24
34
|
|
|
25
35
|
```sh
|
|
26
36
|
npx bookmark-research@latest install
|
|
@@ -41,6 +51,8 @@ npx bookmark-research@latest install
|
|
|
41
51
|
|
|
42
52
|
**四个宿主统一发布来源:** npm 包包含共享运行时、Skill 和宿主适配。安装器下载发布包,生成所选宿主格式,再调用宿主原生命令;更新记录 npm 来源,不依赖 npx 临时缓存。GitHub 提供源码和安装清单,未发布源码用 Python 安装器。见[发布约定与官方依据](docs/distribution.md)。
|
|
43
53
|
|
|
54
|
+
**DSH 可直接安装发布包:** 发布包声明 `dsh.bundle.patch`,`dsh plugin --profile <名称> add bookmark-research@<版本>`(或 DSH 插件管理界面)无需先导出即可安装,Python 与 MCP 路径按安装位置解析。DeepSeek Harness 桌面版把 `desktop` profile 保留给自身载体,该 profile 请用桌面版自带 CLI 安装。详见[安装说明](docs/installation.md)。
|
|
55
|
+
|
|
44
56
|
**Windows:** Windows 上常常没有能用的 `python3`,所以安装器会把检测到的 Python 路径写进各宿主的 MCP 配置。Codex 请用 `bookmark-research install codex` 安装,不要直接把仓库加进 Codex。`bookmark-research status` 可以查看实际使用的 Python。
|
|
45
57
|
|
|
46
58
|
一次装多个:`npx bookmark-research@latest install claude dsh --profile web --non-interactive`。装到指定项目:`--scope project --project /path/to/project`(Claude Code、Pi)。全部参数见[安装说明](docs/installation.md)。
|
|
@@ -102,6 +114,14 @@ setup 还会问研究报告和证据放在哪里:统一目录(默认 `<数
|
|
|
102
114
|
| `raw-library.sqlite3` | `search_archive` 使用的全文索引,可重建 |
|
|
103
115
|
| `${XDG_CONFIG_HOME:-~/.config}/bookmark-research/` | `settings.json` 和 `credentials.json`(仅当前用户可读) |
|
|
104
116
|
|
|
117
|
+
## Agent 循环与子代理
|
|
118
|
+
|
|
119
|
+
宿主模型负责规划、搜索/阅读、评估证据,再追查未解决的问题。Skill 指导这个循环,MCP 保存输入范围、证据、预算和进度;保存研究任务不会启动后台代理。
|
|
120
|
+
|
|
121
|
+
对于分组报告,插件提供“阅读代理 → 新的验证代理 → 覆盖检查 → 补查 → 报告”的流程。Codex 使用原生子代理和附带的委派指南;Claude Code、DSH 使用已加载的宿主工作流接口;Pi 需要加载相应的子代理/工作流扩展。并发、取消和代理生命周期由宿主管理。每个子代理都需要拿到相关指令,并访问同一个研究存储。
|
|
122
|
+
|
|
123
|
+
工作流适配已有模拟接口测试,但安装成功不代表所有宿主都已跑通完整的多代理任务。所需条件见[宿主工作流](skills/bookmark-research/references/zh/host-workflows.md),实际验证范围见[验证记录](docs/validation-0.4.0.md#host-and-provider-boundaries)。
|
|
124
|
+
|
|
105
125
|
## 插件包含什么
|
|
106
126
|
|
|
107
127
|
由 1 个 Skill、1 个本地 MCP 服务,以及这个服务内部连接的远程 MCP 和网页服务组成。宿主里只需要登记这 1 个本地 MCP。
|
package/bundle.patch.yml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# DeepSeek Harness bundle layer. Paths resolve from the installed package through
|
|
2
|
+
# the module's context, so this file is identical in the npm package and in an
|
|
3
|
+
# exported copy; `python` and the forwarded environment come from the module
|
|
4
|
+
# (see hosts/dsh/plugin.js), not from this machine.
|
|
5
|
+
- insert:
|
|
6
|
+
- id: bookmark-research-skill
|
|
7
|
+
name: bookmark-research
|
|
8
|
+
- id: bookmark-research-mcp
|
|
9
|
+
name: '@deepseek-ai/dsh-mcp-client'
|
|
10
|
+
inject: [bookmarkResearchPaths]
|
|
11
|
+
config:
|
|
12
|
+
serverName: bookmark-research
|
|
13
|
+
transport: stdio
|
|
14
|
+
command: !!js ctx.bookmarkResearchPaths.python.command
|
|
15
|
+
args: !!js ctx.bookmarkResearchPaths.mcpArgs
|
|
16
|
+
cwd: !!js ctx.bookmarkResearchPaths.root
|
|
17
|
+
env: !!js ctx.bookmarkResearchPaths.env
|
|
18
|
+
failOnStartupError: true
|
package/docs/distribution.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 发布与安装约定
|
|
2
2
|
|
|
3
|
-
正式发布只使用 npm 的 `bookmark-research` 包。它包含共享 Python 运行时、Skill 和各宿主适配文件;不维护四份独立源码或四个发布版本。GitHub 用于源码、问题跟踪、版本说明及安装清单。
|
|
3
|
+
正式发布只使用 npm 的 `bookmark-research` 包。它包含共享 Python 运行时、Skill 和各宿主适配文件;不维护四份独立源码或四个发布版本。GitHub 用于源码、问题跟踪、版本说明及安装清单。GitHub Release 可选,仅保留版本说明和 npm 链接,不再附安装包、测试包或配套校验文件;历史附件已备份撤下。
|
|
4
4
|
|
|
5
5
|
| 入口 | 插件内容来源 | 登记和缓存 |
|
|
6
6
|
| --- | --- | --- |
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
|
|
16
16
|
默认安装器记录 `npm:bookmark-research`(`latest`),更新时重新下载,不依赖已清理的 npx 缓存。显式 `--source npm:bookmark-research@VERSION` 会保留版本;要测试同一个固定发布版,在四个宿主使用相同参数。Codex 原生 marketplace 使用清单固定版本,跟随清单更新。需要新版安装器时运行 `npx bookmark-research@latest update`,或先更新全局 npm 安装。
|
|
17
17
|
|
|
18
|
-
源码开发使用 `python3 scripts/install.py install --source PATH`,也可显式选择 Git 仓库和 `--ref`。旧 Git/本地安装保留来源,不静默转成 npm;切换时先用宿主命令处理旧登记。源码导出、ZIP 和测试包脚本保留为开发工具,CI
|
|
18
|
+
源码开发使用 `python3 scripts/install.py install --source PATH`,也可显式选择 Git 仓库和 `--ref`。旧 Git/本地安装保留来源,不静默转成 npm;切换时先用宿主命令处理旧登记。源码导出、ZIP 和测试包脚本保留为开发工具,CI 的验证产物仍可包含 npm `.tgz` 与 SHA-256 校验文件,但不作为 GitHub Release 下载入口。GitHub 自动生成的 Source code 压缩包是源码快照,不能单独关闭,不作为安装包。
|
|
19
19
|
|
|
20
20
|
发布顺序:修改源码版本并完成 CI,发布已经验证的 npm 包,确认 registry 可取得该版本,再更新 GitHub marketplace 的固定版本。未发布源码不能通过 npm 入口安装;需要先用源码入口测试。
|
|
21
21
|
|
|
22
|
-
测试版使用 npm 的 `beta`
|
|
22
|
+
测试版使用 npm 的 `beta` 标签;若创建 GitHub 版本说明,则标记为预发布。不会自动移动 npm 的 `latest` 标签。安装测试版时同时固定安装器与内容来源,例如 `npx bookmark-research@0.5.0-beta.6 install --source npm:bookmark-research@0.5.0-beta.6`。仅将 npx 改为 `@beta` 不会改变默认内容来源 `latest`;已固定的旧版安装也不会自动换成测试版。
|
|
23
23
|
|
|
24
24
|
## 官方资料与项目实例
|
|
25
25
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# 宿主兼容、工作流与打包
|
|
2
2
|
|
|
3
|
-
更新日期:2026-
|
|
3
|
+
更新日期:2026-10-08。四宿主共用同一 Skill、Python CLI、stdio MCP 和研究档案。当前宿主模型负责规划、搜索/阅读、判断证据、按缺口补查及综合;原生协作支持独立分工。Deep Research 在这条流程上增加持续调查、独立核验、覆盖检查和报告。外部研究 API 可承担具体子问题,缺少它们仍能研究。
|
|
4
4
|
|
|
5
|
-
**正文依据、文件生成、隔离脚本检查、真实 MCP 调用和宿主端到端研究是不同验证层级。**
|
|
5
|
+
**正文依据、文件生成、隔离脚本检查、真实 MCP 调用和宿主端到端研究是不同验证层级。** 本轮在 DSH 桌面版 profile `desktop` 上完成了一次真实安装,并观察到 Skill 注册与 MCP 工具实际应答;Pi 仍未安装,未改全局配置,未启动付费研究模型。具体脚本调用和研究规则见 [宿主工作流参考](../skills/bookmark-research/references/host-workflows.md)。
|
|
6
6
|
|
|
7
7
|
| 宿主 | 协作基础与本插件入口 | 生命周期与限制 |
|
|
8
8
|
| --- | --- | --- |
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
| Claude Code 插件 | `.claude-plugin/plugin.json`;当前文档允许省略 manifest 后按约定发现组件 | 根 `skills/`、`.mcp.json` 或 manifest 配置 | 单独保留 Claude manifest/MCP 配置 |
|
|
59
59
|
| Agent Plugins 1.0.0 标准包 | **根 `plugin.json`**,必填 `$schema` 与 `name` | 固定发现根 `skills/`、`mcp.json` | 从同一源码独立导出标准包 |
|
|
60
60
|
| Pi | `package.json` 的 `pi` 字段,或资源目录约定 | 原生 skills/extensions;MCP 要靠扩展 | `pi.skills`+Skill 调用 CLI;多组任务另登记项目工作流 |
|
|
61
|
-
| DeepSeek Harness(DSH) |
|
|
61
|
+
| DeepSeek Harness(DSH) | 包在 `package.json` 声明 `dsh.bundle.patch`,由 `dsh plugin` 或插件管理器安装;`--patch` 仍可手工加载 Cordis 配置 | 原生 Skill provider;官方 `dsh-mcp-client` 桥接 MCP tools | 发布包自带按安装位置解析的 `bundle.patch.yml`,registry 可直接安装;绝对路径 `cordis.patch.yml` 仅作手工适配 |
|
|
62
62
|
|
|
63
63
|
这些入口不是同一文件的不同别名。符合 Agent Skills 的 `SKILL.md` 和 MCP 协议是主要复用边界;某个客户端能加载 Skill,并不表示它已经支持 Agent Plugins 的根 manifest。[H01][H04][H05][P02][D02]
|
|
64
64
|
|
|
@@ -157,7 +157,9 @@ DSH 的原生运行插件是 Cordis 模块,可导出 `name`、`inject` 和 `ap
|
|
|
157
157
|
|
|
158
158
|
`command` 与 `args` 分开传递。不要在这个 DSH 片段里假设 `${PLUGIN_ROOT}` 会像 Codex/Agent Plugins 一样展开;本轮核实的 MCP 客户端并未定义这种插件根占位符约定。绝对路径片段适合本机 checkout;搬迁或重新安装到其他位置后需要重新生成。DSH 的 patch 文件位置也不会改变模块路径解析所依据的 profile 目录。[D03][D05]
|
|
159
159
|
|
|
160
|
-
|
|
160
|
+
发布包现在**自带** `bundle.patch.yml` 并在 `package.json` 声明 `dsh.bundle.patch`,因此 `dsh plugin --profile <name> add bookmark-research@<version>`(以及 DSH 插件管理界面)可以直接从 registry 安装;`dsh` 的 bundle 对账逻辑会把声明了 `dsh.bundle` 且 patch 存在的包自动加入 `dsh.profile.bundles`。层内不写死本机路径:`command`、`args`、`cwd` 与转发的环境变量都由入口模块 `hosts/dsh/plugin.js` 在加载时提供(`bookmarkResearchPaths.python/mcpArgs/env`),模块用与 npm 启动器相同的顺序发现 Python 3.9+/SQLite,所以导出副本、registry 安装和 Windows 都不需要重生成 patch。统一安装器仍导出带校验和的固定副本,用于可验证的托管安装;对不含该文件的旧发布包或旧 Git ref,导出器按模块的旧契约生成等价层,安装不回归。[D02][D03]
|
|
161
|
+
|
|
162
|
+
DSH 桌面版把 profile 名 `desktop` 保留给 Electron 载体:启动器对该名字拒绝一切 boot/dump(`--dump-config` 亦然),只有载体自身可以管理其插件。因此对 `desktop` 的安装须用桌面版自带 CLI(`--dsh "<App>/Contents/Resources/runtime/cli/bin/dsh"`,它自带 pnpm,无需 PATH 中的 pnpm),安装器的验证改为读取持久层:profile 依赖指向该包、`dsh.bundle.patch` 与入口模块按包目录相对解析且文件存在、层内包含 Skill 与 MCP 行。2026-10-08 在本机(macOS、桌面运行时 0.2.0-rc.2、发布包 0.5.0-beta.5)实测:注册后 Skill 出现在宿主目录,`mcp__bookmark-research__*` 工具正常应答,运行中的 MCP 子进程解析到已安装包目录。[D02][D08]
|
|
161
163
|
|
|
162
164
|
导出及查看合并配置的形式是:
|
|
163
165
|
|
|
@@ -166,7 +168,7 @@ python3 scripts/export_bundle.py --format dsh --output /private/tmp/bookmark-res
|
|
|
166
168
|
dsh --profile web --patch /private/tmp/bookmark-research-dsh/cordis.patch.yml --dump-config
|
|
167
169
|
```
|
|
168
170
|
|
|
169
|
-
实际启动可使用 `dsh web --patch
|
|
171
|
+
实际启动可使用 `dsh web --patch <绝对配置路径>`。该手工路线仍属待客户端验证的接入说明,且不覆盖保留的 `desktop` profile。新建任意名称的 profile 默认只有 base bundle;`web` profile 才会按官方模板包含 Web 表面,不应把“创建一个任意 profile”描述成自动创建了完整 Web 应用。[D02][D08]
|
|
170
172
|
|
|
171
173
|
`dsh plugin` 在 profile 目录中通过 pnpm 管理依赖,并把声明了 `dsh.bundle` 的包加入 `dsh.profile.bundles`。没有该声明的 npm 包仍能作为普通依赖安装,但不会自动增加插件配置层。后层 patch 会替换命中行的整个 `config`,不做深度合并。[D02][D08]
|
|
172
174
|
|
|
@@ -294,5 +294,36 @@
|
|
|
294
294
|
"Codex feature state and Claude manifest validation do not prove native tools or account access in an arbitrary session.",
|
|
295
295
|
"Local correlation IDs beginning local: are not native host run IDs."
|
|
296
296
|
]
|
|
297
|
+
},
|
|
298
|
+
"host_install_review": {
|
|
299
|
+
"checked_on": "2026-10-08",
|
|
300
|
+
"host": "dsh",
|
|
301
|
+
"profile": "desktop",
|
|
302
|
+
"runtime_version": "0.2.0-rc.2",
|
|
303
|
+
"package_version": "0.5.0-beta.5",
|
|
304
|
+
"methods": [
|
|
305
|
+
"scripts/install.py install --host dsh --profile desktop with the managed export from this source tree",
|
|
306
|
+
"dsh plugin --profile <throwaway> add <packed release tarball> (registry-equivalent spec)"
|
|
307
|
+
],
|
|
308
|
+
"observed": {
|
|
309
|
+
"bundle_selected_into_profile": true,
|
|
310
|
+
"skill_registered_in_host": true,
|
|
311
|
+
"mcp_tools_listed": 37,
|
|
312
|
+
"mcp_child_resolved_to_installed_package": true,
|
|
313
|
+
"composed_rows": [
|
|
314
|
+
"bookmark-research-skill",
|
|
315
|
+
"bookmark-research-mcp"
|
|
316
|
+
],
|
|
317
|
+
"desktop_profile_dump_refused": true,
|
|
318
|
+
"managed_receipt_state": "verified",
|
|
319
|
+
"managed_export_files": 71,
|
|
320
|
+
"unit_tests_passed": 506,
|
|
321
|
+
"temporary_test_profile_removed": true
|
|
322
|
+
},
|
|
323
|
+
"not_verified": [
|
|
324
|
+
"a published npm release that carries bundle.patch.yml; the released 0.5.0-beta.5 predates it",
|
|
325
|
+
"Windows or Pi installation",
|
|
326
|
+
"the npm cache permission retry on a failing machine (unit-tested only; this machine used npm_config_cache instead)"
|
|
327
|
+
]
|
|
297
328
|
}
|
|
298
329
|
}
|
package/docs/installation.en.md
CHANGED
|
@@ -79,7 +79,7 @@ Optional service failures appear under `setup.needs_attention` and do not block
|
|
|
79
79
|
|
|
80
80
|
## Source development and historical ZIPs
|
|
81
81
|
|
|
82
|
-
GitHub [Releases](https://github.com/Browser-bookmark-hub/Bookmark-Research/releases) retain
|
|
82
|
+
GitHub [Releases](https://github.com/Browser-bookmark-hub/Bookmark-Research/releases) retain version notes and npm links; installation and test attachments have been withdrawn. Release packages come from npm. ZIP/export helpers remain available for local development and tests; preserve required plugin manifests when extracting a historical package.
|
|
83
83
|
|
|
84
84
|
From a checkout or ZIP containing the installer:
|
|
85
85
|
|
|
@@ -110,7 +110,7 @@ The Python installer accepts the same host/setup flags. `verify --installed-path
|
|
|
110
110
|
|
|
111
111
|
### Native Codex installation of the published release
|
|
112
112
|
|
|
113
|
-
The repository marketplace points to the
|
|
113
|
+
The repository marketplace points to the published npm version recorded in its `source.version` field. Codex downloads that package without lifecycle scripts, then owns registration and caching. Adding the repository installs the published release, including its released Skill; it does not install unpublished source changes from `main`.
|
|
114
114
|
|
|
115
115
|
```sh
|
|
116
116
|
codex plugin marketplace add Browser-bookmark-hub/Bookmark-Research --ref main
|
|
@@ -181,7 +181,16 @@ python3 scripts/install.py install --host dsh --profile web
|
|
|
181
181
|
python3 scripts/install.py verify --host dsh --profile web
|
|
182
182
|
```
|
|
183
183
|
|
|
184
|
-
The installer exports a relocatable `dsh.bundle` and calls `dsh plugin --profile web add PATH`.
|
|
184
|
+
The installer exports a relocatable `dsh.bundle` and calls `dsh plugin --profile web add PATH`. A released package also installs straight from the registry: it declares `dsh.bundle.patch` and ships that layer, so `dsh plugin --profile web add bookmark-research@VERSION` — or the DSH plugin manager — needs no export first. The layer resolves the interpreter, the working directory and the MCP argument list from the installed module, so nothing is tied to the machine that built it; the selected profile must still provide the Skill registry and the official `@deepseek-ai/dsh-mcp-client`.
|
|
185
|
+
|
|
186
|
+
`dsh plugin` delegates to pnpm. A generic CLI therefore needs pnpm on PATH (`npm install -g pnpm` or `corepack enable pnpm`) and the installer stops before creating a profile without it; the DeepSeek Harness Desktop CLI carries its own pnpm and needs none. DeepSeek Harness Desktop reserves the `desktop` profile — its launcher refuses every boot and dump for that name — so install it with the app's own CLI, and verification reads the persisted layer instead of `--dump-config`:
|
|
187
|
+
|
|
188
|
+
```sh
|
|
189
|
+
python3 scripts/install.py install --host dsh --profile desktop \
|
|
190
|
+
--dsh "<DSH app>/Contents/Resources/runtime/cli/bin/dsh"
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
The legacy `cordis.patch.yml` still contains absolute paths and requires separate Skill discovery. Workflow execution separately requires the host service/engine; `hosts/dsh/workflow-call.py --research-id RID --run-key KEY` prepares a call without launching it.
|
|
185
194
|
|
|
186
195
|
### Agent Plugins 1.0.0
|
|
187
196
|
|
package/docs/installation.md
CHANGED
|
@@ -96,7 +96,7 @@ Agent 可使用 `install --host pi --non-interactive --preferences FILE --skip-c
|
|
|
96
96
|
|
|
97
97
|
## 源码开发与历史 ZIP
|
|
98
98
|
|
|
99
|
-
GitHub [Releases](https://github.com/Browser-bookmark-hub/Bookmark-Research/releases)
|
|
99
|
+
GitHub [Releases](https://github.com/Browser-bookmark-hub/Bookmark-Research/releases) 保留版本说明和 npm 链接,安装包与测试包附件已撤下。发布包统一从 npm 获取;仓库的 ZIP/导出脚本仍可用于本地验证。
|
|
100
100
|
|
|
101
101
|
```sh
|
|
102
102
|
git clone https://github.com/Browser-bookmark-hub/Bookmark-Research.git
|
|
@@ -150,7 +150,7 @@ python3 "/absolute/path/Bookmark Research/scripts/install.py" install
|
|
|
150
150
|
|
|
151
151
|
旧版 Git marketplace 由 Codex 保留原登记和 ref。安装器先执行原生 `marketplace upgrade`,从宿主实际获取的 checkout 导出干净目录,再通过本次命令的 `-c` 参数将目录交给原生 `plugin add`;参数不会改写 Git 登记,也不需要猜测原生列表未返回的 ref。这条回退路径适用于仍指向仓库根目录的历史 catalog。当前发行 catalog 指向 npm 包,原生更新保留该发布来源。Git checkout 和 GitHub 自动生成的源码压缩包可以含开发文件,它们不是插件缓存。
|
|
152
152
|
|
|
153
|
-
当前仓库的 marketplace
|
|
153
|
+
当前仓库的 marketplace 固定指向其 `source.version` 字段记录的已发布 npm 版本。Codex 下载该包,不执行生命周期脚本,再自行登记和缓存。直接添加 GitHub 仓库会安装发布版及其已发布 Skill,不会安装 `main` 尚未发布的源码改动:
|
|
154
154
|
|
|
155
155
|
```sh
|
|
156
156
|
codex plugin marketplace add Browser-bookmark-hub/Bookmark-Research --ref main
|
|
@@ -237,14 +237,23 @@ pi_subagent_workflow({action:"run",name:"bookmark-research",args:{research_id:"R
|
|
|
237
237
|
|
|
238
238
|
### DSH / DeepSeek Harness
|
|
239
239
|
|
|
240
|
-
所选 DSH profile 需提供 Skill registry 和官方 `@deepseek-ai/dsh-mcp-client
|
|
240
|
+
所选 DSH profile 需提供 Skill registry 和官方 `@deepseek-ai/dsh-mcp-client`。发布包自带 `bundle.patch.yml` 并声明 `dsh.bundle.patch`,因此除统一安装器之外,也可以直接从 registry 安装:`dsh plugin --profile <name> add bookmark-research@VERSION`,或在 DSH 插件管理界面按同一个 spec 安装;DSH 会把声明了 `dsh.bundle` 且 patch 存在的包自动加入 `dsh.profile.bundles`。层内不写死本机路径,Python 解释器、工作目录、MCP 参数与环境转发都由入口模块按安装位置解析。
|
|
241
|
+
|
|
242
|
+
统一安装器生成可搬移的 `dsh.bundle`,调用原生 `dsh plugin --profile web add PATH`,注册 Skill 并从安装后位置解析 Python/MCP 路径:
|
|
241
243
|
|
|
242
244
|
```sh
|
|
243
245
|
python3 scripts/install.py install --host dsh --profile web
|
|
244
246
|
python3 scripts/install.py verify --host dsh --profile web
|
|
245
247
|
```
|
|
246
248
|
|
|
247
|
-
|
|
249
|
+
`dsh plugin` 由 pnpm 执行:通用 CLI 需要 PATH 中的 pnpm(`npm install -g pnpm` 或 `corepack enable pnpm`),缺少时安装器在创建 profile 前停止;DSH 桌面版 CLI 自带 pnpm,无需另装。桌面版把 profile 名 `desktop` 保留给 Electron 载体,其启动器对该名字拒绝 boot/dump,因此用桌面版自带 CLI 安装,验证改为读取持久层而非 `--dump-config`:
|
|
250
|
+
|
|
251
|
+
```sh
|
|
252
|
+
python3 scripts/install.py install --host dsh --profile desktop \
|
|
253
|
+
--dsh "<DSH 应用>/Contents/Resources/runtime/cli/bin/dsh"
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
手动分发时使用 `export_bundle.py --format dsh`,再用上述原生命令安装稳定导出目录;不含该层的旧发布包或旧 Git ref 仍会按模块的旧契约生成等价层。保留的旧 `cordis.patch.yml` 仍含绝对路径,需单独配置 Skill 发现;移动后应重新生成。多组研究另需 workflow service、worker-thread engine 和 `workflow` tool。参见 [官方 MCP client 文档](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/mcp/mcp-client/README.md)。
|
|
248
257
|
|
|
249
258
|
生成可直接传给宿主 `workflow` 工具的完整 JSON:
|
|
250
259
|
|
|
@@ -36,4 +36,4 @@ The implementation passed the existing 495-test local suite (one opt-in test ski
|
|
|
36
36
|
|
|
37
37
|
Web reading was also exercised: one URL failed through all configured fallback readers; another returned a partial excerpt that could be retrieved from the local archive. This release does not guarantee webpage availability, complete extraction, interpretation of unstated user intent or large-canvas performance. End-to-end Skill triggering across every host and every MCP operation is not established by these tests.
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
Install the tested release from [npm](https://www.npmjs.com/package/bookmark-research/v/0.5.0-beta.4). GitHub keeps these version notes and installation catalogs; uploaded installation/test packages and their checksum attachments have been withdrawn from all Releases. GitHub's automatically generated source archives are source checkouts, not installation packages.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Bookmark Research 0.5.0 beta 5
|
|
2
|
+
|
|
3
|
+
**Beta / 测试版.** Uses the npm `beta` channel. The npm `latest` tag remains unchanged.
|
|
4
|
+
|
|
5
|
+
## Install this beta
|
|
6
|
+
|
|
7
|
+
Pin both the installer and the plugin content:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npx bookmark-research@0.5.0-beta.5 install --source npm:bookmark-research@0.5.0-beta.5
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Choose Codex, Claude Code, Pi or DSH in the installer. Existing installations retain their recorded source and version selection. The GitHub Codex marketplace advances to this npm version after the registry confirms publication.
|
|
14
|
+
|
|
15
|
+
## Changes
|
|
16
|
+
|
|
17
|
+
- **Retrieve saved knowledge when needed.** The Skill uses Wiki when earlier research or personal knowledge is needed and missing from the conversation. Supplied text and sufficient existing evidence can be used directly; current public facts can go straight to current sources.
|
|
18
|
+
- **Reuse suitable host tools and evidence.** API, SDK and repository questions prefer available documentation or file tools. Attributable source excerpts can answer narrow questions; additional fetching follows evidence gaps or freshness requirements. Host-native evidence can be retained through the existing import tool.
|
|
19
|
+
- **Preserve fetched documentation.** Fenced code examples containing `URL:` fields or apparent page headers no longer cause a valid multi-page response to lose its extracted text. Ambiguous, unclosed examples retain the raw response.
|
|
20
|
+
- **Keep Wiki references usable after relocation.** New records use evidence paths relative to their research task. Reads resolve verified references at current locations, including legacy records, without rewriting history. Claims, quotes and artifact hashes remain checked.
|
|
21
|
+
- **Show review state in Wiki search.** Results include revision dates and validation. Changed bookmark input produces `needs_review`; invalid or retracted evidence remains excluded.
|
|
22
|
+
|
|
23
|
+
## Validation and limits
|
|
24
|
+
|
|
25
|
+
The functional diff passed [all 10 GitHub CI jobs](https://github.com/Browser-bookmark-hub/Bookmark-Research/actions/runs/37750192790), covering Python 3.9/3.12 on Linux, macOS and Windows, native Codex installation/update, npm installation and package contents. The local suite discovered 499 tests: 496 passed and three conditional integration tests were skipped. Platform-specific and unavailable-host skips are recorded separately in CI.
|
|
26
|
+
|
|
27
|
+
A replay of saved responses restored two extracted pages. A copy of real Wiki and research data recovered two searchable pages and verified 49 citations; original files and immutable revisions remained unchanged. These are data and implementation checks, not a new-session model behavior evaluation or a guarantee that upstream websites are currently available.
|
|
28
|
+
|
|
29
|
+
Move or sync Wiki indexes and revisions together with the cited research state, inventory and evidence. Preserve their relative layout for Markdown links and configure paths on the destination. Retrieval remains literal text matching. Evidence archival and Wiki synthesis remain separate, following the existing `suggest`, `auto` and `off` settings.
|
|
30
|
+
|
|
31
|
+
Install from [npm](https://www.npmjs.com/package/bookmark-research/v/0.5.0-beta.5). GitHub supplies source, version notes and installation catalogs; npm remains the shared release package for all four hosts.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Bookmark Research 0.5.0 beta 6
|
|
2
|
+
|
|
3
|
+
**Beta / 测试版.** Uses the npm `beta` channel. The npm `latest` tag remains unchanged.
|
|
4
|
+
|
|
5
|
+
## Install this beta
|
|
6
|
+
|
|
7
|
+
Pin both the installer and the plugin content:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npx bookmark-research@0.5.0-beta.6 install --source npm:bookmark-research@0.5.0-beta.6
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Choose Codex, Claude Code, Pi or DSH in the installer. Existing installations retain their recorded source and version selection. The GitHub Codex marketplace advances to this npm version after the registry confirms publication.
|
|
14
|
+
|
|
15
|
+
## Changes
|
|
16
|
+
|
|
17
|
+
- **DSH installs the release directly.** The package now declares `dsh.bundle.patch` and ships `bundle.patch.yml`, so `dsh plugin --profile <name> add bookmark-research@0.5.0-beta.6` — or the DSH plugin manager — installs it with no export step first, and DSH selects the bundle into `dsh.profile.bundles` on its own. Nothing in the layer is tied to the building machine: the entry module supplies the interpreter, working directory, MCP arguments and forwarded environment variables at load time.
|
|
18
|
+
- **No `python3` assumption in the DSH layer.** The module discovers Python 3.9+ with SQLite in the same order as the npm launcher (`BOOKMARK_RESEARCH_PYTHON`, `python3`, `python`, `py -3`) and reports a warning instead of failing silently when none is found, so Windows no longer depends on a `python3` alias.
|
|
19
|
+
- **DSH Desktop's reserved profile is installable.** DeepSeek Harness Desktop refuses to boot or dump the profile name `desktop`, so the installer verifies that profile from the persisted layer (dependency target, package-relative `dsh.bundle.patch`, entry module, Skill and MCP rows) instead of `--dump-config`.
|
|
20
|
+
- **A bundled package manager satisfies the DSH prerequisite.** A CLI that carries its own pnpm — the DeepSeek Harness Desktop CLI does — no longer requires `pnpm` on `PATH`; a generic CLI still fails before creating a profile, with instructions.
|
|
21
|
+
- **Unwritable npm caches are diagnosed and retried.** When npm reports a cache permission failure (for example root-owned files from a privileged install), the download retries once in a scratch cache and otherwise reports the `chown` repair command.
|
|
22
|
+
- **The exported DSH bundle is the released layer.** `export_bundle.py --format dsh` copies the committed `bundle.patch.yml` byte for byte; a source tree that predates the layer (an older published package or Git ref) still exports a working equivalent, so pinned installations do not regress.
|
|
23
|
+
|
|
24
|
+
## Validation and limits
|
|
25
|
+
|
|
26
|
+
The functional diff passed 506 discovered local tests, including new coverage for the released DSH layer, the offline verification of the reserved `desktop` profile, the bundled package manager, and the npm cache retry. A real installation into the DeepSeek Harness Desktop profile (`desktop`, runtime `0.2.0-rc.2`) registered the Skill, listed 37 MCP tools, and resolved the running MCP child to the installed package; a packed release installed in a throwaway profile was selected into `dsh.profile.bundles` automatically.
|
|
27
|
+
|
|
28
|
+
Not verified in this release: Windows and Pi installation, and the cache-retry path on a machine whose npm cache is genuinely unwritable. These are covered by unit tests only. No paid research model was started.
|
|
29
|
+
|
|
30
|
+
Install from [npm](https://www.npmjs.com/package/bookmark-research/v/0.5.0-beta.6). GitHub supplies source, version notes and installation catalogs; npm remains the shared release package for all four hosts.
|
package/docs/wiki-quality.md
CHANGED
|
@@ -50,12 +50,14 @@ Cross-links have the form `{"page_id": "existing-page", "relation": "The host's
|
|
|
50
50
|
| `get(page_id, revision=None)` | Authored page, evidence snapshot, update record and current provenance validation |
|
|
51
51
|
| `list(offset=0, limit=20)` | Paginated current page metadata |
|
|
52
52
|
| `lint(page_id=None)` | Source review, active-claim, citation, hash, link and history issues |
|
|
53
|
-
| `search(query, offset=0, limit=10)` | Matching
|
|
53
|
+
| `search(query, offset=0, limit=10)` | Matching Wiki prose, revision dates and validation; stale pages excluded, `needs_review` warnings retained |
|
|
54
54
|
|
|
55
55
|
Lint detects later rejection, withdrawal, source/claim changes and altered or missing artifacts. Historical text is preserved and identified as stale. Lint explicitly returns `semantic_support: "not_scored"`.
|
|
56
56
|
|
|
57
57
|
Search checks titles, section headings and authored section text. It uses case-folded literal terms, including Chinese substrings, and simple occurrence ordering. Saving a provider extract alone does not make that extract searchable as organized Wiki knowledge. This is not embedding retrieval or semantic reranking; neither is selected without actual question-answering evaluation.
|
|
58
58
|
|
|
59
|
+
New records use research-task-relative evidence paths. `get` resolves verified references at current research locations, including legacy records containing absolute paths, without rewriting immutable revisions. Identity, claim, quote and artifact hashes remain mandatory. Move the Wiki and cited research state/inventory/evidence together; preserve their relative layout for Markdown links and configure local research paths at the destination. Wiki Markdown alone is not a complete portable knowledge base.
|
|
60
|
+
|
|
59
61
|
## Quality evaluation input
|
|
60
62
|
|
|
61
63
|
`evaluation.evaluate(suite, runs, judgments=None)` is a pure computation over supplied data. The complete runnable input is [research-quality.json](https://github.com/Browser-bookmark-hub/Bookmark-Research/blob/main/tests/fixtures/research-quality.json), also included at `tests/fixtures/research-quality.json` in the source checkout and verification pack.
|
package/docs/wiki-quality.zh.md
CHANGED
|
@@ -50,12 +50,14 @@ wiki.write("reusable-sessions", revised_page, "解释新增限制", expected_rev
|
|
|
50
50
|
| `get(page_id, revision=None)` | 正文、证据快照、更新记录与当前 provenance 核验 |
|
|
51
51
|
| `list(offset=0, limit=20)` | 当前页元数据的分页 |
|
|
52
52
|
| `lint(page_id=None)` | 来源审阅、有效 claim、引文、哈希、链接和历史问题 |
|
|
53
|
-
| `search(query, offset=0, limit=10)` |
|
|
53
|
+
| `search(query, offset=0, limit=10)` | 匹配 Wiki 正文、修订日期及核验状态;排除已失效页,保留 `needs_review` 警告 |
|
|
54
54
|
|
|
55
55
|
Lint 检测后续来源拒绝、结论撤回、来源/claim 变化和缺失/改动的产物。历史正文保留并标记过时,明确返回 `semantic_support:"not_scored"`。
|
|
56
56
|
|
|
57
57
|
检索匹配标题、章节标题和整理后的正文,采用忽略大小写的字面词匹配(包含中文子串)及简单出现次数排序。仅保存 provider 摘录不会使它成为可检索的 Wiki 知识。没有 embedding 检索或语义重排,也不会未经实际问答评测就选择它们。
|
|
58
58
|
|
|
59
|
+
新记录使用相对于研究任务的证据路径。`get` 将已验证引用解析到当前研究位置,兼容旧绝对路径记录,不改写不可变修订;身份、结论、引文与产物哈希仍须一致。迁移时同时保留 Wiki 和引用的研究 state/inventory/证据,保持相对布局以维持 Markdown 链接,并配置目标机器的本地研究路径。仅有 Wiki Markdown 不构成完整可迁移的知识库。
|
|
60
|
+
|
|
59
61
|
## 质量评测输入
|
|
60
62
|
|
|
61
63
|
`evaluation.evaluate(suite, runs, judgments=None)` 只计算传入数据。完整可运行输入为 [research-quality.json](https://github.com/Browser-bookmark-hub/Bookmark-Research/blob/main/tests/fixtures/research-quality.json),源码和验证包也包含 `tests/fixtures/research-quality.json`。
|
package/hosts/dsh/plugin.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
1
2
|
import { readFile } from "node:fs/promises";
|
|
2
3
|
import { fileURLToPath } from "node:url";
|
|
3
4
|
|
|
@@ -6,6 +7,7 @@ export const inject = ["skills"];
|
|
|
6
7
|
|
|
7
8
|
// The module travels with the Python runtime; no exporting machine's path is embedded.
|
|
8
9
|
const root = fileURLToPath(new URL("../../", import.meta.url));
|
|
10
|
+
const cli = fileURLToPath(new URL("../../src/cli.py", import.meta.url));
|
|
9
11
|
const skillUrl = new URL("../../skills/bookmark-research/SKILL.md", import.meta.url);
|
|
10
12
|
const resourceBase = { kind: "directory", path: fileURLToPath(new URL("./", skillUrl)) };
|
|
11
13
|
const candidate = {
|
|
@@ -20,10 +22,56 @@ const candidate = {
|
|
|
20
22
|
locator: skillUrl,
|
|
21
23
|
};
|
|
22
24
|
|
|
25
|
+
// The MCP child inherits only these variables, so saved data/config paths and
|
|
26
|
+
// provider keys survive without baking values into a published patch. This list
|
|
27
|
+
// must equal the native manifest's mcpServers env_vars; tests assert that parity.
|
|
28
|
+
const FORWARDED_ENV = [
|
|
29
|
+
"BOOKMARK_RESEARCH_DATA_DIR",
|
|
30
|
+
"BOOKMARK_RESEARCH_CONFIG",
|
|
31
|
+
"BOOKMARK_RESEARCH_CREDENTIALS",
|
|
32
|
+
"XDG_DATA_HOME",
|
|
33
|
+
"XDG_CONFIG_HOME",
|
|
34
|
+
"EXA_API_KEY",
|
|
35
|
+
"PARALLEL_API_KEY",
|
|
36
|
+
"TAVILY_API_KEY",
|
|
37
|
+
"JINA_API_KEY",
|
|
38
|
+
"OPENAI_API_KEY",
|
|
39
|
+
"SystemRoot",
|
|
40
|
+
"windir",
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
// The same discovery order as the npm launcher: an explicit interpreter, then
|
|
44
|
+
// the platform aliases, each accepted only with Python 3.9+ and SQLite present.
|
|
45
|
+
const PYTHON_PROBE = "import sys, sqlite3; sys.exit(0 if sys.version_info >= (3, 9) else 3)";
|
|
46
|
+
|
|
47
|
+
function findPython() {
|
|
48
|
+
const candidates = [];
|
|
49
|
+
if (process.env.BOOKMARK_RESEARCH_PYTHON) candidates.push([process.env.BOOKMARK_RESEARCH_PYTHON]);
|
|
50
|
+
candidates.push(["python3"], ["python"]);
|
|
51
|
+
if (process.platform === "win32") candidates.push(["py", "-3"]);
|
|
52
|
+
for (const [command, ...args] of candidates) {
|
|
53
|
+
const probe = spawnSync(command, [...args, "-c", PYTHON_PROBE], { stdio: "ignore", windowsHide: true });
|
|
54
|
+
if (probe.status === 0) return { command, args };
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
|
|
23
59
|
export function apply(ctx) {
|
|
60
|
+
let python = findPython();
|
|
61
|
+
if (python === undefined) {
|
|
62
|
+
process.stderr.write("bookmark-research: no Python 3.9+ with SQLite was found; the MCP client will try python3. "
|
|
63
|
+
+ "Set BOOKMARK_RESEARCH_PYTHON to select an interpreter.\n");
|
|
64
|
+
python = { command: "python3", args: [] };
|
|
65
|
+
}
|
|
66
|
+
const env = Object.fromEntries(FORWARDED_ENV
|
|
67
|
+
.filter((key) => process.env[key] !== undefined)
|
|
68
|
+
.map((key) => [key, process.env[key]]));
|
|
24
69
|
ctx.provide("bookmarkResearchPaths", {
|
|
25
70
|
root,
|
|
26
|
-
cli
|
|
71
|
+
cli,
|
|
72
|
+
python,
|
|
73
|
+
mcpArgs: [...python.args, cli, "serve"],
|
|
74
|
+
env,
|
|
27
75
|
});
|
|
28
76
|
ctx.skills.registerProvider(() => ({
|
|
29
77
|
name,
|
package/package.json
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bookmark-research",
|
|
3
|
-
"version": "0.5.0-beta.
|
|
3
|
+
"version": "0.5.0-beta.6",
|
|
4
4
|
"description": "Check bookmark URLs or Canvas packages, compare sources with host-led research, and retain verifiable reports.",
|
|
5
5
|
"license": "GPL-3.0-only",
|
|
6
6
|
"repository": {"type": "git", "url": "git+https://github.com/Browser-bookmark-hub/Bookmark-Research.git"},
|
|
7
7
|
"keywords": ["bookmark-research", "mcp", "claude-code", "codex", "pi-package", "deepseek-harness"],
|
|
8
8
|
"bin": {"bookmark-research": "bin/bookmark-research.js"},
|
|
9
|
+
"main": "./hosts/dsh/plugin.js",
|
|
9
10
|
"engines": {"node": ">=18"},
|
|
10
|
-
"files": ["bin", "src", "scripts", "config", "skills", "hosts", "docs", ".codex-plugin/plugin.json", ".agents/plugins/marketplace.json", "install.sh", "LICENSE", "README.md", "README.zh.md", "!**/__pycache__", "!**/*.pyc"],
|
|
11
|
-
"pi": {"skills": ["./skills"]}
|
|
11
|
+
"files": ["bin", "src", "scripts", "config", "skills", "hosts", "docs", "bundle.patch.yml", ".codex-plugin/plugin.json", ".agents/plugins/marketplace.json", "install.sh", "LICENSE", "README.md", "README.zh.md", "!**/__pycache__", "!**/*.pyc"],
|
|
12
|
+
"pi": {"skills": ["./skills"]},
|
|
13
|
+
"dsh": {"bundle": {"patch": "./bundle.patch.yml"}}
|
|
12
14
|
}
|