@luffysolution/omnischolar-pi 0.1.0 → 0.1.2

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.
@@ -0,0 +1,83 @@
1
+ # 文献、Zotero 与 PDF
2
+
3
+ [English](RESEARCH.en.md)
4
+
5
+ ## 文献检索
6
+
7
+ | 工具 | 用途 |
8
+ |---|---|
9
+ | `research_sources` | 查看已启用的数据源和可用功能 |
10
+ | `literature_search` | 检索论文,可限制年份、类型和开放获取状态 |
11
+ | `literature_get` | 按 DOI、PMID/PMCID、arXiv ID 或数据源 ID 获取详情 |
12
+ | `literature_graph` | 查询参考文献、施引文献或推荐论文 |
13
+ | `journal_metrics` | 查询已支持的期刊指标 |
14
+ | `literature_fulltext` | 查找合法全文地址,或将允许访问的文件保存到输出目录 |
15
+
16
+ 各数据源侧重点不同:
17
+
18
+ - Semantic Scholar 和 OpenAlex 适合跨学科检索与引用关系。
19
+ - PubMed/PMC 适合生物医学文献,PMC 还能提供带许可信息的开放全文。
20
+ - arXiv 保留预印本标识符和版本信息。
21
+ - Crossref 适合核对 DOI 注册元数据。
22
+ - Unpaywall 用于查找开放获取版本,不绕过订阅或访问控制。
23
+ - easyScholar 提供当前接口支持的期刊指标。
24
+ - Ai4Scholar 还可查询 Google Scholar、Google Patents、作者、数据集和期刊信息,部分调用会消耗额度。
25
+
26
+ 检索时先用较小的 `limit`。优先按 DOI 去重;没有 DOI 时,再比较标题、年份和第一作者。标题相似只能用于筛选,不能代替正文证据。
27
+
28
+ 遇到 HTTP 429 时,OmniScholar 会返回限流信息。等待服务商给出的时间后再试,或改用支持同一查询的数据源。不要连续提交相同请求。
29
+
30
+ ## Zotero
31
+
32
+ OmniScholar 只连接本机 Zotero API:
33
+
34
+ ```text
35
+ http://127.0.0.1:23119/api
36
+ ```
37
+
38
+ 需要在 Zotero 中开启“允许其他应用程序与 Zotero 通信”,并保持 Zotero Desktop 运行。
39
+
40
+ | 工具 | 可读取内容 |
41
+ |---|---|
42
+ | `zotero_collections` | 收藏夹及其条目 |
43
+ | `zotero_search` | 文献条目、笔记、批注和附件 |
44
+ | `zotero_item` | 单个条目或聚合后的论文视图 |
45
+
46
+ 聚合视图可包含书目信息、笔记、批注、附件信息、索引文本和本地 PDF 路径。OmniScholar 不会创建、修改、移动、加标签或删除 Zotero 数据。
47
+
48
+ Zotero 笔记和批注属于个人阅读记录,不应当作论文原文证据。需要引用论文结论时,仍要核对原文。
49
+
50
+ ## MinerU 解析
51
+
52
+ `omnischolar_parse` 检查 PDF 文件、计算 SHA-256,并使用 MinerU 返回正文、公式、表格和图片。解析结果会缓存;同一文件和解析设置再次调用时可直接命中缓存。
53
+
54
+ 上传必须同时得到两次确认:
55
+
56
+ 1. 配置中的 `mineru.allowExternalUpload` 为 `true`;
57
+ 2. 本次 `omnischolar_parse` 调用中的 `allowExternalUpload` 为 `true`。
58
+
59
+ OmniScholar 不会自动把 Zotero 附件上传到 MinerU。应先确认具体条目和文件,再单独批准上传。`force` 会重新解析并产生一次新上传,因此也需要新的授权。
60
+
61
+ 下载的 MinerU 压缩包会在解压前检查路径、符号链接、文件数量和展开大小。检查失败时不写入输出目录。
62
+
63
+ ## 引用
64
+
65
+ 引用工作分为两步:先确认来源是否支持论点,再格式化书目信息。
66
+
67
+ 1. 用 `literature_search` 和 `literature_get` 查找来源。
68
+ 2. 核对 DOI、PMID、arXiv ID、标题、作者和年份。
69
+ 3. 阅读与论点相关的正文段落。
70
+ 4. 使用 `ai4scholar_citation_candidates` 补充候选时,先确认付费调用。
71
+ 5. 只对已核对的记录使用 `ai4scholar_cite`。
72
+
73
+ 格式正确的参考文献不代表论点已经得到支持。Ai4Scholar 的 Google Scholar 引用格式化目前可能缺少接口要求的结果 ID;遇到 `blocked` 时,不要自行拼接 ID。
74
+
75
+ ## 保存到 Markdown 或 Obsidian
76
+
77
+ `omnischolar_sync` 会先给出计划,再写入 `output.rootDirectory`。该目录可以是普通文件夹,也可以位于 Obsidian Vault 中。
78
+
79
+ 同步会区分新建、无需更新、元数据变化、解析变化、渲染变化、文件缺失、冲突、排除和中断恢复。仅修复元数据、渲染或中断事务时不会上传 PDF。
80
+
81
+ 若已生成的 Markdown 被手工修改,默认策略会保留现有文件,并把新版本写入 `.conflicts/`。检查两份内容后再决定如何合并。
82
+
83
+ 首次写入真实 Vault 前,可先把 `output.rootDirectory` 指向临时目录,确认目录名、Markdown 和图片路径符合预期。
@@ -0,0 +1,49 @@
1
+ # Tool list
2
+
3
+ [简体中文](TOOLS.md)
4
+
5
+ Tool and capability names match the values returned to agents.
6
+
7
+ | Tool | Group | Capabilities | Side effects | Network | Credentials | Cost |
8
+ |---|---|---|---|---:|---|---|
9
+ | `omnischolar_status` | runtime | `runtime.status` | none | no | none | free |
10
+ | `omnischolar_capabilities` | runtime | `runtime.capabilities` | none | no | none | free |
11
+ | `research_sources` | literature | `literature.sources` | none | no | none | free |
12
+ | `literature_search` | literature | `literature.search` | none | yes | none | free |
13
+ | `literature_get` | literature | `literature.lookup` | none | yes | none | free |
14
+ | `literature_graph` | literature | `literature.references`, `literature.citations`, `literature.recommendations` | none | yes | none | free |
15
+ | `journal_metrics` | literature | `journal.metrics` | none | yes | none | free |
16
+ | `literature_fulltext` | literature | `fulltext.resolve`, `fulltext.fetch` | filesystem | yes | none | free |
17
+ | `zotero_collections` | zotero | `zotero.collections` | none | yes | none | free |
18
+ | `zotero_search` | zotero | `zotero.search` | none | yes | none | free |
19
+ | `zotero_item` | zotero | `zotero.item`, `zotero.aggregate` | none | yes | none | free |
20
+ | `omnischolar_parse` | parsing | `pdf.parse`, `sync.publish` | external-upload | yes | mineru | metered |
21
+ | `omnischolar_sync` | parsing | `sync.plan`, `sync.apply`, `sync.recovery` | filesystem | yes | none | free |
22
+ | `ai4scholar_search` | ai4scholar | `ai4scholar.search` | paid | yes | ai4scholar | paid |
23
+ | `ai4scholar_paper` | ai4scholar | `ai4scholar.paper` | paid | yes | ai4scholar | paid |
24
+ | `ai4scholar_author` | ai4scholar | `ai4scholar.author` | paid | yes | ai4scholar | paid |
25
+ | `ai4scholar_batch` | ai4scholar | `ai4scholar.batch` | paid | yes | ai4scholar | paid |
26
+ | `ai4scholar_recommend` | ai4scholar | `ai4scholar.recommend` | paid | yes | ai4scholar | paid |
27
+ | `ai4scholar_cite` | citation | `citation.format` | paid | yes | ai4scholar | paid |
28
+ | `ai4scholar_snippets` | ai4scholar | `ai4scholar.snippets` | paid | yes | ai4scholar | paid |
29
+ | `ai4scholar_credits` | ai4scholar | `ai4scholar.credits` | none | yes | ai4scholar | free |
30
+ | `ai4scholar_dataset` | ai4scholar | `ai4scholar.dataset` | paid | yes | ai4scholar | paid |
31
+ | `ai4scholar_journal` | ai4scholar | `ai4scholar.journal` | paid | yes | ai4scholar | paid |
32
+ | `ai4scholar_citation_candidates` | citation | `citation.candidates` | paid | yes | ai4scholar | paid |
33
+ | `ai4scholar_figure` | media | `media.generate`, `media.edit`, `media.vectorize` | paid | yes | ai4scholar | paid |
34
+ | `materials_capabilities` | materials | `materials.capabilities` | none | no | materials-project | free |
35
+ | `materials_search` | materials | `materials.search` | none | yes | materials-project | free |
36
+ | `materials_route_search` | materials | `materials.route-search` | none | yes | materials-project | free |
37
+ | `materials_get` | materials | `materials.lookup` | none | yes | materials-project | free |
38
+ | `materials_advanced` | materials | `materials.phase-diagram`, `materials.xrd` | none | yes | materials-project | free |
39
+ | `materials_export` | materials | `materials.export` | filesystem | no | none | free |
40
+ | `chemical_sources` | chemistry | `chemistry.sources` | none | no | none | free |
41
+ | `chemical_search` | chemistry | `chemistry.search` | none | yes | cas | free |
42
+ | `chemical_get` | chemistry | `chemistry.lookup` | none | yes | cas | free |
43
+ | `omnischolar_image_models` | media | `media.models` | none | yes | none | free |
44
+ | `omnischolar_image_generate` | media | `text-to-image`, `image-to-image`, `multi-reference` | paid | yes | none | paid |
45
+ | `omnischolar_image_edit` | media | `media.edit`, `multi-reference` | paid | yes | none | paid |
46
+ | `omnischolar_image_service` | media | `media.service` | none | yes | none | free |
47
+
48
+ Arguments not declared in a tool's input schema are rejected.
49
+ Paid or upload-capable tools require both configuration and per-call authorization.
package/docs/TOOLS.md ADDED
@@ -0,0 +1,49 @@
1
+ # 工具目录
2
+
3
+ [English](TOOLS.en.md)
4
+
5
+ 工具名和功能标识保留英文,便于与 Agent 返回结果对照。
6
+
7
+ | 工具 | 分组 | 功能 | 可能产生的操作 | 联网 | 所需凭据 | 费用类型 |
8
+ |---|---|---|---|---:|---|---|
9
+ | `omnischolar_status` | runtime | `runtime.status` | none | no | none | free |
10
+ | `omnischolar_capabilities` | runtime | `runtime.capabilities` | none | no | none | free |
11
+ | `research_sources` | literature | `literature.sources` | none | no | none | free |
12
+ | `literature_search` | literature | `literature.search` | none | yes | none | free |
13
+ | `literature_get` | literature | `literature.lookup` | none | yes | none | free |
14
+ | `literature_graph` | literature | `literature.references`, `literature.citations`, `literature.recommendations` | none | yes | none | free |
15
+ | `journal_metrics` | literature | `journal.metrics` | none | yes | none | free |
16
+ | `literature_fulltext` | literature | `fulltext.resolve`, `fulltext.fetch` | filesystem | yes | none | free |
17
+ | `zotero_collections` | zotero | `zotero.collections` | none | yes | none | free |
18
+ | `zotero_search` | zotero | `zotero.search` | none | yes | none | free |
19
+ | `zotero_item` | zotero | `zotero.item`, `zotero.aggregate` | none | yes | none | free |
20
+ | `omnischolar_parse` | parsing | `pdf.parse`, `sync.publish` | external-upload | yes | mineru | metered |
21
+ | `omnischolar_sync` | parsing | `sync.plan`, `sync.apply`, `sync.recovery` | filesystem | yes | none | free |
22
+ | `ai4scholar_search` | ai4scholar | `ai4scholar.search` | paid | yes | ai4scholar | paid |
23
+ | `ai4scholar_paper` | ai4scholar | `ai4scholar.paper` | paid | yes | ai4scholar | paid |
24
+ | `ai4scholar_author` | ai4scholar | `ai4scholar.author` | paid | yes | ai4scholar | paid |
25
+ | `ai4scholar_batch` | ai4scholar | `ai4scholar.batch` | paid | yes | ai4scholar | paid |
26
+ | `ai4scholar_recommend` | ai4scholar | `ai4scholar.recommend` | paid | yes | ai4scholar | paid |
27
+ | `ai4scholar_cite` | citation | `citation.format` | paid | yes | ai4scholar | paid |
28
+ | `ai4scholar_snippets` | ai4scholar | `ai4scholar.snippets` | paid | yes | ai4scholar | paid |
29
+ | `ai4scholar_credits` | ai4scholar | `ai4scholar.credits` | none | yes | ai4scholar | free |
30
+ | `ai4scholar_dataset` | ai4scholar | `ai4scholar.dataset` | paid | yes | ai4scholar | paid |
31
+ | `ai4scholar_journal` | ai4scholar | `ai4scholar.journal` | paid | yes | ai4scholar | paid |
32
+ | `ai4scholar_citation_candidates` | citation | `citation.candidates` | paid | yes | ai4scholar | paid |
33
+ | `ai4scholar_figure` | media | `media.generate`, `media.edit`, `media.vectorize` | paid | yes | ai4scholar | paid |
34
+ | `materials_capabilities` | materials | `materials.capabilities` | none | no | materials-project | free |
35
+ | `materials_search` | materials | `materials.search` | none | yes | materials-project | free |
36
+ | `materials_route_search` | materials | `materials.route-search` | none | yes | materials-project | free |
37
+ | `materials_get` | materials | `materials.lookup` | none | yes | materials-project | free |
38
+ | `materials_advanced` | materials | `materials.phase-diagram`, `materials.xrd` | none | yes | materials-project | free |
39
+ | `materials_export` | materials | `materials.export` | filesystem | no | none | free |
40
+ | `chemical_sources` | chemistry | `chemistry.sources` | none | no | none | free |
41
+ | `chemical_search` | chemistry | `chemistry.search` | none | yes | cas | free |
42
+ | `chemical_get` | chemistry | `chemistry.lookup` | none | yes | cas | free |
43
+ | `omnischolar_image_models` | media | `media.models` | none | yes | none | free |
44
+ | `omnischolar_image_generate` | media | `text-to-image`, `image-to-image`, `multi-reference` | paid | yes | none | paid |
45
+ | `omnischolar_image_edit` | media | `media.edit`, `multi-reference` | paid | yes | none | paid |
46
+ | `omnischolar_image_service` | media | `media.service` | none | yes | none | free |
47
+
48
+ 未在输入 schema 中声明的参数会被拒绝。
49
+ 付费或上传工具必须同时通过配置开关和本次调用的显式授权。
@@ -0,0 +1,11 @@
1
+ # Agent configuration files
2
+
3
+ - Portable Agent Plugin and Codex: root `plugin.json`, `mcp.json`, and `skills/`
4
+ - Claude Code: `.claude-plugin/plugin.json`, root `.mcp.json`, and `skills/`
5
+ - Cursor: root Agent Plugin files plus `.cursor-plugin/plugin.json`
6
+ - OpenCode: merge `opencode.jsonc` into the project or user OpenCode config
7
+ - Hermes: merge `hermes.yaml` into `~/.hermes/config.yaml`
8
+ - Pi: see `pi.md`; the npm Extension bridges the local MCP server
9
+ - WorkBuddy/CodeBuddy: merge `workbuddy.json` into `~/.codebuddy/.mcp.json` or project `.mcp.json`
10
+
11
+ All supported MCP entries start the local command `omnischolar mcp`. These files contain no provider credentials.
@@ -0,0 +1,6 @@
1
+ mcp_servers:
2
+ omnischolar:
3
+ command: "omnischolar"
4
+ args: ["mcp"]
5
+ # Optional: restrict exposure with tools.include or tools.exclude.
6
+ # Inherit OMNISCHOLAR_* and provider environment variables from Hermes.
@@ -0,0 +1,11 @@
1
+ {
2
+ "$schema": "https://opencode.ai/config.json",
3
+ "mcp": {
4
+ "omnischolar": {
5
+ "type": "local",
6
+ "command": ["omnischolar", "mcp"],
7
+ "enabled": true,
8
+ "timeout": 10000
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,13 @@
1
+ # Pi
2
+
3
+ OmniScholar uses the npm-published `@luffysolution/omnischolar-pi` Extension to bridge its local MCP server into Pi. The full installer also copies Skills to `.pi/agent/skills` for user scope or `.pi/skills` for project scope.
4
+
5
+ ```sh
6
+ omnischolar install pi
7
+ # or install only the Extension with Pi's package manager
8
+ pi install npm:@luffysolution/omnischolar-pi
9
+ ```
10
+
11
+ The Extension starts `omnischolar mcp`, discovers the server's tools, forwards calls and cancellation signals, and closes the MCP client when the Pi session ends.
12
+
13
+ `omnischolar mcp install pi` remains `manual_required` because Pi uses an Extension instead of a native MCP settings file. Use the full `omnischolar install pi` command.
@@ -0,0 +1,10 @@
1
+ {
2
+ "mcpServers": {
3
+ "omnischolar": {
4
+ "type": "stdio",
5
+ "command": "omnischolar",
6
+ "args": ["mcp"],
7
+ "description": "OmniScholar research tools"
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,20 @@
1
+ # Tencent WorkBuddy / CodeBuddy
2
+
3
+ WorkBuddy/CodeBuddy CLI and IDE support local stdio MCP servers. Copy [`workbuddy.json`](workbuddy.json) into the MCP editor, or merge it into one of the documented files:
4
+
5
+ - User scope: `~/.codebuddy/.mcp.json`
6
+ - Project scope: `.mcp.json`
7
+
8
+ The installer can write the same entry:
9
+
10
+ ```sh
11
+ omnischolar install workbuddy
12
+ omnischolar install workbuddy --scope project
13
+ ```
14
+
15
+ The official documentation does not define a portable WorkBuddy Skills directory, so the Skills component remains manual.
16
+
17
+ Official references checked on 2026-09-10:
18
+
19
+ - <https://www.workbuddy.ai/docs/cli/mcp>
20
+ - <https://www.workbuddy.ai/docs/ide/User-guide/MCP>
@@ -0,0 +1,218 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "runtime": {
4
+ "cacheDirectory": ".omnischolar/cache",
5
+ "python": "python",
6
+ "logLevel": "info",
7
+ "maxOutputBytes": 51200,
8
+ "maxOutputLines": 2000,
9
+ "maxResponseBytes": 16777216,
10
+ "requestTimeoutSeconds": 30,
11
+ "workspaceRoots": ["."]
12
+ },
13
+ "tools": {
14
+ "groups": {
15
+ "literature": true,
16
+ "ai4scholar": true,
17
+ "zotero": true,
18
+ "parsing": true,
19
+ "citation": true,
20
+ "materials": true,
21
+ "chemistry": true,
22
+ "media": true
23
+ },
24
+ "disabled": []
25
+ },
26
+ "defaults": {
27
+ "language": "en",
28
+ "citationStyle": "apa",
29
+ "literatureLimit": 20,
30
+ "preferredLiteratureProviders": ["semantic-scholar", "openalex", "crossref"],
31
+ "defaultImageProvider": "openai"
32
+ },
33
+ "research": {
34
+ "fallback": true,
35
+ "maxPages": 10,
36
+ "cacheTtlSeconds": 3600,
37
+ "providers": {
38
+ "semantic-scholar": {
39
+ "enabled": true,
40
+ "apiKeyEnv": "OMNISCHOLAR_SEMANTIC_SCHOLAR_API_KEY",
41
+ "maxPages": 10
42
+ },
43
+ "openalex": {
44
+ "enabled": true,
45
+ "email": "researcher@example.edu",
46
+ "maxPages": 10
47
+ },
48
+ "pubmed": {
49
+ "enabled": true,
50
+ "apiKeyEnv": "OMNISCHOLAR_NCBI_API_KEY",
51
+ "email": "researcher@example.edu",
52
+ "tool": "omnischolar",
53
+ "maxPages": 10
54
+ },
55
+ "arxiv": {
56
+ "enabled": true,
57
+ "maxPages": 10
58
+ },
59
+ "crossref": {
60
+ "enabled": true,
61
+ "email": "researcher@example.edu",
62
+ "maxPages": 10
63
+ },
64
+ "unpaywall": {
65
+ "enabled": false,
66
+ "email": "researcher@example.edu",
67
+ "maxPages": 10
68
+ },
69
+ "easyscholar": {
70
+ "enabled": false,
71
+ "apiKeyEnv": "OMNISCHOLAR_EASYSCHOLAR_API_KEY",
72
+ "maxPages": 5
73
+ }
74
+ }
75
+ },
76
+ "ai4scholar": {
77
+ "enabled": false,
78
+ "baseUrl": "https://ai4scholar.net",
79
+ "apiKeyEnv": "OMNISCHOLAR_AI4SCHOLAR_API_KEY",
80
+ "timeoutSeconds": 60,
81
+ "maxResponseBytes": 16777216,
82
+ "allowPaid": false
83
+ },
84
+ "zotero": {
85
+ "enabled": true,
86
+ "baseUrl": "http://127.0.0.1:23119/api",
87
+ "maxItems": 500
88
+ },
89
+ "mineru": {
90
+ "enabled": false,
91
+ "baseUrl": "https://mineru.net/api/v4",
92
+ "lightweightBaseUrl": "https://mineru.net/api/v1/agent",
93
+ "apiKeyEnv": "OMNISCHOLAR_MINERU_API_KEY",
94
+ "model": "pipeline",
95
+ "cacheDirectory": ".omnischolar/mineru",
96
+ "pollIntervalSeconds": 2,
97
+ "pollTimeoutSeconds": 600,
98
+ "maxPdfBytes": 209715200,
99
+ "allowExternalUpload": false,
100
+ "allowLightweightFallback": false
101
+ },
102
+ "data": {
103
+ "materialsProject": {
104
+ "enabled": false,
105
+ "baseUrl": "https://api.materialsproject.org",
106
+ "apiKeyEnv": "OMNISCHOLAR_MATERIALS_PROJECT_API_KEY",
107
+ "maxPages": 10
108
+ },
109
+ "casCommonChemistry": {
110
+ "enabled": false,
111
+ "apiKeyEnv": "OMNISCHOLAR_CAS_API_KEY",
112
+ "baseUrl": null,
113
+ "contractFile": null
114
+ }
115
+ },
116
+ "media": {
117
+ "allowExternalUpload": false,
118
+ "allowPaid": false,
119
+ "maxInputBytes": 26214400,
120
+ "maxArtifactBytes": 52428800,
121
+ "providers": {
122
+ "openai": {
123
+ "enabled": false,
124
+ "apiKeyEnv": "OMNISCHOLAR_OPENAI_API_KEY",
125
+ "baseUrl": "https://api.openai.com/v1",
126
+ "models": {
127
+ "gpt-image-1": {
128
+ "capabilities": ["text-to-image", "image-to-image", "edit", "multi-reference"],
129
+ "paid": true
130
+ }
131
+ },
132
+ "options": {}
133
+ },
134
+ "google": {
135
+ "enabled": false,
136
+ "apiKeyEnv": "OMNISCHOLAR_GEMINI_API_KEY",
137
+ "baseUrl": "https://generativelanguage.googleapis.com/v1beta",
138
+ "models": {},
139
+ "options": {}
140
+ },
141
+ "vertex": {
142
+ "enabled": false,
143
+ "apiKeyEnv": "OMNISCHOLAR_VERTEX_ACCESS_TOKEN",
144
+ "project": "your-project",
145
+ "location": "us-central1",
146
+ "models": {},
147
+ "options": {}
148
+ },
149
+ "xai": {
150
+ "enabled": false,
151
+ "apiKeyEnv": "OMNISCHOLAR_XAI_API_KEY",
152
+ "baseUrl": "https://api.x.ai/v1",
153
+ "models": {},
154
+ "options": {}
155
+ },
156
+ "fal": {
157
+ "enabled": false,
158
+ "apiKeyEnv": "OMNISCHOLAR_FAL_API_KEY",
159
+ "baseUrl": "https://fal.run",
160
+ "models": {},
161
+ "options": {}
162
+ },
163
+ "dashscope": {
164
+ "enabled": false,
165
+ "apiKeyEnv": "OMNISCHOLAR_DASHSCOPE_API_KEY",
166
+ "baseUrl": "https://your-workspace.cn-beijing.maas.aliyuncs.com/api/v1",
167
+ "models": {},
168
+ "options": {
169
+ "workspace": "your-workspace"
170
+ }
171
+ },
172
+ "qwen-cloud": {
173
+ "enabled": false,
174
+ "apiKeyEnv": "OMNISCHOLAR_QWEN_API_KEY",
175
+ "baseUrl": "https://your-workspace.ap-southeast-1.maas.aliyuncs.com/api/v1",
176
+ "models": {},
177
+ "options": {
178
+ "workspace": "your-workspace"
179
+ }
180
+ },
181
+ "atlas": {
182
+ "enabled": false,
183
+ "apiKeyEnv": "OMNISCHOLAR_ATLAS_API_KEY",
184
+ "baseUrl": "https://your-atlas-provider.example/v1",
185
+ "models": {},
186
+ "options": {}
187
+ },
188
+ "custom": {
189
+ "enabled": false,
190
+ "apiKeyEnv": "OMNISCHOLAR_CUSTOM_IMAGE_API_KEY",
191
+ "baseUrl": "https://images.example.edu/v1",
192
+ "models": {
193
+ "explicit-model-id": {
194
+ "capabilities": ["text-to-image"],
195
+ "paid": true
196
+ }
197
+ },
198
+ "options": {
199
+ "generationEndpoint": "images/generations",
200
+ "editEndpoint": "images/edits"
201
+ }
202
+ }
203
+ }
204
+ },
205
+ "sync": {
206
+ "namespace": null,
207
+ "cacheDirectory": ".omnischolar/sync",
208
+ "conflictPolicy": "preserve-local",
209
+ "recovery": true,
210
+ "backup": true,
211
+ "avoidUnnecessaryParse": true
212
+ },
213
+ "output": {
214
+ "rootDirectory": "omnischolar-output",
215
+ "conflictDirectory": ".conflicts",
216
+ "safeWrites": true
217
+ }
218
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luffysolution/omnischolar-pi",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Pi MCP bridge for the OmniScholar research toolkit",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -29,7 +29,14 @@
29
29
  "files": [
30
30
  "pi-extension/dist",
31
31
  "README.md",
32
- "LICENSE"
32
+ "README.zh-CN.md",
33
+ "LICENSE",
34
+ "PRIVACY.md",
35
+ "TERMS.md",
36
+ "THIRD_PARTY_NOTICES.md",
37
+ "omnischolar.config.example.json",
38
+ "docs",
39
+ "host-configs"
33
40
  ],
34
41
  "pi": {
35
42
  "extensions": [
@@ -1,7 +1,7 @@
1
1
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
2
  import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
3
3
  import { Type } from "typebox";
4
- const CLIENT_INFO = { name: "omnischolar-pi", version: "0.1.0" };
4
+ const CLIENT_INFO = { name: "omnischolar-pi", version: "0.1.2" };
5
5
  export function resultText(result) {
6
6
  return result.content
7
7
  .map((item) => {