papilot 0.8.0 → 0.8.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.
- package/README.de.md +110 -0
- package/README.es.md +110 -0
- package/README.fr.md +110 -0
- package/README.it.md +110 -0
- package/README.ja.md +110 -0
- package/README.ko.md +110 -0
- package/README.md +54 -121
- package/README.pt.md +110 -0
- package/README.sv.md +110 -0
- package/README.zh-CN.md +58 -117
- package/README.zh-Hant.md +110 -0
- package/bin/doctor.mjs +7 -5
- package/dist/assets/{_virtual_papilot-licenses-D7ro6ecN.js → _virtual_papilot-licenses-CMfCtEYQ.js} +1 -1
- package/dist/assets/index-oAIkxhfp.js +265 -0
- package/dist/assets/index-t_qCOF_B.css +1 -0
- package/dist/assets/{math-V9uUaUzA.js → math-CEU4m4-H.js} +1 -1
- package/dist/assets/{pdf-view-Bnb2uIBE.js → pdf-view-HWRGBLsZ.js} +1 -1
- package/dist/index.html +2 -2
- package/examples/papilot-paper/preview/main.pdf +0 -0
- package/examples/papilot-paper/preview/main.synctex.gz +0 -0
- package/package.json +18 -5
- package/src/server/acp.ts +44 -7
- package/src/server/agents.ts +5 -3
- package/src/server/app.ts +10 -3
- package/src/server/desktop-demo.ts +38 -0
- package/src/server/imports.ts +60 -21
- package/src/server/manuscript.ts +44 -8
- package/src/server/reconcile.ts +20 -0
- package/src/server/review.ts +3 -2
- package/src/server/start.ts +26 -4
- package/src/server/store.ts +0 -8
- package/src/server/update-install.ts +22 -2
- package/src/server/updates.ts +32 -12
- package/src/server/workspace.ts +78 -15
- package/src/shared.ts +20 -9
- package/src/skill-metadata.ts +1 -1
- package/vendor/latex-review/dist/web/assets/index-DVs7cTBl.js +19 -0
- package/vendor/latex-review/dist/web/assets/index-ysOpu05D.css +1 -0
- package/vendor/latex-review/dist/web/index.html +2 -2
- package/vendor/latex-review/src/core/build.ts +180 -97
- package/vendor/latex-review/src/core/current-commit.ts +104 -0
- package/vendor/latex-review/src/core/delivery.ts +62 -16
- package/vendor/latex-review/src/core/git.ts +135 -29
- package/vendor/latex-review/src/core/outline.ts +0 -9
- package/vendor/latex-review/src/core/publish.ts +7 -1
- package/vendor/latex-review/src/core/reconcile.ts +101 -0
- package/vendor/latex-review/src/core/review.ts +5 -2
- package/vendor/latex-review/src/core/store.ts +1 -0
- package/vendor/latex-review/src/core/tasks.ts +1 -1
- package/vendor/latex-review/src/locales.ts +47 -0
- package/vendor/latex-review/src/server.ts +12 -1
- package/vendor/latex-review/src/types.ts +5 -2
- package/vendor/latex-review/src/web/i18n.ts +9 -21
- package/vendor/latex-review/src/web/locales/de.json +250 -0
- package/vendor/latex-review/src/web/locales/es.json +250 -0
- package/vendor/latex-review/src/web/locales/fr.json +250 -0
- package/vendor/latex-review/src/web/locales/index.ts +16 -0
- package/vendor/latex-review/src/web/locales/it.json +250 -0
- package/vendor/latex-review/src/web/locales/ja.json +250 -0
- package/vendor/latex-review/src/web/locales/ko.json +250 -0
- package/vendor/latex-review/src/web/locales/pt.json +250 -0
- package/vendor/latex-review/src/web/locales/sv.json +250 -0
- package/vendor/latex-review/src/web/locales/zh-Hant.json +250 -0
- package/vendor/latex-review/src/web/references.tsx +1 -1
- package/vendor/latex-review/src/web/review.tsx +8 -6
- package/vendor/latex-review/src/web/style.css +1 -11
- package/vendor/latex-review/src/web/zh-CN.ts +4 -2
- package/dist/assets/index-Cc-awdNn.css +0 -1
- package/dist/assets/index-D_VX51no.js +0 -265
- package/vendor/latex-review/dist/web/assets/index-7VKAte5x.js +0 -19
- package/vendor/latex-review/dist/web/assets/index-DEz-LsGl.css +0 -1
package/README.zh-CN.md
CHANGED
|
@@ -1,169 +1,110 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
3
|
<h1>
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
<img src="docs/assets/logo.svg" width="48" height="48" align="absmiddle" alt="Papilot 标志">
|
|
7
|
-
</picture>
|
|
8
|
-
Papilot
|
|
4
|
+
<img src="docs/assets/wordmark.svg#gh-light-mode-only" width="280" height="88" alt="Papilot">
|
|
5
|
+
<img src="docs/assets/wordmark-dark.svg#gh-dark-mode-only" width="280" height="88" alt="Papilot">
|
|
9
6
|
</h1>
|
|
10
7
|
|
|
11
|
-
<p><b
|
|
8
|
+
<p><b>借助 AI 修订 LaTeX 论文,并在 PDF 上审阅修改。</b></p>
|
|
12
9
|
|
|
13
|
-
<p><a href="
|
|
10
|
+
<p><a href="https://papilot.ai">官网</a> · <a href="docs/guide.md">文档</a></p>
|
|
14
11
|
|
|
15
|
-
|
|
12
|
+
<p data-language-switcher><a href="README.md">English</a> · <a href="README.zh-CN.md">简体中文</a> · <a href="README.zh-Hant.md">繁體中文</a> · <a href="README.ja.md">日本語</a> · <a href="README.ko.md">한국어</a> · <a href="README.de.md">Deutsch</a> · <a href="README.fr.md">Français</a> · <a href="README.es.md">Español</a> · <a href="README.pt.md">Português</a> · <a href="README.it.md">Italiano</a> · <a href="README.sv.md">Svenska</a></p>
|
|
13
|
+
|
|
14
|
+
[](https://github.com/PapilotAI/papilot/actions/workflows/ci.yml)
|
|
16
15
|
[](https://www.npmjs.com/package/papilot)
|
|
17
16
|
[](LICENSE)
|
|
18
|
-
[](https://nodejs.org)
|
|
19
|
-
[](https://www.typescriptlang.org)
|
|
20
|
-
[](https://react.dev)
|
|
21
|
-
[](https://www.latex-project.org)
|
|
22
|
-
[](https://github.com/cu1ch3n/papilot/pulls)
|
|
23
|
-
|
|
24
|
-
**目录:** [功能](#-功能) · [快速开始](#-快速开始) · [智能体](#-智能体) · [文档](#-文档) · [社区](#-社区) · [友情链接](#-友情链接) · [许可证](#-许可证)
|
|
25
17
|
|
|
26
|
-
<img src="docs/assets/demo.gif" alt="Papilot:在 PDF
|
|
18
|
+
<p><img src="docs/assets/demo.gif" alt="Papilot:在 PDF 上标注段落,交给智能体处理,并审阅排版后的修改" width="100%"></p>
|
|
27
19
|
|
|
28
20
|
</div>
|
|
29
21
|
|
|
30
|
-
|
|
22
|
+
Papilot 是一个与 AI 智能体协作撰写和修订 LaTeX 论文的本地工作区。在 PDF 上标注段落和公式,让智能体在独立的源码副本上进行编辑,随后审阅排版后的修改并选择要保留的内容。
|
|
31
23
|
|
|
32
|
-
>
|
|
33
|
-
> **0.7 新功能**:全新设计的工作台、按颜色分组的批注、任务中附带文件和图片、技能库,以及接受的改动保存到哪里由你选择。详见[更新日志](CHANGELOG.md)。
|
|
24
|
+
<a id="features"></a>
|
|
34
25
|
|
|
35
|
-
##
|
|
26
|
+
## 功能特性
|
|
36
27
|
|
|
37
28
|
<table>
|
|
38
29
|
<tr>
|
|
39
30
|
<td width="50%" valign="top">
|
|
40
|
-
<img src="docs/assets/readme-note.
|
|
41
|
-
<h3
|
|
42
|
-
|
|
43
|
-
</td>
|
|
44
|
-
<td width="50%" valign="top">
|
|
45
|
-
<img src="docs/assets/readme-review.zh-CN.jpg" alt="排版页面上改动的修改前后对比,带接受、拒绝和评论按钮">
|
|
46
|
-
<h3>✅ 逐条点头</h3>
|
|
47
|
-
每处改动都以排版后的差异呈现,连同它在别处引起的变化,比如重新编号的公式和目录。接受、拒绝或评论,任何决定都能撤销。
|
|
48
|
-
</td>
|
|
49
|
-
</tr>
|
|
50
|
-
<tr>
|
|
51
|
-
<td width="50%" valign="top">
|
|
52
|
-
<img src="docs/assets/readme-deliver.zh-CN.jpg" alt="审阅结束后,带智能体写好的提交信息,以及「应用到工作目录」和「提交」按钮">
|
|
53
|
-
<h3>📦 改动去哪由你定</h3>
|
|
54
|
-
审阅结束前,接受的改动只保存在任务里。之后可以应用到工作目录,也可以提交到独立的 <code>papilot/…</code> 分支,提交信息由智能体来写。
|
|
31
|
+
<a href="docs/assets/readme-note.jpg"><img src="docs/assets/readme-note.jpg" alt="PDF 上按颜色分组的段落批注与框选的公式批注"></a>
|
|
32
|
+
<h3>在 PDF 上添加批注</h3>
|
|
33
|
+
选中句子或框选公式,说明需要修改的内容。按颜色将相关批注分组,即可对多个段落统一下达指令。
|
|
55
34
|
</td>
|
|
56
35
|
<td width="50%" valign="top">
|
|
57
|
-
<img src="docs/assets/readme-
|
|
58
|
-
<h3
|
|
59
|
-
|
|
36
|
+
<a href="docs/assets/readme-review.jpg"><img src="docs/assets/readme-review.jpg" alt="页面上的排版前后对比差异,带有接受、拒绝和评论按钮"></a>
|
|
37
|
+
<h3>审阅每处修改</h3>
|
|
38
|
+
对比修改前后的排版页面,包括公式重新编号等其他位置的变动。对每处编辑执行接受、拒绝或评论操作,并可在审阅过程中随时撤销决定。
|
|
60
39
|
</td>
|
|
61
40
|
</tr>
|
|
62
41
|
<tr>
|
|
63
42
|
<td width="50%" valign="top">
|
|
64
|
-
<img src="docs/assets/readme-
|
|
65
|
-
<h3
|
|
66
|
-
|
|
43
|
+
<a href="docs/assets/readme-deliver.jpg"><img src="docs/assets/readme-deliver.jpg" alt="将已接受的编辑应用到论文原稿"></a>
|
|
44
|
+
<h3>选择编辑的去向</h3>
|
|
45
|
+
每个新任务都在各自的论文副本上运行。审阅编辑后,选择 **提交到论文原稿** 将此任务保存为当前分支上的一次提交,或选择 **应用到工作区** 使编辑保持未提交状态。如果同一段落在此期间发生了变动,AI 会自动解决冲突,仅在预期内容不明确时向你询问。保存前可先审阅合并后的 PDF,准备就绪后即可从 Git 面板推送。
|
|
67
46
|
</td>
|
|
68
47
|
<td width="50%" valign="top">
|
|
69
|
-
<
|
|
70
|
-
<
|
|
71
|
-
|
|
72
|
-
<li>📎 任务和消息都能附带<b>文件和图片</b></li>
|
|
73
|
-
<li>🤖 <b>Codex、Claude、Cursor、Kimi Code、GLM、DeepSeek、Qwen Code、OpenCode 或 Antigravity</b>:电脑上装了哪个就用哪个,各用你自己的登录</li>
|
|
74
|
-
<li>🌳 <b>每个任务都有独立的 Git 工作树</b>,最多两个同时运行</li>
|
|
75
|
-
<li>🌗 <b>浅色与深色</b>,界面支持中文和英文</li>
|
|
76
|
-
<li>📱 <b>运行在你的电脑上</b>,也能用手机打开</li>
|
|
77
|
-
</ul>
|
|
48
|
+
<a href="docs/assets/readme-git.jpg"><img src="docs/assets/readme-git.jpg" alt="包含已暂存文件、生成的提交说明和提交图的 Git 面板"></a>
|
|
49
|
+
<h3>与 Git 配合使用</h3>
|
|
50
|
+
在工作区中暂存和提交文件、拉取及推送更改。智能体可以起草提交说明并协助解决合并冲突;提交图会显示每个任务的工作树。
|
|
78
51
|
</td>
|
|
79
52
|
</tr>
|
|
80
53
|
</table>
|
|
81
54
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
> [!NOTE]
|
|
85
|
-
> 需要 **Node.js 22.22+**、**Git** 和完整的 **TeX** 发行版([MacTeX](https://www.tug.org/mactex/) 或 [TeX Live](https://www.tug.org/texlive/))。修改论文还需要至少一个[已登录的智能体](#-智能体)。
|
|
86
|
-
|
|
87
|
-
```sh
|
|
88
|
-
npm install -g papilot
|
|
89
|
-
papilot demo
|
|
90
|
-
```
|
|
55
|
+
- **[技能](docs/guide.md#skills)与[附件](docs/guide.md#task-attachments):** 运行 `/` 技能来润色行文、校对文本或检查数学公式,在设置中定义自定义技能,并向任务和消息添加参考文件或图片附件。
|
|
56
|
+
- **阅读与工作区:** 通过 PDF 目录和全文搜索浏览论文原稿,支持浅色与深色主题以及英文或中文界面。
|
|
91
57
|
|
|
92
|
-
|
|
58
|
+
<a id="quick-start"></a>
|
|
93
59
|
|
|
94
|
-
##
|
|
60
|
+
## 快速开始
|
|
95
61
|
|
|
96
|
-
|
|
97
|
-
| --- | --- | --- |
|
|
98
|
-
| **Codex** | `papilot codex login` | 通过 Codex app server 在其工作区沙箱中运行;已装有 `codex` 就直接用,没有则在首次启动时自动安装。 |
|
|
99
|
-
| **Claude** | 安装 [Claude Code](https://code.claude.com) 并运行 `claude auth login`,或设置好 `ANTHROPIC_API_KEY` 再启动 `papilot` | 装了 Claude Code 时,用你自己的登录(Claude 订阅或密钥)运行 `claude -p`,在 Claude Code 的沙箱中工作;没装时通过 Claude Agent SDK 运行,需要 API 密钥。 |
|
|
100
|
-
| **Cursor** | 设置好 `CURSOR_API_KEY` 再启动 `papilot` | 通过 Cursor SDK 在 Cursor 的沙箱中运行,首次使用时下载;该 SDK 不使用 Cursor 应用或 CLI 的登录。 |
|
|
101
|
-
| **Kimi Code** | 安装 [Kimi Code CLI](https://www.kimi.com/code/docs/en/kimi-code-cli/guides/getting-started),运行 `kimi login` | 通过 `kimi acp` 使用本机配置,支持流式回复、会话恢复和工具审批。 |
|
|
102
|
-
| **GLM** | 设置好 `ZHIPU_API_KEY`(或 `ZAI_API_KEY`)再启动 `papilot` | 按智谱为 GLM Coding Plan 给出的方式,让 Claude Code 连接智谱的 Anthropic 兼容接口。 |
|
|
103
|
-
| **DeepSeek** | 安装 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(`npm install -g @deepseek-ai/dsh`)并在其中配置好模型 | 通过 `dsh acp` 在其工作区沙箱中运行;工作树以外的操作需要审批。 |
|
|
104
|
-
| **Qwen Code** | 安装 [Qwen Code](https://github.com/QwenLM/qwen-code),运行 `qwen` 登录 | 以自动编辑模式运行 `qwen --acp`:改文件直接进行,运行命令需要审批。 |
|
|
105
|
-
| **OpenCode** | 安装 [OpenCode](https://opencode.ai),用 `opencode auth login` 连接模型服务商 | 用你配置的服务商运行 `opencode acp`;运行命令和工作树以外的操作需要审批。 |
|
|
106
|
-
| **Antigravity** | 安装 Antigravity 并登录 `agy` | 运行 `agy -p`,每轮一个进程,只编辑文件;所在地区需要代理时设置 `PAPILOT_AGY_PROXY`。 |
|
|
62
|
+
有关 macOS 和 Linux 桌面应用及本地构建说明,请参阅 [Papilot Desktop](desktop/README.md)。桌面端 CI 会构建 Apple Silicon 和 Intel Mac 安装程序,以及 Linux x64 AppImage 和 deb 软件包。
|
|
107
63
|
|
|
108
|
-
Papilot
|
|
109
|
-
|
|
110
|
-
Papilot 从不保存你的凭据。CLI 智能体使用各自的登录;为 Claude、Cursor 或 GLM 设置的密钥只会交给对应的服务。已找到但没有登录的智能体会显示为不可用。
|
|
111
|
-
|
|
112
|
-
启动遇到问题?打开 **设置 → 运行环境**,在**智能体**中查看智能体配置,或在 **LaTeX** 中查看识别到的发行版、版本和位置,或运行 `papilot doctor` 检查环境并查看修复建议,用 `papilot doctor --repo /path/to/paper` 一并检查论文。加上 `--json` 可输出机器可读的报告。诊断不会安装软件、启动服务或修改论文。检查范围见[诊断指南](docs/guide.md#diagnostics)。
|
|
113
|
-
|
|
114
|
-
<details>
|
|
115
|
-
<summary><b>⚙️ 选项与远程访问</b></summary>
|
|
116
|
-
|
|
117
|
-
<br>
|
|
64
|
+
Papilot 需要 **Node.js 22.22+**、**Git**,以及包含 `latexmk` 和 `synctex` 的完整 **TeX** 发行版([MacTeX](https://www.tug.org/mactex/) 或 [TeX Live](https://www.tug.org/texlive/))。修订论文还需要至少配置一个[智能体](#agents)。
|
|
118
65
|
|
|
119
66
|
```sh
|
|
120
|
-
|
|
121
|
-
papilot
|
|
122
|
-
papilot service install # macOS:登录后自动启动,退出后自动重启
|
|
123
|
-
npm uninstall -g papilot # 卸载;状态仍保留在 ~/.papilot,可自行删除
|
|
67
|
+
npm install -g papilot
|
|
68
|
+
papilot demo
|
|
124
69
|
```
|
|
125
70
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
Papilot 只监听 `127.0.0.1`。若要从其他设备访问,用 Tailscale Serve 把它发布到你的 tailnet,并设置 `PAPILOT_PUBLIC_ORIGIN` 和 `PAPILOT_TAILSCALE_LOGIN`;Papilot 会校验每个请求的主机、浏览器来源和 Tailscale 身份。具体步骤见[指南](docs/guide.md#remote-access-with-tailscale)。
|
|
71
|
+
打开 [http://127.0.0.1:7274](http://127.0.0.1:7274),在侧边栏中选择 **论文原稿**,即可浏览内置的示例论文。
|
|
129
72
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
</details>
|
|
133
|
-
|
|
134
|
-
<details>
|
|
135
|
-
<summary><b>🛠️ 参与开发</b></summary>
|
|
136
|
-
|
|
137
|
-
<br>
|
|
138
|
-
|
|
139
|
-
```sh
|
|
140
|
-
git clone https://github.com/cu1ch3n/papilot && cd papilot
|
|
141
|
-
npm ci && npm run setup:review
|
|
142
|
-
npm run build && npm start
|
|
143
|
-
```
|
|
73
|
+
若要处理你自己的论文原稿,请运行 `papilot` 并选择 **添加论文…** 以打开本地 LaTeX 文件夹或 ZIP 压缩包。Papilot 会查找主 `.tex` 文件,在需要时准备 Git 历史记录,并尝试编译。如果主文件不明确或构建失败,导入对话框会协助你选择文件或修复问题。
|
|
144
74
|
|
|
145
|
-
|
|
75
|
+
可在 **设置 → 运行环境** 下的 **智能体** 或 **LaTeX** 中检查配置。运行 `papilot doctor` 进行环境检查,或运行 `papilot doctor --repo /path/to/paper` 一并检查论文原稿([诊断说明](docs/guide.md#diagnostics))。
|
|
146
76
|
|
|
147
|
-
|
|
77
|
+
<a id="agents"></a>
|
|
148
78
|
|
|
149
|
-
##
|
|
79
|
+
## 智能体
|
|
150
80
|
|
|
151
|
-
|
|
81
|
+
<!-- BEGIN AGENT ICONS -->
|
|
82
|
+
<p align="center">
|
|
83
|
+
<a href="docs/guide.md#agents">
|
|
84
|
+
<picture>
|
|
85
|
+
<source media="(prefers-color-scheme: dark) and (max-width: 600px)" srcset="docs/assets/readme-agents/compact-dark.svg">
|
|
86
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/readme-agents/desktop-dark.svg">
|
|
87
|
+
<source media="(max-width: 600px)" srcset="docs/assets/readme-agents/compact.svg">
|
|
88
|
+
<img src="docs/assets/readme-agents/desktop.svg" alt="Codex, Claude, Cursor, Copilot, Grok, Antigravity, Kimi, GLM, DeepSeek, Qwen, OpenCode" width="816">
|
|
89
|
+
</picture>
|
|
90
|
+
</a>
|
|
91
|
+
</p>
|
|
92
|
+
<!-- END AGENT ICONS -->
|
|
152
93
|
|
|
153
|
-
|
|
94
|
+
你可以为每个任务选择智能体和模型。根据集成方式的不同,Papilot 会使用智能体的本地 CLI 登录状态或你提供的服务商 API 凭据来运行智能体,且不会存储你的密钥。
|
|
154
95
|
|
|
155
|
-
|
|
156
|
-
- 🐛 **遇到问题**:[提交 issue](https://github.com/cu1ch3n/papilot/issues/new/choose)
|
|
157
|
-
- 🤝 **想参与**:从 [good first issue](https://github.com/cu1ch3n/papilot/labels/good%20first%20issue) 开始,并阅读 [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
96
|
+
打开 **设置 → 运行环境 → 智能体** 查看状态、模型和配置说明(例如 `papilot codex login`)。如果在 Papilot 运行期间安装或登录了智能体,请点击 **重新连接**;如果修改了环境变量,请重启 `papilot`。有关各智能体的要求与功能,请参阅[智能体指南](docs/guide.md#agents)。
|
|
158
97
|
|
|
159
|
-
|
|
98
|
+
<a id="documentation-and-community"></a>
|
|
160
99
|
|
|
161
|
-
|
|
100
|
+
## 文档与社区
|
|
162
101
|
|
|
163
|
-
|
|
102
|
+
- **文档:** 阅读[用户指南](docs/guide.md),了解工作区流程、配置、[应用内更新](docs/guide.md#updates)、[通过 Tailscale 远程访问](docs/guide.md#remote-access-with-tailscale)以及[面向协作者的通行密钥共享](docs/guide.md#collaborators)。
|
|
103
|
+
- **设计与历史:** 浏览 [`examples/papilot-paper`](examples/papilot-paper) 查看正式的设计论文与证明,并查阅[更新日志](CHANGELOG.md)了解版本说明。
|
|
104
|
+
- **社区与支持:** 在 [Discussions](https://github.com/PapilotAI/papilot/discussions) 中提问,在 [Issues](https://github.com/PapilotAI/papilot/issues) 中报告问题,或阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 参与贡献。
|
|
164
105
|
|
|
165
|
-
|
|
106
|
+
---
|
|
166
107
|
|
|
167
|
-
|
|
108
|
+
[MIT](LICENSE) © 2026 PapilotAI
|
|
168
109
|
|
|
169
|
-
[
|
|
110
|
+
友情链接:[LINUX DO](https://linux.do/)。
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<h1>
|
|
4
|
+
<img src="docs/assets/wordmark.svg#gh-light-mode-only" width="280" height="88" alt="Papilot">
|
|
5
|
+
<img src="docs/assets/wordmark-dark.svg#gh-dark-mode-only" width="280" height="88" alt="Papilot">
|
|
6
|
+
</h1>
|
|
7
|
+
|
|
8
|
+
<p><b>使用 AI 修訂 LaTeX 論文,並在 PDF 上審閱變更。</b></p>
|
|
9
|
+
|
|
10
|
+
<p><a href="https://papilot.ai">網站</a> · <a href="docs/guide.md">說明文件</a></p>
|
|
11
|
+
|
|
12
|
+
<p data-language-switcher><a href="README.md">English</a> · <a href="README.zh-CN.md">简体中文</a> · <a href="README.zh-Hant.md">繁體中文</a> · <a href="README.ja.md">日本語</a> · <a href="README.ko.md">한국어</a> · <a href="README.de.md">Deutsch</a> · <a href="README.fr.md">Français</a> · <a href="README.es.md">Español</a> · <a href="README.pt.md">Português</a> · <a href="README.it.md">Italiano</a> · <a href="README.sv.md">Svenska</a></p>
|
|
13
|
+
|
|
14
|
+
[](https://github.com/PapilotAI/papilot/actions/workflows/ci.yml)
|
|
15
|
+
[](https://www.npmjs.com/package/papilot)
|
|
16
|
+
[](LICENSE)
|
|
17
|
+
|
|
18
|
+
<p><img src="docs/assets/demo.gif" alt="Papilot:在 PDF 上標記段落、交由智慧代理處理,並審閱排版後的變更" width="100%"></p>
|
|
19
|
+
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
Papilot 是用於與 AI 智慧代理共同撰寫及修訂 LaTeX 論文的本機工作區。在 PDF 上標記段落與公式,讓智慧代理編輯獨立的原始碼副本,接著審閱排版後的變更並選擇要保留的修改。
|
|
23
|
+
|
|
24
|
+
<a id="features"></a>
|
|
25
|
+
|
|
26
|
+
## 功能特色
|
|
27
|
+
|
|
28
|
+
<table>
|
|
29
|
+
<tr>
|
|
30
|
+
<td width="50%" valign="top">
|
|
31
|
+
<a href="docs/assets/readme-note.jpg"><img src="docs/assets/readme-note.jpg" alt="PDF 上依顏色分組的段落註解與框選的公式註解"></a>
|
|
32
|
+
<h3>在 PDF 上加上註解</h3>
|
|
33
|
+
選取句子或框選公式,並說明需要修改的內容。依顏色將相關註解分組,即可對多個段落同時下達同一條指令。
|
|
34
|
+
</td>
|
|
35
|
+
<td width="50%" valign="top">
|
|
36
|
+
<a href="docs/assets/readme-review.jpg"><img src="docs/assets/readme-review.jpg" alt="頁面上的排版前後差異對比,附有接受、拒絕與評論按鈕"></a>
|
|
37
|
+
<h3>審閱每一項變更</h3>
|
|
38
|
+
對比修改前後的排版頁面,包含公式重新編號等其他位置的連帶變更。您可以接受、拒絕或評論每一處修改,並在審閱過程中隨時復原決定。
|
|
39
|
+
</td>
|
|
40
|
+
</tr>
|
|
41
|
+
<tr>
|
|
42
|
+
<td width="50%" valign="top">
|
|
43
|
+
<a href="docs/assets/readme-deliver.jpg"><img src="docs/assets/readme-deliver.jpg" alt="將已接受的修改套用至論文原稿"></a>
|
|
44
|
+
<h3>選擇修改的套用位置</h3>
|
|
45
|
+
每項新任務都會在獨立的論文副本上運作。審閱修改後,選擇 **提交至論文原稿** 將此任務儲存為目前分支上的一次提交,或選擇 **套用至工作區** 保留修改而不提交。若同一段落在這段期間也發生了變更,AI 會自動解決衝突,僅在目標內容不明確時向您詢問。儲存前可先審閱合併後的 PDF,準備就緒後即可從 Git 面板推送。
|
|
46
|
+
</td>
|
|
47
|
+
<td width="50%" valign="top">
|
|
48
|
+
<a href="docs/assets/readme-git.jpg"><img src="docs/assets/readme-git.jpg" alt="顯示已暫存檔案、自動產生的提交訊息與提交圖表的 Git 面板"></a>
|
|
49
|
+
<h3>搭配 Git 使用</h3>
|
|
50
|
+
在工作區中暫存並提交檔案、拉取及推送變更。智慧代理可協助起草提交訊息並解決合併衝突;提交圖表則會顯示每項任務的工作樹。
|
|
51
|
+
</td>
|
|
52
|
+
</tr>
|
|
53
|
+
</table>
|
|
54
|
+
|
|
55
|
+
- **[技能](docs/guide.md#skills)與[附件](docs/guide.md#task-attachments):** 執行 `/` 技能以潤飾文句、校對或檢查數學公式,在「設定」中定義自訂技能,並將參考檔案或圖片附加至任務與訊息中。
|
|
56
|
+
- **閱讀與工作區:** 透過 PDF 目錄與全文搜尋瀏覽論文原稿,支援淺色與深色主題,以及英文或中文介面。
|
|
57
|
+
|
|
58
|
+
<a id="quick-start"></a>
|
|
59
|
+
|
|
60
|
+
## 快速開始
|
|
61
|
+
|
|
62
|
+
如需 macOS 與 Linux 桌面版應用程式以及本機建置說明,請參閱 [Papilot Desktop](desktop/README.md)。桌面版 CI 會建置 Apple Silicon 與 Intel Mac 安裝程式,以及 Linux x64 AppImage 與 deb 套件。
|
|
63
|
+
|
|
64
|
+
Papilot 需要 **Node.js 22.22+**、**Git**,以及包含 `latexmk` 與 `synctex` 的完整 **TeX** 發行版([MacTeX](https://www.tug.org/mactex/) 或 [TeX Live](https://www.tug.org/texlive/))。修訂論文還需要至少設定一個[智慧代理](#agents)。
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
npm install -g papilot
|
|
68
|
+
papilot demo
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
開啟 [http://127.0.0.1:7274](http://127.0.0.1:7274) 並在側邊欄選取 **論文原稿**,即可瀏覽內建的範例論文。
|
|
72
|
+
|
|
73
|
+
若要處理您自己的論文原稿,請執行 `papilot` 並選擇 **新增論文…** 以開啟本機 LaTeX 資料夾或 ZIP 壓縮檔。Papilot 會尋找主要的 `.tex` 檔案、在需要時準備 Git 歷史紀錄,並嘗試編譯。若主檔案不明確或建置失敗,匯入對話框會協助您選擇檔案或修正問題。
|
|
74
|
+
|
|
75
|
+
可在 **設定 → 執行環境** 下的 **智慧代理** 或 **LaTeX** 中檢查您的環境設定。執行 `papilot doctor` 可進行環境檢查,或執行 `papilot doctor --repo /path/to/paper` 一併檢查論文原稿([診斷說明](docs/guide.md#diagnostics))。
|
|
76
|
+
|
|
77
|
+
<a id="agents"></a>
|
|
78
|
+
|
|
79
|
+
## 智慧代理
|
|
80
|
+
|
|
81
|
+
<!-- BEGIN AGENT ICONS -->
|
|
82
|
+
<p align="center">
|
|
83
|
+
<a href="docs/guide.md#agents">
|
|
84
|
+
<picture>
|
|
85
|
+
<source media="(prefers-color-scheme: dark) and (max-width: 600px)" srcset="docs/assets/readme-agents/compact-dark.svg">
|
|
86
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/readme-agents/desktop-dark.svg">
|
|
87
|
+
<source media="(max-width: 600px)" srcset="docs/assets/readme-agents/compact.svg">
|
|
88
|
+
<img src="docs/assets/readme-agents/desktop.svg" alt="Codex, Claude, Cursor, Copilot, Grok, Antigravity, Kimi, GLM, DeepSeek, Qwen, OpenCode" width="816">
|
|
89
|
+
</picture>
|
|
90
|
+
</a>
|
|
91
|
+
</p>
|
|
92
|
+
<!-- END AGENT ICONS -->
|
|
93
|
+
|
|
94
|
+
您可以為每項任務選擇智慧代理與模型。根據整合方式的不同,Papilot 會使用智慧代理的本機 CLI 登入狀態或您提供的服務商 API 憑證來執行智慧代理,且不會儲存您的金鑰。
|
|
95
|
+
|
|
96
|
+
開啟 **設定 → 執行環境 → 智慧代理** 以查看狀態、可用模型與設定說明(例如 `papilot codex login`)。若在 Papilot 執行期間安裝或登入智慧代理,請點擊 **重新連線**;若變更了環境變數,請重新啟動 `papilot`。各智慧代理的系統需求與功能請參閱[智慧代理指南](docs/guide.md#agents)。
|
|
97
|
+
|
|
98
|
+
<a id="documentation-and-community"></a>
|
|
99
|
+
|
|
100
|
+
## 說明文件與社群
|
|
101
|
+
|
|
102
|
+
- **說明文件:** 閱讀[使用者指南](docs/guide.md),了解工作區工作流程、環境設定、[應用程式內更新](docs/guide.md#updates)、[透過 Tailscale 遠端存取](docs/guide.md#remote-access-with-tailscale),以及[與協作者分享通行金鑰](docs/guide.md#collaborators)。
|
|
103
|
+
- **設計與歷史紀錄:** 瀏覽 [`examples/papilot-paper`](examples/papilot-paper) 以查閱正式設計論文與證明,並查看[更新日誌](CHANGELOG.md)了解版本發行說明。
|
|
104
|
+
- **社群與支援:** 在 [Discussions](https://github.com/PapilotAI/papilot/discussions) 中提問、在 [Issues](https://github.com/PapilotAI/papilot/issues) 中回報錯誤,或閱讀 [CONTRIBUTING.md](CONTRIBUTING.md) 了解如何參與貢獻。
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
[MIT](LICENSE) © 2026 PapilotAI
|
|
109
|
+
|
|
110
|
+
友情連結:[LINUX DO](https://linux.do/)。
|
package/bin/doctor.mjs
CHANGED
|
@@ -38,7 +38,7 @@ function executable(command, env = process.env) {
|
|
|
38
38
|
function agentExecutable(command) {
|
|
39
39
|
if (command.includes('/') || command.includes('\\')) return executable(command);
|
|
40
40
|
const home = process.env.HOME || os.homedir();
|
|
41
|
-
const dirs = ['.local/bin', '.claude/local', '.kimi-code/bin', '.opencode/bin', '.bun/bin', '.npm-global/bin'].map(dir => path.join(home, dir)).concat('/opt/homebrew/bin', '/usr/local/bin');
|
|
41
|
+
const dirs = ['.local/bin', '.claude/local', '.kimi-code/bin', '.grok/bin', '.opencode/bin', '.bun/bin', '.npm-global/bin'].map(dir => path.join(home, dir)).concat('/opt/homebrew/bin', '/usr/local/bin');
|
|
42
42
|
return executable(command) || executable(command, { PATH: dirs.join(path.delimiter) });
|
|
43
43
|
}
|
|
44
44
|
function command(file, args, options = {}) {
|
|
@@ -178,15 +178,17 @@ export async function doctor(args) {
|
|
|
178
178
|
return process.env[variable] ? `${variable} does not resolve to a runnable executable in Papilot's environment.`
|
|
179
179
|
: `${command} was not found on the PATH or in the standard agent folders available to Papilot. It may be installed for a different user or shell.`;
|
|
180
180
|
}
|
|
181
|
-
async function acpCheck(id, name, bin, help, install, update) {
|
|
181
|
+
async function acpCheck(id, name, bin, help, install, update, supported = /\bACP\b|Agent Client Protocol/i) {
|
|
182
182
|
const file = agentExecutable(process.env[bin.env] || bin.name);
|
|
183
183
|
if (!file) { check(`agent.${id}`, false, 'info', missingAgent(bin.name, bin.env), `${install}. If already installed, correct ${bin.env} or the server PATH, then restart Papilot.`); return false; }
|
|
184
184
|
const result = await command(file, help);
|
|
185
|
-
const ready = result.ok &&
|
|
185
|
+
const ready = result.ok && supported.test(result.stdout + '\n' + result.stderr);
|
|
186
186
|
check(`agent.${id}`, ready, 'warn', `${file}: ${ready ? 'ACP command available; login and generation were not tested' : result.reason || 'ACP command unavailable'}.`, `${update} Set ${bin.env} if needed.`);
|
|
187
187
|
return ready;
|
|
188
188
|
}
|
|
189
189
|
const kimiCheck = () => acpCheck('kimi', 'Kimi CLI', { env: 'PAPILOT_KIMI_BIN', name: 'kimi' }, ['acp', '--help'], 'Install Kimi Code CLI and run kimi login', 'Update Kimi Code CLI and run kimi login.');
|
|
190
|
+
const copilotCheck = () => acpCheck('copilot', 'GitHub Copilot CLI', { env: 'PAPILOT_COPILOT_BIN', name: 'copilot' }, ['--help'], 'Install GitHub Copilot CLI with npm install -g @github/copilot and run copilot login', 'Update GitHub Copilot CLI and run copilot login.');
|
|
191
|
+
const grokCheck = () => acpCheck('grok', 'Grok Build CLI', { env: 'PAPILOT_GROK_BIN', name: 'grok' }, ['--no-auto-update', 'agent', '--no-leader', 'stdio', '--help'], 'Install Grok Build CLI from https://x.ai/cli and run grok login or configure XAI_API_KEY', 'Update Grok Build CLI and run grok login or configure XAI_API_KEY.', /Usage:\s+grok agent stdio\b/i);
|
|
190
192
|
const qwenCheck = () => acpCheck('qwen', 'Qwen Code', { env: 'PAPILOT_QWEN_BIN', name: 'qwen' }, ['--help'], 'Install Qwen Code and sign in by running qwen once', 'Update Qwen Code and sign in by running qwen once.');
|
|
191
193
|
const deepseekCheck = () => acpCheck('deepseek', 'DeepSeek Harness (dsh)', { env: 'PAPILOT_DSH_BIN', name: 'dsh' }, ['acp', '--help'], 'Install DeepSeek Harness with npm install -g @deepseek-ai/dsh and set up a model in dsh', 'Update DeepSeek Harness and set up a model in dsh.');
|
|
192
194
|
const opencodeCheck = () => acpCheck('opencode', 'OpenCode', { env: 'PAPILOT_OPENCODE_BIN', name: 'opencode' }, ['acp', '--help'], 'Install OpenCode and connect a provider with opencode auth login', 'Update OpenCode and connect a provider with opencode auth login.');
|
|
@@ -203,7 +205,7 @@ export async function doctor(args) {
|
|
|
203
205
|
check('agent.glm', Boolean(configured && sdk), configured ? 'warn' : 'info', !configured ? 'ZHIPU_API_KEY or ZAI_API_KEY is not set, so Papilot does not offer GLM.' : sdk ? `GLM key configured for ${process.env.ZHIPU_API_KEY ? 'open.bigmodel.cn' : 'api.z.ai'} (not validated).` : 'GLM key configured; the Claude Agent SDK that runs GLM is installed on first use.', !configured ? 'Start Papilot with ZHIPU_API_KEY (open.bigmodel.cn) or ZAI_API_KEY (api.z.ai) set to your GLM Coding Plan or API key.' : 'Start papilot and choose GLM once to install the Claude Agent SDK.');
|
|
204
206
|
return configured;
|
|
205
207
|
}
|
|
206
|
-
const agents = await Promise.all([codexCheck(), claudeCheck(), cursorCheck(), agyCheck(), kimiCheck(), glmCheck(), deepseekCheck(), qwenCheck(), opencodeCheck()]);
|
|
208
|
+
const agents = await Promise.all([codexCheck(), claudeCheck(), cursorCheck(), copilotCheck(), grokCheck(), agyCheck(), kimiCheck(), glmCheck(), deepseekCheck(), qwenCheck(), opencodeCheck()]);
|
|
207
209
|
check('agents', agents.some(Boolean), 'warn', agents.some(Boolean) ? 'At least one agent passed its configuration check; live editing was not tested.' : 'No agent passed its configuration check. PDF reading can still be used with a working TeX installation.', 'Configure one agent before starting editing tasks.');
|
|
208
210
|
|
|
209
211
|
if (repo) {
|
|
@@ -279,7 +281,7 @@ export async function doctor(args) {
|
|
|
279
281
|
}
|
|
280
282
|
}
|
|
281
283
|
// Keep reports stable even though independent probes finish in any order.
|
|
282
|
-
const order = ['node', 'dependencies', 'frontend', 'review-engine', 'data', 'git', 'latexmk', 'synctex', 'tex-engines', 'agent.codex', 'agent.claude', 'agent.cursor', 'agent.antigravity', 'agent.kimi', 'agent.glm', 'agent.deepseek', 'agent.qwen', 'agent.opencode', 'agents', 'project', 'project.git', 'project.head', 'project.main', 'project.engine', 'project.worktrees', 'remote', 'server', 'service', 'service.tools', 'service.data'];
|
|
284
|
+
const order = ['node', 'dependencies', 'frontend', 'review-engine', 'data', 'git', 'latexmk', 'synctex', 'tex-engines', 'agent.codex', 'agent.claude', 'agent.cursor', 'agent.copilot', 'agent.grok', 'agent.antigravity', 'agent.kimi', 'agent.glm', 'agent.deepseek', 'agent.qwen', 'agent.opencode', 'agents', 'project', 'project.git', 'project.head', 'project.main', 'project.engine', 'project.worktrees', 'remote', 'server', 'service', 'service.tools', 'service.data'];
|
|
283
285
|
checks.sort((a, b) => order.indexOf(a.id) - order.indexOf(b.id));
|
|
284
286
|
const report = { name: 'Papilot', version: pkg.version, ok: !checks.some(item => !item.ok && item.severity === 'error'), checks };
|
|
285
287
|
if (json) console.log(JSON.stringify(report, null, 2));
|
package/dist/assets/{_virtual_papilot-licenses-D7ro6ecN.js → _virtual_papilot-licenses-CMfCtEYQ.js}
RENAMED
|
@@ -2398,7 +2398,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
2398
2398
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
2399
2399
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
2400
2400
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
2401
|
-
SOFTWARE.`},{name:`Icon sources`,text:`Agent icons: @lobehub/icons-static-svg 1.101.0 (MIT), https://github.com/lobehub/lobe-icons. GLM uses the ChatGLM mark.
|
|
2401
|
+
SOFTWARE.`},{name:`Icon sources`,text:`Agent icons: @lobehub/icons-static-svg 1.101.0 (MIT), https://github.com/lobehub/lobe-icons. GLM uses the ChatGLM mark; Copilot uses the GithubCopilot mark; Grok uses the Grok mark.
|
|
2402
2402
|
Git and LaTeX icons: simple-icons 16.36.0 (CC0-1.0), https://github.com/simple-icons/simple-icons.
|
|
2403
2403
|
Unmodified SVG artwork; rendered locally with CSS masks. Brand marks belong to their respective owners.`}]},{name:`longest-streak`,version:`3.1.0`,license:`MIT`,url:`https://www.npmjs.com/package/longest-streak/v/3.1.0`,notices:[{name:`license`,text:`(The MIT License)
|
|
2404
2404
|
|