filecat 6.7.4 → 6.7.5
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.md +148 -89
- package/build/dist/{1501.25f31920ea48439a5dfe.js → 1501.30512e814de66dc6d353.js} +1 -1
- package/build/dist/3402.7ce43d6229d0d1619983.js +2 -0
- package/build/dist/{4377.d56b978395eae5501f99.js → 4377.49c55e0115507313e69f.js} +2 -2
- package/build/dist/{4943.bd3f18f6e34f5b5c12b9.js → 4943.cfacb31920dc581eb288.js} +2 -2
- package/build/dist/{9213.bd1caff2b1a815eb1038.js → 9213.b5a57e055b13867f7890.js} +2 -2
- package/build/dist/index.html +1 -1
- package/build/dist/{main.a5a55b468d9dce992360.js → main.5b7a7a215aa3f9a7ade3.js} +2 -2
- package/build/main.js +1 -1
- package/package.json +1 -1
- package/build/dist/3402.09670dff158f73c74e1f.js +0 -2
- /package/build/dist/{3402.09670dff158f73c74e1f.js.LICENSE.txt → 3402.7ce43d6229d0d1619983.js.LICENSE.txt} +0 -0
- /package/build/dist/{4377.d56b978395eae5501f99.js.LICENSE.txt → 4377.49c55e0115507313e69f.js.LICENSE.txt} +0 -0
- /package/build/dist/{4943.bd3f18f6e34f5b5c12b9.js.LICENSE.txt → 4943.cfacb31920dc581eb288.js.LICENSE.txt} +0 -0
- /package/build/dist/{9213.bd1caff2b1a815eb1038.js.LICENSE.txt → 9213.b5a57e055b13867f7890.js.LICENSE.txt} +0 -0
- /package/build/dist/{main.a5a55b468d9dce992360.js.LICENSE.txt → main.5b7a7a215aa3f9a7ade3.js.LICENSE.txt} +0 -0
package/README.md
CHANGED
|
@@ -1,145 +1,204 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="./src/web/meta/resources/img/logo-70.png" alt="FileCat Logo" width="70" height="70">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">FileCat</h1>
|
|
1
6
|
|
|
2
|
-
|
|
7
|
+
<p align="center">
|
|
8
|
+
<i>一款自部署的 Web 文件服务器与轻量级服务器管理工具</i>
|
|
9
|
+
</p>
|
|
3
10
|
|
|
4
|
-
<p align="
|
|
5
|
-
<!-- npm 下载量 -->
|
|
11
|
+
<p align="center">
|
|
6
12
|
<a href="https://www.npmjs.com/package/filecat">
|
|
7
13
|
<img src="https://img.shields.io/npm/dm/filecat.svg" alt="npm downloads">
|
|
8
14
|
</a>
|
|
9
|
-
|
|
10
|
-
<!-- npm 版本 -->
|
|
11
15
|
<a href="https://www.npmjs.com/package/filecat">
|
|
12
16
|
<img src="https://img.shields.io/npm/v/filecat.svg" alt="npm version">
|
|
13
17
|
</a>
|
|
14
|
-
|
|
15
|
-
<!-- GitHub stars -->
|
|
16
18
|
<a href="https://github.com/xiaobaidadada/filecat">
|
|
17
19
|
<img src="https://img.shields.io/github/stars/xiaobaidadada/filecat.svg" alt="stars">
|
|
18
20
|
</a>
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
<!-- Docker pulls -->
|
|
22
21
|
<a href="https://ghcr.io/xiaobaidadada/filecat">
|
|
23
22
|
<img src="https://img.shields.io/badge/docker-ghcr.io-blue.svg" alt="docker">
|
|
24
23
|
</a>
|
|
25
|
-
|
|
26
|
-
<!-- license -->
|
|
27
24
|
<a href="https://github.com/xiaobaidadada/filecat/blob/main/LICENSE">
|
|
28
25
|
<img src="https://img.shields.io/github/license/xiaobaidadada/filecat.svg" alt="license">
|
|
29
26
|
</a>
|
|
30
27
|
</p>
|
|
31
28
|
|
|
32
|
-
|
|
29
|
+
<p align="center">
|
|
30
|
+
<a href="#功能特性">功能特性</a> •
|
|
31
|
+
<a href="#功能截图">功能截图</a> •
|
|
32
|
+
<a href="#安装方式">安装方式</a> •
|
|
33
|
+
<a href="#快速运行">快速运行</a>
|
|
34
|
+
</p>
|
|
35
|
+
|
|
36
|
+
<p align="center">
|
|
37
|
+
<a href="./doc/EN_README.md">English</a>
|
|
38
|
+
</p>
|
|
33
39
|
|
|
34
|
-
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
FileCat 是一个需要自己部署的 Web 文件服务器,同时也是一款**轻量级服务器管理工具**。部署后,你可以随时随地通过浏览器管理服务器上的文件,并享受丰富的运维功能。
|
|
43
|
+
|
|
44
|
+
> **核心理念**:以文件管理为核心,融合 AI Agent、远程桌面、内网穿透、系统监控等能力,让服务器管理变得更简单。
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 功能特性
|
|
49
|
+
|
|
50
|
+
| 类别 | 功能 |
|
|
51
|
+
|------|-----------------------------------|
|
|
52
|
+
| 文件管理 | 浏览、上传、下载、编辑、在线预览(图片、视频、Markdown、绘图等) |
|
|
53
|
+
| AI Agent | 集成大语言模型,智能辅助运维和文件处理(需自行配置 API) |
|
|
54
|
+
| 内网穿透 | 将内网暴露到公网,或者多个内网之间互相通信 |
|
|
55
|
+
| SSH 终端 | 浏览器内置 Web 终端,随时连接服务器 |
|
|
56
|
+
| Windows 远程桌面 | 浏览器中直接操作远程 Windows 桌面(RDP) |
|
|
57
|
+
| 系统信息看板 | 实时 CPU、内存、磁盘、网络等系统监控 |
|
|
58
|
+
| CI/CD 工作流 | 支持自定义命令流水线,实现持续集成与部署 |
|
|
59
|
+
| 超大日志查看 | 任意大小的文本日志文件秒开,高效定位问题 |
|
|
60
|
+
| Excalidraw 绘图 | 内置白板绘图工具 |
|
|
61
|
+
| 多用户管理 | 完善的权限体系 |
|
|
62
|
+
| 可分享链接 | 生成文件分享链接,方便他人下载 |
|
|
63
|
+
| 多路径挂载 | 支持挂载多个文件系统路径 |
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 功能截图
|
|
68
|
+
|
|
69
|
+
<table>
|
|
70
|
+
<tr>
|
|
71
|
+
<td align="center"><b>文件列表</b></td>
|
|
72
|
+
<td align="center"><b>AI Agent</b></td>
|
|
73
|
+
</tr>
|
|
74
|
+
<tr>
|
|
75
|
+
<td><img src="./doc/文件列表.png" alt="文件列表"/></td>
|
|
76
|
+
<td><img src="./doc/AI能力.png" alt="AI Agent"/></td>
|
|
77
|
+
</tr>
|
|
78
|
+
<tr>
|
|
79
|
+
<td align="center"><b>内网穿透</b></td>
|
|
80
|
+
<td align="center"><b>系统信息看板</b></td>
|
|
81
|
+
</tr>
|
|
82
|
+
<tr>
|
|
83
|
+
<td><img src="./doc/内网穿透.png" alt="内网穿透"/></td>
|
|
84
|
+
<td><img src="./doc/系统信息看板.png" alt="系统信息看板"/></td>
|
|
85
|
+
</tr>
|
|
86
|
+
</table>
|
|
87
|
+
|
|
88
|
+
---
|
|
35
89
|
|
|
36
|
-
|
|
90
|
+
## Demo
|
|
37
91
|
|
|
92
|
+
在线体验地址:**[http://demo.filecat.xiaobaidadada.fun/](http://demo.filecat.xiaobaidadada.fun/)**
|
|
38
93
|
|
|
39
|
-
|
|
40
|
-
### 文件列表
|
|
41
|
-

|
|
42
|
-
### 强大的AI Agent能力(需要自己配置大模型的api)
|
|
43
|
-

|
|
44
|
-
### 内网穿透
|
|
45
|
-

|
|
46
|
-
### 系统信息看板
|
|
47
|
-

|
|
94
|
+
账号密码: `demo`/`demo`或者 `test`/`test`
|
|
48
95
|
|
|
49
|
-
|
|
96
|
+
> Demo 服务器由 [野草云](https://my.yecaoyun.com/aff.php?aff=7185) 赞助提供
|
|
50
97
|
|
|
51
|
-
|
|
52
|
-
http://demo.filecat.xiaobaidadada.fun/
|
|
98
|
+
---
|
|
53
99
|
|
|
54
|
-
|
|
55
|
-
中文账号 demo-zh/demo
|
|
100
|
+
## 安装方式
|
|
56
101
|
|
|
57
|
-
|
|
58
|
-
## 安装方式
|
|
59
|
-
小的bug修复与功能更新,只会在npm上实时发布同步
|
|
102
|
+
> 小版本 bug 修复与功能更新仅在 npm 上实时发布同步。
|
|
60
103
|
|
|
61
|
-
### 1.
|
|
104
|
+
### 1. NPM 安装(推荐)
|
|
62
105
|
|
|
106
|
+
```bash
|
|
107
|
+
npm install -g filecat
|
|
108
|
+
```
|
|
63
109
|
|
|
64
|
-
`
|
|
110
|
+
对于 Linux 系统,安装后可以选择使用 `pm2` 保活,或执行 `filecat --install` 注册到 systemd。
|
|
65
111
|
|
|
66
|
-
|
|
112
|
+
### 2. Linux 一键脚本
|
|
67
113
|
|
|
68
|
-
|
|
114
|
+
```bash
|
|
115
|
+
curl -o install.sh https://filecat.xiaobaidadada.fun/files/linux-install.sh && bash install.sh
|
|
116
|
+
```
|
|
69
117
|
|
|
70
|
-
|
|
118
|
+
自动下载二进制包并执行安装,按提示输入参数即可。
|
|
71
119
|
|
|
72
|
-
|
|
120
|
+
### 3. 二进制包
|
|
73
121
|
|
|
74
|
-
|
|
75
|
-
下载最新 [Releases](https://github.com/xiaobaidadada/filecat/releases)
|
|
122
|
+
从 [Releases](https://github.com/xiaobaidadada/filecat/releases) 下载对应系统的最新版本。
|
|
76
123
|
|
|
77
124
|
### 4. Docker
|
|
78
|
-
`docker run -d --name filecat --restart=always --net=host -v /home:/home ghcr.io/xiaobaidadada/filecat:latest --port 5567 --base_folder /home`
|
|
79
125
|
|
|
80
|
-
|
|
81
|
-
|
|
126
|
+
```bash
|
|
127
|
+
docker run -d --name filecat --restart=always --net=host \
|
|
128
|
+
-v /home:/home \
|
|
129
|
+
ghcr.io/xiaobaidadada/filecat:latest \
|
|
130
|
+
--port 5567 --base_folder /home
|
|
131
|
+
```
|
|
82
132
|
|
|
83
|
-
|
|
133
|
+
### 5. 源码编译
|
|
84
134
|
|
|
85
|
-
|
|
135
|
+
```bash
|
|
136
|
+
git clone https://github.com/xiaobaidadada/filecat.git
|
|
137
|
+
cd filecat
|
|
138
|
+
npm install
|
|
139
|
+
npm run dev # 开发模式
|
|
140
|
+
# 或
|
|
141
|
+
npm run build && node build/main.js # 生产模式
|
|
142
|
+
```
|
|
86
143
|
|
|
87
|
-
|
|
88
|
-
1. npm 安装完以后运行命令 `filecat --port 5567`,
|
|
89
|
-
2. 二进制下载后的,解压缩后目录内有 `filecat-run.sh`|`filecat-run.cmd`两个运行脚本。
|
|
144
|
+
---
|
|
90
145
|
|
|
91
|
-
|
|
146
|
+
## 快速运行
|
|
92
147
|
|
|
93
|
-
|
|
148
|
+
**方式一**:NPM 安装后执行:
|
|
149
|
+
```bash
|
|
150
|
+
filecat --port 5567
|
|
151
|
+
```
|
|
94
152
|
|
|
95
|
-
|
|
153
|
+
**方式二**:二进制包解压后,目录内有 `filecat-run.sh`(Linux/Mac)或 `filecat-run.cmd`(Windows)运行脚本。
|
|
96
154
|
|
|
97
|
-
|
|
98
|
-
1. 使用自定义的安装方式进行升级,比如npm 安装的就使用 npm -g i filecat,docker 可以重新pull镜像,二进制安装的可以重新下载替换。
|
|
99
|
-
2. 从5.33.0 版本以后,可以使用 `filecat-upgrade` 命令来进行升级,会自动根据安装环境进行升级。对于docker和二进制安装的方式,filecat-upgrade 命令还支持一个自定义下载url路径参数(默认是从github下载最新包)。
|
|
155
|
+
**默认账号/密码**:`admin` / `admin`
|
|
100
156
|
|
|
157
|
+
> 更多参数请使用 `filecat --help` 查看。
|
|
101
158
|
|
|
102
|
-
|
|
103
|
-
824838674
|
|
159
|
+
> **权限提示**:安装后默认能访问的文件目录是安装目录,请在设置中为每个用户配置可访问目录及执行权限。
|
|
104
160
|
|
|
161
|
+
---
|
|
105
162
|
|
|
163
|
+
## 升级指南
|
|
106
164
|
|
|
107
|
-
|
|
165
|
+
1. **常规升级**:根据你的安装方式升级
|
|
166
|
+
- NPM:`npm -g i filecat`
|
|
167
|
+
- Docker:重新 pull 最新镜像
|
|
168
|
+
- 二进制:下载最新包替换
|
|
169
|
+
2. **自动升级**(v5.33.0+):执行 `filecat-upgrade` 命令,自动根据安装环境升级。Docker 和二进制安装还支持自定义下载 URL 参数。
|
|
108
170
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
| webdav 支持 | ❌|✅|❌|
|
|
117
|
-
| 多用户登陆管理支持 | ✅|✅|✅|
|
|
118
|
-
| 终端shell |✅|❌|❌|
|
|
119
|
-
| 开源 |✅|✅|✅|
|
|
120
|
-
| 单点登录支持 |✅|✅|❌|
|
|
121
|
-
| 可分享的网页链接 |✅|✅|✅|
|
|
122
|
-
| 基于文本的文件编辑器 |✅|✅|✅|
|
|
123
|
-
| 详细使用手册 | ❌|✅|✅|
|
|
124
|
-
| Office 文件预览 |❌|✅|❌|
|
|
125
|
-
| 索引搜索 |❌|✅|❌|
|
|
126
|
-
| 多文件系统路径挂载 |✅|✅|❌|
|
|
127
|
-
| 内网穿透 |✅|❌|❌|
|
|
128
|
-
| ssh终端 |✅|❌|❌|
|
|
129
|
-
| 实时系统信息 |✅|❌|❌|
|
|
130
|
-
| windows 远程桌面 |✅|❌|❌|
|
|
131
|
-
| 命令CI/CD工作流支持 |✅|❌|❌|
|
|
132
|
-
| 超大日志文件查看 |✅|❌|❌|
|
|
133
|
-
| ai agent |✅|❌|❌|
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 社区交流
|
|
174
|
+
|
|
175
|
+
加入 QQ 群 **824838674** 进行交流反馈
|
|
176
|
+
|
|
177
|
+
---
|
|
134
178
|
|
|
135
179
|
## 参与开发
|
|
136
180
|
|
|
137
|
-
1.
|
|
138
|
-
2. 功能性提交请在
|
|
181
|
+
1. PR 请先提交到 `dev` 分支
|
|
182
|
+
2. 功能性提交请在 QQ 群中提前沟通
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 感谢
|
|
187
|
+
|
|
188
|
+
以下项目为 FileCat 提供了灵感或基础:
|
|
139
189
|
|
|
140
|
-
|
|
141
|
-
|
|
190
|
+
- [filebrowser](https://github.com/filebrowser/filebrowser)
|
|
191
|
+
- [MeshCentral](https://github.com/Ylianst/MeshCentral)
|
|
192
|
+
- [mstsc](https://github.com/citronneur/mstsc.js)
|
|
142
193
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
<p align="center">
|
|
197
|
+
<a href="https://github.com/xiaobaidadada/filecat">
|
|
198
|
+
<img src="https://img.shields.io/github/stars/xiaobaidadada/filecat?style=social" alt="Star on GitHub">
|
|
199
|
+
</a>
|
|
200
|
+
</p>
|
|
201
|
+
|
|
202
|
+
<p align="center">
|
|
203
|
+
Made with love by <a href="https://github.com/xiaobaidadada">xiaobaidadada</a>
|
|
204
|
+
</p>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkfilecat=self.webpackChunkfilecat||[]).push([[1501,6010],{3277(t,e,n){function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function o(t,e,n){return e=l(e),function(t,e){if(e&&("object"==r(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,a()?Reflect.construct(e,n||[],l(t).constructor):e.apply(t,n))}function a(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(a=function(){return!!t})()}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function i(t,e){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},i(t,e)}function u(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return c(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,o=function(){};return{s:o,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,l=!0,i=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return l=t.done,t},e:function(t){i=!0,a=t},f:function(){try{l||null==n.return||n.return()}finally{if(i)throw a}}}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function f(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,d(r.key),r)}}function s(t,e,n){return e&&f(t.prototype,e),n&&f(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function p(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function y(t,e,n){return(e=d(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function d(t){var e=function(t,e){if("object"!=r(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e||"default");if("object"!=r(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==r(e)?e:e+""}n.d(e,{$j:()=>_,CP:()=>m,Lv:()=>v,cL:()=>g,qq:()=>b});var h=s(function t(){p(this,t)}),v=function(){return s(function t(){p(this,t),y(this,"open",!1),y(this,"dotenv",""),y(this,"tool_mode",!1)},null,[{key:"get_label_by_v",value:function(t,e){if(!t||null==e||!e.length)return t;var n,r=u(e);try{for(r.s();!(n=r.n()).done;){var o=n.value;if(o.value===t)return o.label}}catch(t){r.e(t)}finally{r.f()}}}])}(),b=function(t){function e(){var t;p(this,e);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return y(t=o(this,e,[].concat(r)),"tool_error_max",50),y(t,"tool_call_max",300),y(t,"allow_exec_cmd_directly",!1),t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&i(t,e)}(e,t),s(e)}(h),m='\n\n# 工具报错最大尝试次数\ntool_error_max=50\n# 聊天循环最大次数\ntool_call_max=300\n# 是否允许AI直接执行命令而不需要用户确认,默认为false,需要用户手动确认,如果使用 workflow 这里等价于为 true\nallow_exec_cmd_directly=false\n\n# 可选的代理 url,如果指定了所有访问大模型的请求将会走代理\n#proxy_url=\n\n# 可选的多个url 以数组分割\n# options_agent_url_list=[{"value":"http://..",label:"openai"}]\n\n# 可选的多个 token\n# options_agent_token_list=[{"value":"sh-aaa",label:"option1"}]\n\n# 可选的多个 model\n# options_agent_model_list=[{"value":"gpt-5.5",label:"gpt"}]\n\n',g=JSON.stringify({stream:!0,thinking:{type:"disabled"}});function _(t){return"string"==typeof t?t:Array.isArray(t)?t.map(function(t){return"text"===t.type?t.text:"[图片]"}).join("\n"):""}},6494(t,e,n){n.d(e,{r:()=>o});var r=n(2389);function o(){var t=(0,r.Bd)().t;return[{value:"completions",label:t("文本对话")},{value:"images",label:t("图片生成")}
|
|
1
|
+
"use strict";(self.webpackChunkfilecat=self.webpackChunkfilecat||[]).push([[1501,6010],{3277(t,e,n){function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function o(t,e,n){return e=l(e),function(t,e){if(e&&("object"==r(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,a()?Reflect.construct(e,n||[],l(t).constructor):e.apply(t,n))}function a(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(a=function(){return!!t})()}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function i(t,e){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},i(t,e)}function u(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return c(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,o=function(){};return{s:o,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,l=!0,i=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return l=t.done,t},e:function(t){i=!0,a=t},f:function(){try{l||null==n.return||n.return()}finally{if(i)throw a}}}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function f(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,d(r.key),r)}}function s(t,e,n){return e&&f(t.prototype,e),n&&f(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function p(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function y(t,e,n){return(e=d(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function d(t){var e=function(t,e){if("object"!=r(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e||"default");if("object"!=r(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==r(e)?e:e+""}n.d(e,{$j:()=>_,CP:()=>m,Lv:()=>v,cL:()=>g,qq:()=>b});var h=s(function t(){p(this,t)}),v=function(){return s(function t(){p(this,t),y(this,"open",!1),y(this,"dotenv",""),y(this,"tool_mode",!1)},null,[{key:"get_label_by_v",value:function(t,e){if(!t||null==e||!e.length)return t;var n,r=u(e);try{for(r.s();!(n=r.n()).done;){var o=n.value;if(o.value===t)return o.label}}catch(t){r.e(t)}finally{r.f()}}}])}(),b=function(t){function e(){var t;p(this,e);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return y(t=o(this,e,[].concat(r)),"tool_error_max",50),y(t,"tool_call_max",300),y(t,"allow_exec_cmd_directly",!1),t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&i(t,e)}(e,t),s(e)}(h),m='\n\n# 工具报错最大尝试次数\ntool_error_max=50\n# 聊天循环最大次数\ntool_call_max=300\n# 是否允许AI直接执行命令而不需要用户确认,默认为false,需要用户手动确认,如果使用 workflow 这里等价于为 true\nallow_exec_cmd_directly=false\n\n# 可选的代理 url,如果指定了所有访问大模型的请求将会走代理\n#proxy_url=\n\n# 可选的多个url 以数组分割\n# options_agent_url_list=[{"value":"http://..",label:"openai"}]\n\n# 可选的多个 token\n# options_agent_token_list=[{"value":"sh-aaa",label:"option1"}]\n\n# 可选的多个 model\n# options_agent_model_list=[{"value":"gpt-5.5",label:"gpt"}]\n\n',g=JSON.stringify({stream:!0,thinking:{type:"disabled"}});function _(t){return"string"==typeof t?t:Array.isArray(t)?t.map(function(t){return"text"===t.type?t.text:"[图片]"}).join("\n"):""}},6494(t,e,n){n.d(e,{r:()=>o});var r=n(2389);function o(){var t=(0,r.Bd)().t;return[{value:"completions",label:t("文本对话")},{value:"images",label:t("图片生成")}]}},4299(t,e,n){n.r(e),n.d(e,{default:()=>h});var r=n(6540),o=n(3557),a=n(3995),l=n(950),i=n(7979),u=n(8263),c=n(9428),f=n.n(c),s=(n(3775),n(1499)),p=n(9214),y=n(9878),d=(n(2411),new o.A({html:!0,highlight:function(t,e){if(e&&y.A.getLanguage(e))try{var n=y.A.highlight(t,{language:e}).value;return'<pre class="hljs code-block-with-copy"><code class="hljs language-'.concat(e,'">').concat(n,"</code></pre>")}catch(t){}try{var r=y.A.highlightAuto(t).value;return'<pre class="hljs code-block-with-copy"><code class="hljs">'.concat(r,"</code></pre>")}catch(t){}return'<pre class="hljs code-block-with-copy"><code>'.concat(d.utils.escapeHtml(t),"</code></pre>")}}));function h(t){return(0,p.VD)(),r.createElement("div",{dangerouslySetInnerHTML:{__html:d.render(t.context)}})}d.use(a.A).use(l.A).use(i.A).use(u.A).use(f()).use(function(t){t.renderer.rules.fence;t.renderer.rules.fence=function(e,n,r,o,a){var l=e[n],i=l.content.trim(),u=l.info.trim(),c="";if(u&&y.A.getLanguage(u))try{c=y.A.highlight(i,{language:u}).value}catch(e){c=t.utils.escapeHtml(i)}else try{c=y.A.highlightAuto(i).value}catch(e){c=t.utils.escapeHtml(i)}return'\n <div class="code-block-with-copy">\n <div class="code-header">\n <span class="code-language">'.concat(u||"code",'</span>\n <button class="copy-btn" data-code="').concat(t.utils.escapeHtml(i),'">复制</button>\n </div>\n <pre><code class="hljs ').concat(u?"language-".concat(u):"",'">').concat(c,"</code></pre>\n </div>")}}).use(function(t){var e=t.renderer.rules.link_open||function(t,e,n,r,o){return o.renderToken(t,e,n)};t.renderer.rules.link_open=function(t,n,r,o,a){var l=t[n],i=l.attrIndex("href");if(i>=0){var u=l.attrs[i][1];l.attrs[i][1]=(0,s.bi)(window.location.href,u)}return e(t,n,r,o,a)}})},5907(t,e,n){n.d(e,{y:()=>i});var r=n(7444),o=n(6417);function a(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,a,l,i=[],u=!0,c=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=a.call(n)).done)&&(i.push(r.value),i.length!==e);u=!0);}catch(t){c=!0,o=t}finally{try{if(!u&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(c)throw o}}return i}}(t,e)||function(t,e){if(t){if("string"==typeof t)return l(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function i(){var t=a((0,r.L4)(o.AG.confirm),2),e=(t[0],t[1]);return function(t){var n=t.sub_title,r=t.confirm_fun,o=t.title,a=t.context_div;e({open:!0,sub_title:n,handle:function(){r(),e({open:!1,handle:null})},title:o,context_div:a})}}},840(t){t.exports="data:image/svg+xml,<svg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 version=%271.1%27 aria-hidden=%27true%27><path fill-rule=%27evenodd%27 d=%27M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z%27></path></svg>"}}]);
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! For license information please see 3402.7ce43d6229d0d1619983.js.LICENSE.txt */
|
|
2
|
+
"use strict";(self.webpackChunkfilecat=self.webpackChunkfilecat||[]).push([[3402],{4405(t,n,e){e.d(n,{n:()=>d,x:()=>y});var r=e(1499);function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function c(t,n,e){return n=u(n),function(t,n){if(n&&("object"==o(n)||"function"==typeof n))return n;if(void 0!==n)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,i()?Reflect.construct(n,e||[],u(t).constructor):n.apply(t,e))}function i(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(i=function(){return!!t})()}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function a(t,n){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,n){return t.__proto__=n,t},a(t,n)}function f(t,n){for(var e=0;e<n.length;e++){var r=n[e];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,s(r.key),r)}}function l(t,n,e){return n&&f(t.prototype,n),e&&f(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t}function s(t){var n=function(t,n){if("object"!=o(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,n||"default");if("object"!=o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(t)}(t,"string");return"symbol"==o(n)?n:n+""}function p(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}var d=l(function t(){p(this,t)}),y=function(t){function n(){return p(this,n),c(this,n,arguments)}return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(n&&n.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),n&&a(t,n)}(n,t),l(n,null,[{key:"getKey",value:function(t){return(0,r.Nr)("".concat(t.domain).concat(t.port).concat(t.username).concat(t.authorization))}}])}(d)},2693(t,n,e){e.d(n,{w:()=>p});var r=e(6540),o=e(2389),c=e(4944),i=e(4188),u=e(7444),a=e(6417),f=e(5997);function l(t,n){return function(t){if(Array.isArray(t))return t}(t)||function(t,n){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var r,o,c,i,u=[],a=!0,f=!1;try{if(c=(e=e.call(t)).next,0===n){if(Object(e)!==e)return;a=!1}else for(;!(a=(r=c.call(e)).done)&&(u.push(r.value),u.length!==n);a=!0);}catch(t){f=!0,o=t}finally{try{if(!a&&null!=e.return&&(i=e.return(),Object(i)!==i))return}finally{if(f)throw o}}return u}}(t,n)||function(t,n){if(t){if("string"==typeof t)return s(t,n);var e={}.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?s(t,n):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,r=Array(n);e<n;e++)r[e]=t[e];return r}function p(){var t=l((0,u.L4)(a.AG.prompt_card),2),n=(t[0],t[1]),e=(0,o.Bd)().t,s=(0,r.useRef)([]),p=(0,r.useRef)(!1),d=(0,r.useCallback)(function(){if(!p.current){if(0===s.current.length)return p.current=!1,void n({open:!1});p.current=!0;var t=s.current.shift();t?n({open:!0,title:e("命令确认"),cancel:function(){c.ws.sendData(i.HK.ai_confirm_cmd,{askId:t.askId,approved:!1}),n({open:!1}),p.current=!1,d()},context_div:r.createElement("div",null,r.createElement("span",null,t.cmd),r.createElement(f.$n,{text:e("允许"),clickFun:function(){c.ws.sendData(i.HK.ai_confirm_cmd,{askId:t.askId,approved:!0}),n({open:!1}),p.current=!1,d()}}),r.createElement(f.$n,{text:e("拒绝"),color:"var(--red)",clickFun:function(){c.ws.sendData(i.HK.ai_confirm_cmd,{askId:t.askId,approved:!1}),n({open:!1}),p.current=!1,d()}}))}):p.current=!1}},[e]),y=(0,r.useCallback)(function(t){s.current.push(t),d()},[d]);(0,r.useEffect)(function(){return c.ws.addMsg(i.HK.ai_confirm_cmd,function(t){var n=t.context||{};n.askId&&n.cmd&&y({askId:n.askId,cmd:n.cmd})}),function(){c.ws.removeMsg(i.HK.ai_confirm_cmd)}},[y]),(0,r.useEffect)(function(){return function(){s.current=[],p.current=!1}},[])}},3402(t,n,e){e.r(n),e.d(n,{default:()=>w});var r=e(6540),o=e(7856),c=e(4188),i=e(4944),u=e(7444),a=e(6417),f=e(4405),l=e(505),s=e(2693);function p(){var t,n,e="function"==typeof Symbol?Symbol:{},r=e.iterator||"@@iterator",o=e.toStringTag||"@@toStringTag";function c(e,r,o,c){var a=r&&r.prototype instanceof u?r:u,f=Object.create(a.prototype);return d(f,"_invoke",function(e,r,o){var c,u,a,f=0,l=o||[],s=!1,p={p:0,n:0,v:t,a:d,f:d.bind(t,4),d:function(n,e){return c=n,u=0,a=t,p.n=e,i}};function d(e,r){for(u=e,a=r,n=0;!s&&f&&!o&&n<l.length;n++){var o,c=l[n],d=p.p,y=c[2];e>3?(o=y===r)&&(a=c[(u=c[4])?5:(u=3,3)],c[4]=c[5]=t):c[0]<=d&&((o=e<2&&d<c[1])?(u=0,p.v=r,p.n=c[1]):d<y&&(o=e<3||c[0]>r||r>y)&&(c[4]=e,c[5]=r,p.n=y,u=0))}if(o||e>1)return i;throw s=!0,r}return function(o,l,y){if(f>1)throw TypeError("Generator is already running");for(s&&1===l&&d(l,y),u=l,a=y;(n=u<2?t:a)||!s;){c||(u?u<3?(u>1&&(p.n=-1),d(u,a)):p.n=a:p.v=a);try{if(f=2,c){if(u||(o="next"),n=c[o]){if(!(n=n.call(c,a)))throw TypeError("iterator result is not an object");if(!n.done)return n;a=n.value,u<2&&(u=0)}else 1===u&&(n=c.return)&&n.call(c),u<2&&(a=TypeError("The iterator does not provide a '"+o+"' method"),u=1);c=t}else if((n=(s=p.n<0)?a:e.call(r,p))!==i)break}catch(n){c=t,u=1,a=n}finally{f=1}}return{value:n,done:s}}}(e,o,c),!0),f}var i={};function u(){}function a(){}function f(){}n=Object.getPrototypeOf;var l=[][r]?n(n([][r]())):(d(n={},r,function(){return this}),n),s=f.prototype=u.prototype=Object.create(l);function y(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,f):(t.__proto__=f,d(t,o,"GeneratorFunction")),t.prototype=Object.create(s),t}return a.prototype=f,d(s,"constructor",f),d(f,"constructor",a),a.displayName="GeneratorFunction",d(f,o,"GeneratorFunction"),d(s),d(s,o,"Generator"),d(s,r,function(){return this}),d(s,"toString",function(){return"[object Generator]"}),(p=function(){return{w:c,m:y}})()}function d(t,n,e,r){var o=Object.defineProperty;try{o({},"",{})}catch(t){o=0}d=function(t,n,e,r){function c(n,e){d(t,n,function(t){return this._invoke(n,e,t)})}n?o?o(t,n,{value:e,enumerable:!r,configurable:!r,writable:!r}):t[n]=e:(c("next",0),c("throw",1),c("return",2))},d(t,n,e,r)}function y(t,n,e,r,o,c,i){try{var u=t[c](i),a=u.value}catch(t){return void e(t)}u.done?n(a):Promise.resolve(a).then(r,o)}function h(t){return function(){var n=this,e=arguments;return new Promise(function(r,o){var c=t.apply(n,e);function i(t){y(c,r,o,i,u,"next",t)}function u(t){y(c,r,o,i,u,"throw",t)}i(void 0)})}}function m(t,n){return function(t){if(Array.isArray(t))return t}(t)||function(t,n){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var r,o,c,i,u=[],a=!0,f=!1;try{if(c=(e=e.call(t)).next,0===n){if(Object(e)!==e)return;a=!1}else for(;!(a=(r=c.call(e)).done)&&(u.push(r.value),u.length!==n);a=!0);}catch(t){f=!0,o=t}finally{try{if(!a&&null!=e.return&&(i=e.return(),Object(i)!==i))return}finally{if(f)throw o}}return u}}(t,n)||function(t,n){if(t){if("string"==typeof t)return b(t,n);var e={}.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?b(t,n):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,r=Array(n);e<n;e++)r[e]=t[e];return r}var v=r.lazy(function(){return e.e(5614).then(e.bind(e,5614))});function w(t){var n,e=m((0,r.useState)(null),2),d=e[0],y=e[1],b=m((0,u.L4)(a.AG.fileShellShow),2),w=b[0],g=(b[1],m((0,u.L4)(a.AG.file_shell_hidden),2)),_=g[0],O=(g[1],m((0,u.L4)(a.AG.user_base_info),2)),j=O[0],S=(O[1],null!==(n=j.user_data.theme)&&void 0!==n&&n.includes("dark")?"#FFFFFF":"#000000");(0,s.w)();var k=function(){var t=h(p().m(function t(){var n,e,r;return p().w(function(t){for(;;)switch(t.n){case 0:return n=new o.Terminal({fontFamily:"Monaco, Menlo, Consolas, 'Courier New', monospace",theme:{background:"#FFFFFF",foreground:S,cursor:S,selectionBackground:"#a6d2ff"},cursorBlink:!0,cursorStyle:"bar",scrollback:1e3,scrollSensitivity:1,tabStopWidth:4}),r=function(t){n.write(t)},e=function(t){n.clear(),n.write(t),e=r},t.n=1,i.ws.addMsg(c.HK.shell_getting,function(t){e(t.context)});case 1:return t.n=2,i.ws.addMsg(c.HK.shell_copy,function(t){t.context&&(0,l.lW)(t.context),n.focus()});case 2:n.onData(function(){var t=h(p().m(function t(n){var e;return p().w(function(t){for(;;)switch(t.n){case 0:return(e=new c.hf(c.HK.shell_send)).context=n,t.n=1,i.ws.send(e);case 1:return t.a(2)}},t)}));return function(n){return t.apply(this,arguments)}}()),y(n);case 3:return t.a(2)}},t)}));return function(){return t.apply(this,arguments)}}(),E=function(){null==d||d.dispose(),y(null)};(0,r.useEffect)(function(){return function(){E()}},[]),(0,r.useEffect)(function(){w.show?d?w.cmd&&i.ws.sendData(c.HK.shell_send,w.cmd):k():E()},[w]);return r.createElement(v,{show:w.show,file_shell_hidden:_,terminal:d,init:function(t,n){d.writeln("[38;2;29;153;243mopen shell...[0m ");var e=new c.hf(c.HK.shell_open),r=new f.n;r.init_path=w.path,r.rows=t,r.cols=n,r.http_token=localStorage.getItem("token"),e.context=r,i.ws.send(e),w.cmd&&i.ws.sendData(c.HK.shell_send,w.cmd)}})}}}]);
|