{"_id":"@arsonist-g/incipit","name":"@arsonist-g/incipit","dist-tags":{"latest":"0.1.21"},"versions":{"0.1.21":{"name":"@arsonist-g/incipit","version":"0.1.21","description":"A frontend rework of the official Claude Code VS Code extension — surface redrawn, engine untouched.","publishConfig":{"access":"public"},"bin":{"incipit":"bin/cli.js"},"main":"src/install.js","scripts":{"start":"node bin/cli.js","apply":"node bin/cli.js apply","restore":"node bin/cli.js restore","test":"node scripts/tokenize-theme-colors.js --check && node tests/theme-colors-oracle.test.js && node tests/theme-token-contracts.test.js && node tests/theme-runtime-palettes.test.js && node tests/markdown-code-component-contracts.test.js && node tests/patch-contracts.test.js && node tests/apply-warnings.test.js && node tests/config-theme-icon.test.js && node tests/file-dialog.test.js && node tests/custom-icon.test.js && node tests/backup-custom-icons.test.js && node tests/install-custom-icons.test.js && node tests/markdown-preprocess.test.js && node tests/markdown-hook-boot.test.js && node tests/cache-history-buckets.test.js && node tests/session-identity.test.js && node tests/rerun-handoff.test.js && node tests/file-reveal.test.js && node tests/change-review.test.js && node tests/editor-overlay-insiders.test.js && node tests/host-detect-manual-add.test.js && node tests/deep-scan.test.js && node tests/deep-scan-results-screen.test.js && node tests/deferred-next.test.js && node tests/cjk-literary-no-faux-bold.test.js && node tests/mermaid-render.test.js && node tests/notes.test.js","test:contracts":"node tests/patch-contracts.test.js","test:markdown-code-component":"node tests/markdown-code-component-contracts.test.js","test:config":"node tests/config-theme-icon.test.js","test:file-dialog":"node tests/file-dialog.test.js","test:custom-icon":"node tests/custom-icon.test.js","test:backup-icons":"node tests/backup-custom-icons.test.js","test:install-icons":"node tests/install-custom-icons.test.js","test:theme-colors":"node tests/theme-colors-oracle.test.js","test:theme-tokens":"node scripts/tokenize-theme-colors.js --check && node tests/theme-token-contracts.test.js","test:theme-runtime":"node tests/theme-runtime-palettes.test.js","test:markdown-preprocess":"node tests/markdown-preprocess.test.js && node tests/markdown-hook-boot.test.js","test:cache-history":"node tests/cache-history-buckets.test.js","test:session-identity":"node tests/session-identity.test.js","test:rerun-handoff":"node tests/rerun-handoff.test.js","test:file-reveal":"node tests/file-reveal.test.js","test:change-review":"node tests/change-review.test.js","test:overlay-insiders":"node tests/editor-overlay-insiders.test.js","test:host-detect":"node tests/host-detect-manual-add.test.js","test:deep-scan":"node tests/deep-scan.test.js","test:deep-scan-screen":"node tests/deep-scan-results-screen.test.js","test:mermaid":"node tests/mermaid-render.test.js","test:deferred-next":"node tests/deferred-next.test.js","test:cjk-literary":"node tests/cjk-literary-no-faux-bold.test.js","test:notes":"node tests/notes.test.js"},"engines":{"node":">=16"},"os":["win32","darwin","linux"],"keywords":["incipit","claude-code","claude","anthropic","vscode","vscode-extension","latex","katex","cjk","typography","markdown","serif","render"],"repository":{"type":"git","url":"git+https://github.com/arsonist-g/incipit.git"},"bugs":{"url":"https://github.com/arsonist-g/incipit/issues"},"homepage":"https://github.com/arsonist-g/incipit#readme","author":"","license":"AGPL-3.0-or-later","_id":"@arsonist-g/incipit@0.1.21","gitHead":"9c57caf3c9419c679063a0a78e566b99801e2c4b","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-5OpYaw1BU3PBBOOK6Zt4DlYcjnaF5/LXI3yEM7xHFG8dOeadfJugjTHlmHtHtvR2e/UWdRg40NJktXOeKuTRYw==","shasum":"7117c4eea9676952d1d23828c5925c3d5e4767cb","tarball":"https://registry.npmjs.org/@arsonist-g/incipit/-/incipit-0.1.21.tgz","fileCount":134,"unpackedSize":20244531,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC9hEUBoCuNypclQ83xcvHZjkxzhnDf30/ReT1cGBgJdgIhANh7SZI8lDy+pznJzdV8IIWYE5sg1Z9d9o5OXzkUMm2m"}]},"_npmUser":{"name":"arsonist-g","email":"arsonist_g@proton.me"},"directories":{},"maintainers":[{"name":"arsonist-g","email":"arsonist_g@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/incipit_0.1.21_1787648320517_0.7913236570591959"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-25T08:58:40.365Z","0.1.21":"2026-08-25T08:58:40.804Z","modified":"2026-08-25T08:58:41.039Z"},"maintainers":[{"name":"arsonist-g","email":"arsonist_g@proton.me"}],"description":"A frontend rework of the official Claude Code VS Code extension — surface redrawn, engine untouched.","homepage":"https://github.com/arsonist-g/incipit#readme","keywords":["incipit","claude-code","claude","anthropic","vscode","vscode-extension","latex","katex","cjk","typography","markdown","serif","render"],"repository":{"type":"git","url":"git+https://github.com/arsonist-g/incipit.git"},"bugs":{"url":"https://github.com/arsonist-g/incipit/issues"},"license":"AGPL-3.0-or-later","readme":"# incipit\n\n*A frontend rework of the official Claude Code VS Code extension — surface redrawn, engine untouched.*\n\n---\n\n> [!NOTE]\n> 本仓库是 [yc-duan/incipit](https://github.com/yc-duan/incipit)（AGPL-3.0）的二次开发仓库。上游已较少维护，修复与新功能会先落在本仓库。本仓库相对上游的改动见[二开改动](#二开改动)。\n\n---\n\nincipit 把 Claude Code 在 VS Code 里的整套前端——正文排版、数学渲染、tool call 折叠、diff、本地历史的编辑、上下文与项目活动视图——按文学风格重新设计，工程信息也归并到统一的视觉语言。没有更改，侵入任何模型请求、鉴权、tool schema、CLI spawn 协议；装它前后，服务端那一侧看到的字节完全相同。\n\n跑一次，重载 VS Code 即可，不需要额外依赖。每次 Claude Code 升级覆盖前端文件后，重跑一次。incipit 会按目标/版本保留一个轻量官方恢复点，随时可以把已打补丁的扩展恢复回官方 Claude Code。\n\n---\n\n## 它是补丁，不是独立扩展\n\nincipit 修改的是 Claude Code 官方扩展在你磁盘上的文件，本身不是 VS Code 插件，也不替代官方扩展。Claude 订阅、API key、登录态、MCP 配置、tool schema、权限设置——一切官方逻辑——都跟没装它的时候一样。\n\n撤掉它，扩展立刻回到出厂状态。\n\n---\n\n## 安装\n\n需要 Node.js 16 或更新版本。\n\n```bash\nnpm install -g @arsonist-g/incipit@latest\n```\n\n本仓库以 scope 包 `@arsonist-g/incipit` 发布到 npm；npm 上不带 scope 的 `incipit` 包属于上游项目。安装后的 CLI 命令仍然是 `incipit`。\n\n`@arsonist-g/incipit` 是终端 CLI，必须全局安装。`npm install @arsonist-g/incipit`（不带 `-g`）是 npm 装本地依赖的写法，会把包丢进当前目录的 `node_modules/`，既不会注册到系统 PATH，也跑不到正确版本。\n\n装好后直接运行：\n\n```bash\nincipit\n```\n\n首次启动会 CLI 语言选择，之后进入交互菜单：\n\n<p align=\"center\">\n  <img src=\"docs/screenshots/cli-menu-zh.png\" width=\"420\" alt=\"incipit CLI 主菜单：应用补丁 / 恢复官方 Claude Code / 配置 / 管理目标位置 / CLI 界面语言\" />\n  <img src=\"docs/screenshots/cli-configure-zh.png\" width=\"420\" alt=\"incipit 配置子菜单：数学公式渲染、会话用量、正文字号、主题色\" />\n</p>\n\n菜单操作：\n\n- **Apply / Restore**：应用补丁，或把选中的 Claude Code 目标恢复为官方文件。每个目标/版本第一次干净 apply 时只记录一个官方恢复点，后续 apply 复用它；恢复时不会动你其他的 VS Code 配置。\n- **Configure**：开关数学公式渲染、会话用量徽章；切换正文字号（12 / 13 / 14 / 15 / 16，默认 13）和主题（暖黑 / 墨黑 / 暖白）；把 Claude 应用图标换成你自己的 SVG 或透明背景 PNG。\n- **Manage Claude Code targets**：自动探测 VS Code / Cursor / Insiders / VSCodium / Windsurf / Antigravity，也支持手动指定扩展目录。\n- **CLI language**：随时切换中英文。\n\n跳过菜单直接执行：\n\n```bash\nincipit apply     # 直接应用\nincipit restore   # 把当前目标恢复为官方 Claude Code 文件\n```\n\nClaude Code 扩展每次更新后，本地补丁会被官方文件覆盖，重跑 `incipit` 并应用即可。更新 incipit 自身用同一条全局安装命令。\n\n卸载 incipit CLI：\n\n```bash\nnpm uninstall -g @arsonist-g/incipit\n```\n\n仅移除 `incipit` cli 本身，不会自动还原已应用到 Claude Code 扩展里的补丁，也不会删除 `~/.incipit/`。如果要回滚补丁，请先运行 `incipit restore`。\n\n---\n\n## 界面\n\n文学风格界面——暖黑底色，米色调衬线字体，色域窄到只剩同色相的明度阶差，陶土红只在链接、强调和底部状态行克制地点出。\n\n三套主题并存：默认的暖黑、浅色的暖白，以及墨黑——中性无彩的变体，把陶土红换成冷灰梯度。在 **Configure** 里切换，切换后重新 apply 一次生效。\n\n<p align=\"center\">\n  <img src=\"docs/screenshots/panel.png\" width=\"420\" alt=\"incipit 聊天面板整体外观：暖黑底色、米色衬线正文、底部状态行\" />\n</p>\n\n数学渲染，表格呈现booktabs，代码块的语法色被压低，工具调用收成一行，展开层用暗红暗绿做 diff，字符级差异再以淡彩在行内细描。\n\n工程信息归并为统一的文学风格——工具调用、diff、状态行的字体、色相、强调方式都与正文风格一致。\n\n<p align=\"center\">\n  <img src=\"docs/screenshots/tools.png\" width=\"420\" alt=\"incipit 工具调用展开块：暗红暗绿 diff 底色、克制行号、字符级行内淡彩，与正文同调\" />\n</p>\n\n---\n\n## 上下文与缓存\n\n输入框上方的状态行常驻显示当前上下文体量和缓存命中率，数字随每一次发出和回复实时刷新。点开后展开一个浮层，列出最近几轮的 token 用量和缓存比例，以及整段会话的累计统计。\n\n<p align=\"center\">\n  <img src=\"docs/screenshots/usage.png\" width=\"420\" alt=\"incipit 上下文与缓存徽章：状态行常驻数字与点开后的会话用量浮层\" />\n</p>\n\n数据来自 Claude Code 本地的 JSONL 转录，**不经由任何网络，不调用任何模型请求。**\n\n缓存详情还会按时间画出命中率曲线。你可以看见最近一段时间里 cache read / cache write / fresh input / output 的比例变化，也可以拖选一段时间范围，只看那段请求的累计读写量。\n\n<p align=\"center\">\n  <img src=\"docs/screenshots/cache-history.png\" width=\"420\" alt=\"incipit 缓存命中历史：当前 cache、context、命中率曲线、选中时间范围和 cache read / cache write / output / fresh input 统计\" />\n</p>\n\n---\n\n## 项目活动\n\nincipit 会把本地 Claude Code 转录里的编辑活动汇总成项目视角。当前项目显示新增 / 删除行数；全局视图显示已记录项目、会话数量、工具编辑次数和活跃天数，并用热力图呈现一段时间内的编辑密度。\n\n<p align=\"center\">\n  <img src=\"docs/screenshots/edit-activity.png\" width=\"420\" alt=\"incipit 项目活动视图：当前项目增删行数、全局 Claude Code 对话统计和编辑活动热力图\" />\n</p>\n\n这些统计同样只读取本地转录文件，不上传项目内容，也不参与模型上下文。\n\n---\n\n## diff\n\nEdit / Write 的 diff 不保留宿主默认的双栏 Monaco：文件名 + `+N −M` 位于头部，删除行铺一层暗红底色，新增行铺一层暗绿，行号克制，字符级差异在行内再做一次同色相但更显的二次着色。短 diff 直接展开，长 diff 折成卡片，点 `Click to expand` 在浮层里看完整。\n\n<p align=\"center\">\n  <img src=\"docs/screenshots/diff-warm-black.png\" width=\"360\" alt=\"incipit diff 暖黑主题：酒红 / 森林绿底色，字符级行内二次着色\" />\n  <img src=\"docs/screenshots/diff-warm-white.png\" width=\"360\" alt=\"incipit diff 暖白主题：浅粉红 / 浅粉绿底色，字符级行内二次着色\" />\n</p>\n\n暖黑主题下是酒红 / 森林绿，暖白主题下是浅粉红 / 浅粉绿。不同主题所有元素经过独立且统一的设计。\n\n---\n\n## 数学渲染\n\n完整的，支持各类复杂情况的公式渲染。\n\n<p align=\"center\">\n  <img src=\"docs/screenshots/math-blocks.png\" width=\"360\" alt=\"incipit 公式渲染：显示块、求和 / 积分 / 极限 / 连乘、矩阵与对齐方程\" />\n  <img src=\"docs/screenshots/math-in-prose.png\" width=\"360\" alt=\"incipit 公式渲染：列表项、blockquote、表格单元格内的行内与块级公式\" />\n</p>\n\nKaTeX 按需加载，当前回复里没有公式就不启动数学链路。字号 1.21em，与衬线正文和 CJK 混排时笔画粗细对得齐。\n同时修复了KaTeX原生的括号被撑大的问题。\n\n---\n\n## 对话历史编辑\n\n- 每条用户消息底部，都有图标：edit / rerun / fork / more。\n\n<p align=\"center\">\n  <img src=\"docs/screenshots/actions.png\" width=\"420\" alt=\"incipit 用户消息底部的动作行：edit / rerun / fork / more 四个克制小图标\" />\n</p>\n\n- Edit (内联编辑)：在消息原位展开编辑器。AI消息同样支持编辑。所有输出块均可支持编辑。\n\n<p align=\"center\">\n  <img src=\"docs/screenshots/edit-assistant.png\" width=\"420\" alt=\"incipit 内联编辑器：AI 回合的就地编辑——透明面板、衬线正文、底部 × / ✓ 两个动作图标\" />\n</p>\n\n- 附件管理：消息展示历史附加的 IDE 文件引用、代码选区及图片。支持点击移除现有附件，也可直接拖拽或粘贴引入新图片。\n本地保存机制：点击保存仅改写本地 JSONL 对话记录文件，不触发任何网络请求。\n重发逻辑：编辑功能仅负责修改本地上下文状态。若需将修改后的内容提交给模型，需在保存后配合使用 Rerun 功能。\n\n<p align=\"center\">\n  <img src=\"docs/screenshots/edit-user.png\" width=\"420\" alt=\"incipit 内联编辑器：用户消息的就地编辑——顶部 chip strip 含图片附件 chip 与添加按钮\" />\n</p>\n\n- Rerun (重试)：仅用户消息处可用，允许在任何用户消息处执行。移除后续对话全部上下文，通过 Claude Code 原生接口（session.send）在同一的sessionid下原样重发当前消息，完整保留图文及 IDE 引用结构。**这意味着改用户消息及以前的上下文，缓存保留**\n\n- Fork (分支)：调用宿主APP forkConversation 接口，将当前及之前的上下文复制到新会话，原会话保留。\n\n- More (更多菜单)：\n包含 代码回滚 (Rewind) 及其组合操作（回滚并 Rerun、回滚并 Fork）。回滚通过调用 session.rewindCode 撤销后续所有磁盘文件更改。\n包含 Copy as text / markdown 复制选项。\n\nIncipit 的本地历史能力遵循原则：不伪造模型上下文，不自行构造 Claude Code 的消息树，也不绕开 Claude Code 的会话协议。涉及 rerun、edit、rewind、fork 等操作，Incipit 只在本地 JSONL 上执行可验证的最小变更：截断历史时保留合法前缀，删除用户消息及其后续派生内容，避免留下孤立的 assistant/tool_use/tool_result 片段；随后重新发送、代码回滚和会话分叉均交回 Claude Code 的原生接口处理，如 `session.send`、`rewindCode`、`forkConversation` 等。\n\n为了避免不可逆写盘造成损坏状态，Incipit 在执行前会做严格的 preflight 校验：必须能确认当前 session id、目标 JSONL、宿主 SessionState 以及相关原生接口都可用，否则操作会被直接拦截。rerun 截断后如果后续发送失败，Incipit 还会在确认 transcript 尚未产生新追加内容的前提下恢复原始 JSONL。这样做的目标是确保本地历史变更不会产生违反 Claude Code / Anthropic messages 结构约束的异常上下文，例如悬空的 tool result、错误的角色顺序、错位的会话分支或不一致的文件状态。\n\n---\n\n## 合规性\n\n这是一个纯前端改造项目，没有侵入任何模型工具调用层，网络请求层。\n\nClaude供应商的用户协议约束的是你和他们服务之间的关系：不能滥用 API、不能绕开限速、不能伪造身份、不能干扰服务端协议。incipit 完全不在这个范围里——它只改你本地屏幕上的渲染方式，和Claude模型供应商的服务器之间没有任何连接。你发出的每一个字节，装它之前和之后是一样的。\n\n---\n\n## 还原\n\n```bash\nincipit restore\n```\n\nCLI 会先锁定当前 Claude Code 目标，确认后恢复同版本、同扩展目录的官方文件。复制进 `webview/` 的 incipit 资源也会被清掉。你在 VS Code settings 里自己做的其他配置不受影响。\n\n`0.1.7` 过渡期会额外保留 `incipit clean-backups`，用于删除旧版命名备份目录 `~/.incipit-backup/`；它不会删除新的官方恢复点 `~/.incipit/`。\n\n---\n\n## 平台\n\nWindows 11 下经过充分测试，日用稳定。\n\nLinux 和 macOS 理论上可以正常工作，但目前没有实机验证。如果遇到问题，提 issue 时附上你的 Claude Code 扩展版本号和报错信息。\n\nClaude Code 扩展每次更新后，补丁会被一并覆盖。再跑一次 `incipit` 即可，通常十秒内完成。\n\n---\n\n## 为什么不做成 VS Code 插件\n\nVS Code 的扩展之间有严格的沙箱隔离，一个插件没有办法向另一个插件的界面注入脚本或样式。要改变 Claude Code 聊天界面的渲染，唯一的途径是直接修改它在本地磁盘上的文件。这就是 incipit 走补丁路线的原因。\n\n如果Claude Code官方将来提供官方的主题或样式注入接口，这个项目会第一时间迁移过去，届时补丁方案归档。\n\n---\n\n## 致谢\n\n感谢 [linuxdo](https://linux.do/) 社区的交流、分享与反馈。\n\n---\n\n## 二开改动\n\n本仓库（[arsonist-g/incipit](https://github.com/arsonist-g/incipit)）基于 [yc-duan/incipit](https://github.com/yc-duan/incipit) 二次开发。在上游 `v0.1.20` 之上新增的修复与功能：\n\n- 重启后历史公式不渲染的竞态修复：数学预处理钩子改为在 webview bundle 运行前安装，VS Code 重启后恢复的往期对话中公式与实时消息渲染一致（上游 issue [#12](https://github.com/yc-duan/incipit/issues/12)）。\n- 宽面板布局适配：面板拉宽后对话内容直接填满面板宽度，不再是以固定宽度居中、两侧留白（上游 issue [#13](https://github.com/yc-duan/incipit/issues/13)）。\n- @ 引用命令桥适配 Claude Code 2.1.241 的新命令结构，companion 扩展的引用在当前版本宿主上恢复可用。\n- 资源管理器右键菜单：右键文件或文件夹出现 *Incipit: Add to Claude Code Session Request*，点击后在输入框光标处插入 ` @<绝对路径>`（companion 扩展，支持多选）。\n\n---\n\n## License\n\n从下一个版本开始，incipit 按 GNU Affero General Public License v3.0 or later 发布。此前已经发布的版本仍保留其发布时的许可。见 [LICENSE](LICENSE)。\n\n### 内置字体\n\nincipit 内置以下 webview 字体，均依 SIL Open Font License 1.1 授权。每个字族的完整许可随附在 `data/fonts/<字族>/OFL.txt`：\n\n| 字体 | 用途 | 版权 | 来源 |\n| --- | --- | --- | --- |\n| IBM Plex Serif | 拉丁正文 + 强调 | © 2017 IBM Corp.，保留字体名 \"Plex\" | [IBM/plex](https://github.com/IBM/plex) |\n| Noto Sans SC 思源黑体 | CJK 正文（默认 `plex-hei` 预设） | © 2014–2021 Adobe（Source Han Sans / Noto CJK） | [notofonts/noto-cjk](https://github.com/notofonts/noto-cjk) |\n| LXGW WenKai 霞鹜文楷 | CJK 正文（可选 `plex-serif` 楷体预设） | © 2021–2026 LXGW；© 2020 The Klee Project Authors | [lxgw/LxgwWenKai](https://github.com/lxgw/LxgwWenKai) |\n| Recursive | 等宽（代码 / 工具输出） | © 2020 The Recursive Project Authors | [arrowtype/recursive](https://github.com/arrowtype/recursive) |\n\nOFL 允许这样的内置与再分发；这些字体经过子集化（OFL 许可范围内的修改），且没有以使用保留字体名（Reserved Font Name）的方式重命名。\n\n---\n","readmeFilename":"README.zh.md","_rev":"1-49432320064c5311d1b8b075ca7433d9"}