finch-file-browser 0.1.0
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/LICENSE +21 -0
- package/README.md +149 -0
- package/dist/index.js +804 -0
- package/dist/panel.css +498 -0
- package/dist/panel.html +66 -0
- package/dist/panel.js +18914 -0
- package/i18n/zh-CN.json +9 -0
- package/icon.png +0 -0
- package/package.json +98 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 zhaobaizhou
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# 对话文件 · Finch Session Files
|
|
2
|
+
|
|
3
|
+
<img src="docs/icon.svg" width="88" alt="icon" align="right" />
|
|
4
|
+
|
|
5
|
+
在**当前对话绑定的文件夹**里浏览、预览和就地修改文件 —— 不用离开会话,也不用切到别的编辑器。
|
|
6
|
+
|
|
7
|
+
给 [Finch](https://finchwork.app) 用的一个小程序(mini tool):右侧面板多一个「对话文件」入口 —— 左边看文件(Markdown 渲染 / 代码高亮,可切源码编辑并保存),右边是这个目录的文件树(可搜索、可点击)。Composer 工具栏也多一个按钮,一键打开。
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
MIT · 不联网 · 不执行 shell · 不读密钥
|
|
12
|
+
|
|
13
|
+
## 为什么需要它
|
|
14
|
+
|
|
15
|
+
跟 AI 干活的产物 —— 报告、方案、脚本、生成的图片 —— 都落在对话绑定的目录里。要回看某一份,得切到访达或者别的编辑器;想顺手改一行,还得再回来。这个小程序把「这个对话的目录」直接搬到对话旁边。
|
|
16
|
+
|
|
17
|
+
## 安装
|
|
18
|
+
|
|
19
|
+
**从 GitHub 装**(打包产物已随仓库提交,不需要自己构建):
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx @finchtoys/minitools add https://github.com/zhaobaizhou/finch-file-browser/archive/refs/heads/main.zip
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**从本地源码装**(改代码时用这个):
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
git clone https://github.com/zhaobaizhou/finch-file-browser.git
|
|
29
|
+
cd finch-file-browser
|
|
30
|
+
npm install
|
|
31
|
+
npm run build
|
|
32
|
+
npx @finchtoys/minitools add . -d # -d 装成符号链接,改完源码重跑 build 即可
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
装完在 Finch 的「小工具箱」里启用,首次会请求**文件读写权限**。
|
|
36
|
+
|
|
37
|
+
## 功能
|
|
38
|
+
|
|
39
|
+
### 右栏 · 文件树
|
|
40
|
+
|
|
41
|
+
- 点击展开目录(懒加载,大目录不吃内存)
|
|
42
|
+
- 按路径筛选(清空搜索框恢复树视图)
|
|
43
|
+
- `.git`、`node_modules`、`dist` 等默认弱化显示,仍可展开
|
|
44
|
+
- 按目录分组排序、目录优先、数字自然序
|
|
45
|
+
|
|
46
|
+
### 左栏 · 阅读与编辑
|
|
47
|
+
|
|
48
|
+
| 类型 | 行为 |
|
|
49
|
+
|---|---|
|
|
50
|
+
| Markdown | 渲染正文 ⇄ 源码切换,表格、任务列表、代码块高亮 |
|
|
51
|
+
| 代码 / 纯文本 | 语法高亮预览 ⇄ 源码编辑(自动识别语言) |
|
|
52
|
+
| 图片 | 内嵌预览 |
|
|
53
|
+
| Word / Excel / PDF 等 | 给一张卡片,一键交给系统默认程序打开 |
|
|
54
|
+
|
|
55
|
+
顶部面包屑显示当前文件相对这个文件夹的完整路径。
|
|
56
|
+
|
|
57
|
+
### 编辑与保存
|
|
58
|
+
|
|
59
|
+
- `⌘S` / `Ctrl+S` 或「保存」按钮写回原文件
|
|
60
|
+
- 保存前校验磁盘 mtime:如果文件在你编辑期间被 Agent 改过,会弹提示,让你选**以我的版本覆盖**或**先重新载入**
|
|
61
|
+
- **回滚上次保存**:每次保存前会把上一版内容存进小程序私有目录,可以原地回滚到保存前的状态(一次性,回滚后按钮自动变灰)
|
|
62
|
+
- 切换文件时若有未保存改动会先确认
|
|
63
|
+
|
|
64
|
+
### 改动高亮与自动刷新
|
|
65
|
+
|
|
66
|
+
- 🔵 蓝点 = 本次对话开始后被创建或修改过的文件
|
|
67
|
+
- 🟠 橙点 = 出现在本次对话中的文件(被读过、被提到过)
|
|
68
|
+
- 面板开着时 Agent 一改文件,右栏自动刷新(`fs.watch`)
|
|
69
|
+
- 当前打开的文件被外部修改:没有本地改动就直接重载,有本地改动则提示你选择
|
|
70
|
+
|
|
71
|
+
### 「本会话」标签页
|
|
72
|
+
|
|
73
|
+
一趟对话下来碰过的文件全在这里,带命中次数,点一下直接打开 —— 这是「AI 刚写的那份报告在哪」最快的答案。
|
|
74
|
+
|
|
75
|
+

|
|
76
|
+
|
|
77
|
+
### 右键菜单
|
|
78
|
+
|
|
79
|
+
- 打开 / 用系统程序打开 / 在访达中显示
|
|
80
|
+
- 复制绝对路径 / 复制相对路径
|
|
81
|
+
- **插入到对话** —— 把该文件作为引用塞进输入框,接着跟 AI 说「改一下这个」
|
|
82
|
+
|
|
83
|
+
## 它是怎么工作的
|
|
84
|
+
|
|
85
|
+
**这个文件夹是哪来的**:优先用该对话所属 Space 绑定的目录,否则用对话的工作目录(cwd)。
|
|
86
|
+
|
|
87
|
+
**「本会话碰过哪些文件」怎么算的**:只读解析 Finch 本地的会话转录(`~/.finch/pi/sessions/**/<sessionId>.jsonl`)—— 提取每个工具调用里出现、且**在磁盘上真实存在**的路径,再做一次存在性校验,所以过期引用不会变成幽灵条目。会话开始时间也来自同一份文件。
|
|
88
|
+
|
|
89
|
+
转录读不到时自动降级:改动高亮退化为空,「本会话」列表退化为空,浏览和编辑完全不受影响。
|
|
90
|
+
|
|
91
|
+
**编辑安全网**:保存前记录 mtime 做冲突检测,保存前落一份备份用于回滚。所有路径都经过 `resolveInside()` 守卫,任何试图逃出当前文件夹的路径(`../`、绝对路径)都会被拒绝。
|
|
92
|
+
|
|
93
|
+
## 权限
|
|
94
|
+
|
|
95
|
+
| 权限 | 用途 |
|
|
96
|
+
|---|---|
|
|
97
|
+
| `filesystem: readwrite` | 读目录、读文件、写回文件 |
|
|
98
|
+
| `network` | ❌ 不使用 |
|
|
99
|
+
| `shell` | ❌ 不使用(仅在 macOS 上调用系统 `open` 来「用系统程序打开」/「在访达中显示」) |
|
|
100
|
+
| `secrets` | ❌ 不使用 |
|
|
101
|
+
|
|
102
|
+
## 项目结构
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
src/index.ts 宿主侧:目录扫描、读写、会话转录解析、文件监听、面板消息路由
|
|
106
|
+
src/panel.html 面板页面
|
|
107
|
+
src/panel.css 样式(全部走 Finch 主题变量,自动跟随浅色/深色皮肤与字号设置)
|
|
108
|
+
src/panel.js 面板逻辑(marked + highlight.js + DOMPurify)
|
|
109
|
+
src/paths.ts 路径守卫、扩展名分类、忽略规则
|
|
110
|
+
src/session.ts 会话转录解析(开始时间、cwd、涉及的文件)
|
|
111
|
+
scripts/smoke.ts 后端逻辑冒烟测试(可跑真实转录)
|
|
112
|
+
docs/icon.svg 图标源文件(`npm run icon` 需要 rsvg-convert)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 开发命令
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
npm run typecheck # tsc --noEmit
|
|
119
|
+
npm run build # 宿主 + 页面 + 静态资源
|
|
120
|
+
npm run doctor # npx @finchtoys/minitools doctor .
|
|
121
|
+
npm run icon # 重新生成 icon.png
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
`dist/` 是构建产物,但**刻意随仓库提交** —— 这样 `add <archive.zip>` 这种直接从 GitHub 安装的方式不需要用户自己构建。改完源码记得跑 `npm run build` 再提交。
|
|
125
|
+
|
|
126
|
+
调试页面本身很方便:`dist/panel.html` 在没有 `window.finch` 时(例如直接用浏览器打开)会退回到一份内置演示数据,可以单纯调样式;在 Finch 里永远走真实 Bridge。
|
|
127
|
+
|
|
128
|
+
## 已知边界
|
|
129
|
+
|
|
130
|
+
- 对话正文里出现的文件路径**不会**变成可点击链接 —— 时间线由 Finch 主程序渲染,小程序 API 没有注入入口。本工具的替代方案是「本会话」标签页 + 右键「插入到对话」。
|
|
131
|
+
- 会话转录的路径与格式属于 Finch 内部实现,未来版本若有变化,相关功能会自动降级(不影响浏览和编辑)。
|
|
132
|
+
- 二进制文件不在面板内渲染,只提供「用系统程序打开」。
|
|
133
|
+
- 界面文案目前为简体中文。
|
|
134
|
+
|
|
135
|
+
## English
|
|
136
|
+
|
|
137
|
+
A Finch mini tool that puts the current conversation's folder next to the conversation: a file tree on the right (searchable, lazily loaded), a preview/editor on the left (Markdown rendering, syntax highlighting, in-place editing with save + one-step rollback), plus change highlighting for files this session created or touched.
|
|
138
|
+
|
|
139
|
+
Install:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
npx @finchtoys/minitools add https://github.com/zhaobaizhou/finch-file-browser/archive/refs/heads/main.zip
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
It never uses the network, never runs shell commands, and declares only `filesystem: readwrite`. Local-only: all file access stays on your machine.
|
|
146
|
+
|
|
147
|
+
## License
|
|
148
|
+
|
|
149
|
+
[MIT](LICENSE)
|