bookmark-research 0.5.0-beta.6 → 0.5.0-beta.7
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 +6 -6
- package/README.zh.md +6 -6
- package/docs/bookmark-research-architecture.md +1 -1
- package/docs/distribution.md +1 -1
- package/docs/host-validation.json +14 -3
- package/docs/release-notes-0.5.0-beta.7.md +57 -0
- package/hosts/dsh/plugin.js +11 -0
- package/package.json +47 -8
- package/src/bookmark_index.py +230 -23
- package/src/cli.py +84 -4
- package/src/jina.py +2 -1
- package/src/mcp_server.py +41 -10
- package/src/raw_library.py +25 -7
- package/src/release.py +40 -0
- package/src/remote_mcp.py +4 -2
- package/src/research.py +118 -48
- package/src/source_manager.py +105 -0
- package/src/wiki.py +111 -13
package/README.md
CHANGED
|
@@ -22,13 +22,13 @@ Works in **Codex, Claude Code, Pi and DSH (DeepSeek Harness)**.
|
|
|
22
22
|
|
|
23
23
|
## Install
|
|
24
24
|
|
|
25
|
-
**Current beta (`0.5.0-beta.
|
|
25
|
+
**Current beta (`0.5.0-beta.7`)**, interactive on macOS, Linux and Windows:
|
|
26
26
|
|
|
27
27
|
```sh
|
|
28
|
-
npx bookmark-research@0.5.0-beta.
|
|
28
|
+
npx bookmark-research@0.5.0-beta.7 install --source npm:bookmark-research@0.5.0-beta.7
|
|
29
29
|
```
|
|
30
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.
|
|
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.7`. Changing only the npx selector does not change the installer's default content source.
|
|
32
32
|
|
|
33
33
|
**Default-channel interactive installation:**
|
|
34
34
|
|
|
@@ -129,7 +129,7 @@ A bundle of one Skill, one local MCP server, and the remote MCPs and services th
|
|
|
129
129
|
| Layer | Component | Runs as | Setup |
|
|
130
130
|
| --- | --- | --- | --- |
|
|
131
131
|
| Skill | [`bookmark-research`](skills/bookmark-research/SKILL.md) and 11 method references, each with a [Chinese copy](skills/bookmark-research/references/zh/skill-guide.md) | Loaded by the client | None |
|
|
132
|
-
| Local MCP | `bookmark-research`,
|
|
132
|
+
| Local MCP | `bookmark-research`, 40 tools (below; the list grows with capabilities) | Python process started by the client | Installed for you |
|
|
133
133
|
| Remote MCPs, called by the local MCP | [Exa](https://exa.ai) (search, page reading), [Parallel](https://parallel.ai) (search, fallback reading), [Tavily](https://tavily.com) (search fallback) | HTTPS, no local process | Optional API keys |
|
|
134
134
|
| HTTP service, called by the local MCP | [Jina Reader](https://jina.ai/reader) (fallback reading; search with a key) | HTTPS | Optional `JINA_API_KEY` |
|
|
135
135
|
| Optional client MCPs | Exa Agent, Parallel Task MCP, Tavily Research | Added to your client by you | `bookmark-research setup` shows the steps |
|
|
@@ -138,12 +138,12 @@ Local MCP tools:
|
|
|
138
138
|
|
|
139
139
|
| Group | Tools |
|
|
140
140
|
| --- | --- |
|
|
141
|
-
| Bookmarks | `sync_package`, `index_status`, `source_history`, `search_bookmarks`, `get_context` |
|
|
141
|
+
| Bookmarks | `sync_package`, `index_status`, `source_history`, `source_remove`, `source_merge`, `search_bookmarks`, `get_context` |
|
|
142
142
|
| Web | `search_web`, `fetch_web`, `search_archive`, `search_providers` |
|
|
143
143
|
| Research | `research_readiness`, `research_start`, `research_status`, `research_search`, `research_fetch`, `research_source`, `research_record`, `research_inventory`, `research_coverage`, `research_import_evidence`, `research_finish`, `research_route` |
|
|
144
144
|
| Research services (optional) | `research_services`, `research_service_prepare`, `_start`, `_status`, `_result`, `_cancel`, `_attach`, `_import` |
|
|
145
145
|
| Settings | `get_settings`, `update_settings` |
|
|
146
|
-
| Wiki and evaluation | `wiki_write`, `wiki_get`, `wiki_list`, `wiki_search`, `wiki_lint`, `evaluate_research` |
|
|
146
|
+
| Wiki and evaluation | `wiki_write`, `wiki_get`, `wiki_list`, `wiki_search`, `wiki_lint`, `wiki_acknowledge`, `evaluate_research` |
|
|
147
147
|
|
|
148
148
|
Tool descriptions: [details](docs/details.en.md#mcp-tools).
|
|
149
149
|
|
package/README.zh.md
CHANGED
|
@@ -22,13 +22,13 @@
|
|
|
22
22
|
|
|
23
23
|
## 安装
|
|
24
24
|
|
|
25
|
-
**当前测试版(`0.5.0-beta.
|
|
25
|
+
**当前测试版(`0.5.0-beta.7`)**,支持 macOS、Linux、Windows 交互安装:
|
|
26
26
|
|
|
27
27
|
```sh
|
|
28
|
-
npx bookmark-research@0.5.0-beta.
|
|
28
|
+
npx bookmark-research@0.5.0-beta.7 install --source npm:bookmark-research@0.5.0-beta.7
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
这条命令同时固定安装器和插件内容。下面的 `@latest` 示例使用默认渠道,目前仍为 `0.5.0-beta.3`;`@beta` 当前指向 `0.5.0-beta.
|
|
31
|
+
这条命令同时固定安装器和插件内容。下面的 `@latest` 示例使用默认渠道,目前仍为 `0.5.0-beta.3`;`@beta` 当前指向 `0.5.0-beta.7`。只改 npx 的版本选择,不会改变安装器默认下载的内容来源。
|
|
32
32
|
|
|
33
33
|
**默认渠道的交互安装:**
|
|
34
34
|
|
|
@@ -129,7 +129,7 @@ setup 还会问研究报告和证据放在哪里:统一目录(默认 `<数
|
|
|
129
129
|
| 层 | 组成 | 运行方式 | 需要配置 |
|
|
130
130
|
| --- | --- | --- | --- |
|
|
131
131
|
| Skill | [`bookmark-research`](skills/bookmark-research/SKILL.md) 及 11 份方法参考,每份都有[中文版](skills/bookmark-research/references/zh/skill-guide.md) | 由宿主加载 | 不需要 |
|
|
132
|
-
| 本地 MCP | `bookmark-research`,
|
|
132
|
+
| 本地 MCP | `bookmark-research`,40 个工具(见下表;随能力增长) | 宿主启动的 Python 进程 | 安装器自动完成 |
|
|
133
133
|
| 本地 MCP 调用的远程 MCP | [Exa](https://exa.ai)(搜索、网页读取)、[Parallel](https://parallel.ai)(搜索、备用读取)、[Tavily](https://tavily.com)(备用搜索) | HTTPS,不启动本地进程 | 可选 API Key |
|
|
134
134
|
| 本地 MCP 调用的 HTTP 服务 | [Jina Reader](https://jina.ai/reader)(备用读取;有 Key 时可搜索) | HTTPS | 可选 `JINA_API_KEY` |
|
|
135
135
|
| 可选的宿主 MCP | Exa Agent、Parallel Task MCP、Tavily Research | 需自行加到宿主里 | `bookmark-research setup` 会给出步骤 |
|
|
@@ -138,12 +138,12 @@ setup 还会问研究报告和证据放在哪里:统一目录(默认 `<数
|
|
|
138
138
|
|
|
139
139
|
| 分类 | 工具 |
|
|
140
140
|
| --- | --- |
|
|
141
|
-
| 书签 | `sync_package`、`index_status`、`source_history`、`search_bookmarks`、`get_context` |
|
|
141
|
+
| 书签 | `sync_package`、`index_status`、`source_history`、`source_remove`、`source_merge`、`search_bookmarks`、`get_context` |
|
|
142
142
|
| 网页 | `search_web`、`fetch_web`、`search_archive`、`search_providers` |
|
|
143
143
|
| 研究 | `research_readiness`、`research_start`、`research_status`、`research_search`、`research_fetch`、`research_source`、`research_record`、`research_inventory`、`research_coverage`、`research_import_evidence`、`research_finish`、`research_route` |
|
|
144
144
|
| 专业研究服务(可选) | `research_services`、`research_service_prepare`、`_start`、`_status`、`_result`、`_cancel`、`_attach`、`_import` |
|
|
145
145
|
| 设置 | `get_settings`、`update_settings` |
|
|
146
|
-
| Wiki 与评测 | `wiki_write`、`wiki_get`、`wiki_list`、`wiki_search`、`wiki_lint`、`evaluate_research` |
|
|
146
|
+
| Wiki 与评测 | `wiki_write`、`wiki_get`、`wiki_list`、`wiki_search`、`wiki_lint`、`wiki_acknowledge`、`evaluate_research` |
|
|
147
147
|
|
|
148
148
|
## 更多
|
|
149
149
|
|
|
@@ -44,7 +44,7 @@ flowchart TB
|
|
|
44
44
|
|
|
45
45
|
subgraph Plugin["Bookmark Research Plugin"]
|
|
46
46
|
Skill["Skill:Markdown 指令<br/>查询方法、研究规则与宿主路由"]
|
|
47
|
-
MCP["本地 MCP 入口<br/>src/mcp_server.py ·
|
|
47
|
+
MCP["本地 MCP 入口<br/>src/mcp_server.py · 工具随能力增长(本版 40 个)"]
|
|
48
48
|
CLI["Python CLI 入口<br/>src/cli.py"]
|
|
49
49
|
Core["共用 Python 运行时<br/>Python 3.9+ 标准库"]
|
|
50
50
|
Sources["来源接入、增量同步与本地查询"]
|
package/docs/distribution.md
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
发布顺序:修改源码版本并完成 CI,发布已经验证的 npm 包,确认 registry 可取得该版本,再更新 GitHub marketplace 的固定版本。未发布源码不能通过 npm 入口安装;需要先用源码入口测试。
|
|
21
21
|
|
|
22
|
-
测试版使用 npm 的 `beta` 标签;若创建 GitHub 版本说明,则标记为预发布。不会自动移动 npm 的 `latest` 标签。安装测试版时同时固定安装器与内容来源,例如 `npx bookmark-research@0.5.0-beta.
|
|
22
|
+
测试版使用 npm 的 `beta` 标签;若创建 GitHub 版本说明,则标记为预发布。不会自动移动 npm 的 `latest` 标签。安装测试版时同时固定安装器与内容来源,例如 `npx bookmark-research@0.5.0-beta.7 install --source npm:bookmark-research@0.5.0-beta.7`。仅将 npx 改为 `@beta` 不会改变默认内容来源 `latest`;已固定的旧版安装也不会自动换成测试版。
|
|
23
23
|
|
|
24
24
|
## 官方资料与项目实例
|
|
25
25
|
|
|
@@ -300,10 +300,11 @@
|
|
|
300
300
|
"host": "dsh",
|
|
301
301
|
"profile": "desktop",
|
|
302
302
|
"runtime_version": "0.2.0-rc.2",
|
|
303
|
-
"package_version": "0.5.0-beta.
|
|
303
|
+
"package_version": "0.5.0-beta.6",
|
|
304
304
|
"methods": [
|
|
305
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)"
|
|
306
|
+
"dsh plugin --profile <throwaway> add <packed release tarball> (registry-equivalent spec)",
|
|
307
|
+
"dsh plugin --profile desktop add bookmark-research@0.5.0-beta.6 (published registry release)"
|
|
307
308
|
],
|
|
308
309
|
"observed": {
|
|
309
310
|
"bundle_selected_into_profile": true,
|
|
@@ -320,8 +321,18 @@
|
|
|
320
321
|
"unit_tests_passed": 506,
|
|
321
322
|
"temporary_test_profile_removed": true
|
|
322
323
|
},
|
|
324
|
+
"published_release": {
|
|
325
|
+
"version": "0.5.0-beta.6",
|
|
326
|
+
"dist_tag": "beta",
|
|
327
|
+
"tarball_shasum": "7b9a11c7ef89ae9bba442b0b59b9e5ad8d5c0242",
|
|
328
|
+
"tarball_matches_verified_local_build": true,
|
|
329
|
+
"ships_dsh_bundle_layer": true,
|
|
330
|
+
"profile_dependency": "0.5.0-beta.6",
|
|
331
|
+
"installed_as_real_directory": true,
|
|
332
|
+
"bundle_selected_by_dsh": true,
|
|
333
|
+
"mcp_tools_listed_from_installed_copy": 37
|
|
334
|
+
},
|
|
323
335
|
"not_verified": [
|
|
324
|
-
"a published npm release that carries bundle.patch.yml; the released 0.5.0-beta.5 predates it",
|
|
325
336
|
"Windows or Pi installation",
|
|
326
337
|
"the npm cache permission retry on a failing machine (unit-tested only; this machine used npm_config_cache instead)"
|
|
327
338
|
]
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Bookmark Research 0.5.0 beta 7
|
|
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.7 install --source npm:bookmark-research@0.5.0-beta.7
|
|
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
|
+
DSH installs the released layer directly:
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
dsh plugin --profile <name> add bookmark-research@0.5.0-beta.7
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Changes
|
|
22
|
+
|
|
23
|
+
### Correctness
|
|
24
|
+
|
|
25
|
+
- **One release-version source.** `src/release.py` reads `package.json`, and the MCP `serverInfo`, the remote client `clientInfo` and both outbound user agents use it. Runtime identity had reported `0.5.0-beta.3` while the manifests said `0.5.0-beta.6`. A regression test fails any build that reintroduces a hardcoded release version outside `release.py`, and asserts that the real handshake matches the manifest.
|
|
26
|
+
- **A copied data directory resolves its own research tasks.** `research-locations.json` carries absolute paths, so a same-machine clone used to read and write the *origin's* task folder even when `--directory` named the clone. The task folder inside the data directory in use now wins, the registry stays the fallback for tasks created beside their input, and a second valid folder for the same id is reported as `location_status: "conflict"` with `alternate_path` instead of being hidden.
|
|
27
|
+
- **The task lock no longer spans a network request.** A provider that answered slowly held the task lock for the whole call, so an independent process recording a finding timed out after ten seconds with a settings-worded error. Reservation, request and commit are now separate: only reserve and commit hold the lock, a mid-request fallback reservation re-reads state under it, and genuine contention returns a retryable "research task is being written by another process".
|
|
28
|
+
- **Every occurrence of a merged body can be enumerated.** `search_archive` truncated a body's occurrences at 50 with no marker and no continuation. Results now carry the true `occurrence_count`, `occurrences_truncated` and `occurrences_next_offset`, and `occurrence_limit` / `occurrence_offset` page through them in a stable order.
|
|
29
|
+
- **A legitimate source change can be resolved.** `source_input_changed` is a warning about the frozen research input version; re-reviewing a page could never clear it. `wiki_write` now accepts `reviewed_input_version`, `wiki acknowledge` records a review without editing content, acknowledgements carry forward while they are still current, and a later source change reopens the warning. `wiki_lint` also reports `severity: "info"` for an acknowledged change instead of leaving only the warning.
|
|
30
|
+
- **`wiki.directory` applies without a restart.** A long-lived stdio server cached the Wiki store built from the directory configured at first use, so `update_settings` appeared to succeed while reads and writes continued against the old location.
|
|
31
|
+
|
|
32
|
+
### Retrieval
|
|
33
|
+
|
|
34
|
+
- **`items_fts` now answers queries.** The shipped FTS table used the default tokenizer, which treats a whole run of CJK characters as one token, so it could not match `推理` inside `推理加速` and the query path used `LIKE` only. The table uses the substring-based **trigram** tokenizer and is rebuilt in place when an existing database is opened. Terms of three or more characters use `MATCH`; one- and two-character terms keep the `LIKE` fallback, because a trigram index cannot answer them. Substring semantics are unchanged (`RAG` still finds `AutoRAG`). When trigram is unavailable the index stays usable and every term falls back to `LIKE`.
|
|
35
|
+
- **Whitespace-separated terms are required together.** A multi-word target was matched as one literal phrase, so `linux.do topic` returned nothing. Each term must now occur; `推理 加速` requires both words.
|
|
36
|
+
- **Canvas text is findable.** Group labels, edge labels and text cards were outside every search field, so asking about "the card labelled 123" returned unrelated short-substring bookmark hits with no sign that `123` was a group label. `search_bookmarks` now reports `canvas_matches` (attributed per target) and states explicitly that they are not bookmark items and never inflate `total`.
|
|
37
|
+
- **Counting guardrails.** A copy anchor reports the shared tree's count, so summing per-card counts over-reported 638 bookmarks as 1239. `context.sections[]` now carries `counted_in_totals` and `anchor_of`, `context.counts` and `search.counts` give instance and unique-URL totals for the scope, `search` warns when the requested card is an anchor, and items report `shown_in_anchors`.
|
|
38
|
+
- **Smaller gaps.** Folders can be enumerated (`item_types` / `--item-type folder`), the synthetic untitled tree root is marked `synthetic` and counted separately as `tree_roots`, `search` returns `next_offset`, `limit=0` / `count_only` returns counts without rows, tag colours are filterable, and Wiki search matches text whose spacing differs from the query (`唯一URL` finds `唯一 URL`).
|
|
39
|
+
|
|
40
|
+
### Operations
|
|
41
|
+
|
|
42
|
+
- **Duplicate imports are no longer silent, and can be undone.** Importing the same canvas from a new folder used to add a second identical source with `warnings: []` and no way back. `sync_package` now reports `duplicate_source_ids` with a warning naming the source to reuse, and `source remove` / `source merge` (MCP `source_remove` / `source_merge`, CLI `source remove` / `source merge`) clean up. Both only report until `confirm: true` / `--confirm` is passed; merge refuses sources whose content versions differ and moves the duplicate's path aliases to the survivor.
|
|
43
|
+
- **`doctor` checks that it can actually write.** An unwritable data directory produced a fully green `doctor` followed by a raw SQLite error from the first import. `doctor.storage` now probes the data directory, the config directory and an existing database, and reports `next_step` with the exact environment variables to set. A read-only failure from any command is rewritten to name `BOOKMARK_RESEARCH_DATA_DIR` and `BOOKMARK_RESEARCH_CONFIG`.
|
|
44
|
+
- **An incomplete DSH install says so.** The DSH entry module preflights `src/cli.py` and the Skill before registering; when either is missing it writes the reason and the reinstall command to stderr and registers nothing, instead of letting the host fail later with a bare `ENOENT`.
|
|
45
|
+
- **`partial` retention is stated up front.** `status` returns `retained_missing_note` when imported files are no longer in the package.
|
|
46
|
+
|
|
47
|
+
## New tools
|
|
48
|
+
|
|
49
|
+
`wiki_acknowledge`, `source_remove` and `source_merge` bring the local MCP surface from 37 to 40 tools. `search_bookmarks` gained `tag_colors`, `item_types` and `count_only`; `search_archive` gained `occurrence_limit` and `occurrence_offset`.
|
|
50
|
+
|
|
51
|
+
## Validation and limits
|
|
52
|
+
|
|
53
|
+
561 discovered local tests pass (three conditional integration tests skipped), up from 506, with new coverage for every change above. Verified end to end on the sample canvas package (638 bookmark instances, 557 unique URLs, 5 sections, 7 canvas nodes, 3 edges): index counts still match an independent parse, the copy anchor is not double counted, `complete` still refuses an incoherent export and keeps the previous index, a fabricated citation is still rejected, and `research_finish` still refuses to claim completion while original URLs are unread.
|
|
54
|
+
|
|
55
|
+
Not verified in this release: Windows and Pi installation; a fresh DSH Desktop profile (the running app still resolves the Skill from a native-install directory that a previous installer created and that no longer exists — restarting the app, or reinstalling into the profile, re-resolves it); ten-thousand-plus URL research budgets; and the still-open items listed in the evaluation report: `context()` N+1 queries, an index time field, and local-only facts entering a research report.
|
|
56
|
+
|
|
57
|
+
Install from [npm](https://www.npmjs.com/package/bookmark-research/v/0.5.0-beta.7). GitHub supplies source, version notes and installation catalogs; npm remains the shared release package for all four hosts.
|
package/hosts/dsh/plugin.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
2
3
|
import { readFile } from "node:fs/promises";
|
|
3
4
|
import { fileURLToPath } from "node:url";
|
|
4
5
|
|
|
@@ -63,6 +64,16 @@ export function apply(ctx) {
|
|
|
63
64
|
+ "Set BOOKMARK_RESEARCH_PYTHON to select an interpreter.\n");
|
|
64
65
|
python = { command: "python3", args: [] };
|
|
65
66
|
}
|
|
67
|
+
// Preflight the files this provider advertises. A stale registration used to
|
|
68
|
+
// surface only as an ENOENT when the host tried to load the Skill or start
|
|
69
|
+
// the MCP child, with nothing telling the user how to recover.
|
|
70
|
+
const missing = [cli, fileURLToPath(skillUrl)].filter((path) => !existsSync(path));
|
|
71
|
+
if (missing.length > 0) {
|
|
72
|
+
process.stderr.write("bookmark-research: installation is incomplete; missing " + missing.join(", ") + ".\n"
|
|
73
|
+
+ "Reinstall the plugin (for example: npx --yes --package=bookmark-research@latest bookmark-research install"
|
|
74
|
+
+ " --host dsh) or remove the stale registration that points at a deleted install directory.\n");
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
66
77
|
const env = Object.fromEntries(FORWARDED_ENV
|
|
67
78
|
.filter((key) => process.env[key] !== undefined)
|
|
68
79
|
.map((key) => [key, process.env[key]]));
|
package/package.json
CHANGED
|
@@ -1,14 +1,53 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bookmark-research",
|
|
3
|
-
"version": "0.5.0-beta.
|
|
3
|
+
"version": "0.5.0-beta.7",
|
|
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
|
-
"repository": {
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/Browser-bookmark-hub/Bookmark-Research.git"
|
|
9
|
+
},
|
|
10
|
+
"keywords": [
|
|
11
|
+
"bookmark-research",
|
|
12
|
+
"mcp",
|
|
13
|
+
"claude-code",
|
|
14
|
+
"codex",
|
|
15
|
+
"pi-package",
|
|
16
|
+
"deepseek-harness"
|
|
17
|
+
],
|
|
18
|
+
"bin": {
|
|
19
|
+
"bookmark-research": "bin/bookmark-research.js"
|
|
20
|
+
},
|
|
9
21
|
"main": "./hosts/dsh/plugin.js",
|
|
10
|
-
"engines": {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=18"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"bin",
|
|
27
|
+
"src",
|
|
28
|
+
"scripts",
|
|
29
|
+
"config",
|
|
30
|
+
"skills",
|
|
31
|
+
"hosts",
|
|
32
|
+
"docs",
|
|
33
|
+
"bundle.patch.yml",
|
|
34
|
+
".codex-plugin/plugin.json",
|
|
35
|
+
".agents/plugins/marketplace.json",
|
|
36
|
+
"install.sh",
|
|
37
|
+
"LICENSE",
|
|
38
|
+
"README.md",
|
|
39
|
+
"README.zh.md",
|
|
40
|
+
"!**/__pycache__",
|
|
41
|
+
"!**/*.pyc"
|
|
42
|
+
],
|
|
43
|
+
"pi": {
|
|
44
|
+
"skills": [
|
|
45
|
+
"./skills"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
"dsh": {
|
|
49
|
+
"bundle": {
|
|
50
|
+
"patch": "./bundle.patch.yml"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
14
53
|
}
|