filecat 6.7.4 → 6.7.6

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 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
- # ![](./src/web/meta/resources/img/logo-70.png) FileCat
7
+ <p align="center">
8
+ <i>一款自部署的 Web 文件服务器与轻量级服务器管理工具</i>
9
+ </p>
3
10
 
4
- <p align="left">
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
- [English Doc](./doc/EN_README.md)
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
- FileCat 是一个web文件服务器、也是一个轻量级的服务器管理工具。部署在服务器上后,即可浏览服务器上的文件,支持多种文件格式在线浏览(图片、视频、绘图、Markdown等)
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
- 在文件管理的基础上,filecat集成了很多服务器运维与管理的功能,让你同时拥有一个轻量级的服务器管理工具,这些功能能够帮助用户更方便的访问和操作服务器上的文件
90
+ ## Demo
37
91
 
92
+ 在线体验地址:**[http://demo.filecat.xiaobaidadada.fun/](http://demo.filecat.xiaobaidadada.fun/)**
38
93
 
39
- ## 部分功能截图
40
- ### 文件列表
41
- ![](./doc/文件列表.png)
42
- ### 强大的AI Agent能力(需要自己配置大模型的api)
43
- ![](./doc/AI能力.png)
44
- ### 内网穿透
45
- ![](./doc/内网穿透.png)
46
- ### 系统信息看板
47
- ![](./doc/系统信息看板.png)
94
+ 账号密码: `demo`/`demo`或者 `test`/`test`
48
95
 
49
- 除了以上功能之外,还支持一些可能会对你有帮助的功能,任意大小的文本日志文件秒开,windows远程桌面,图片简单编辑,CI/CD工作流,excalidraw绘图 ...
96
+ > Demo 服务器由 [野草云](https://my.yecaoyun.com/aff.php?aff=7185) 赞助提供
50
97
 
51
- ## Demo
52
- http://demo.filecat.xiaobaidadada.fun/
98
+ ---
53
99
 
54
- username/password: demo/demo
55
- 中文账号 demo-zh/demo
100
+ ## 安装方式
56
101
 
57
- demo服务器由[ 野草云 ](https://my.yecaoyun.com/aff.php?aff=7185)赞助提供
58
- ## 安装方式
59
- 小的bug修复与功能更新,只会在npm上实时发布同步
102
+ > 小版本 bug 修复与功能更新仅在 npm 上实时发布同步。
60
103
 
61
- ### 1. Npm
104
+ ### 1. NPM 安装(推荐)
62
105
 
106
+ ```bash
107
+ npm install -g filecat
108
+ ```
63
109
 
64
- `npm install -g filecat `
110
+ 对于 Linux 系统,安装后可以选择使用 `pm2` 保活,或执行 `filecat --install` 注册到 systemd。
65
111
 
66
- 对于Linux系统,安装完以后,你可选择使用pm2来保活,或者使用 `filecat --install`来注册到systemd
112
+ ### 2. Linux 一键脚本
67
113
 
68
- ### 2. Linux curl
114
+ ```bash
115
+ curl -o install.sh https://filecat.xiaobaidadada.fun/files/linux-install.sh && bash install.sh
116
+ ```
69
117
 
70
- `curl -o install.sh https://filecat.xiaobaidadada.fun/files/linux-install.sh && bash install.sh`
118
+ 自动下载二进制包并执行安装,按提示输入参数即可。
71
119
 
72
- 在linux系统下可以执行该命令,将自动下载二进制包并执行安装程序,按照提示输入参数即可。
120
+ ### 3. 二进制包
73
121
 
74
- ### 3. 二进制
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
- ### 5. Git Clone
81
- `git clone https://github.com/xiaobaidadada/filecat.git`
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
- `npm install`
133
+ ### 5. 源码编译
84
134
 
85
- `npm run dev` or `npm run build && node dist/main.js`
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
- **默认账号/密码**: admin/admin
146
+ ## 快速运行
92
147
 
93
- 更多参数可以使用 `filecat --help` 查看
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
- ## qq群
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
- | 软件名称 | ![](./src/web/meta/resources/img/logo-70.png) [FileCat](https://github.com/xiaobaidadada/filecat) | <img width="48" src="https://github.com/user-attachments/assets/c40b22c9-33da-47b7-bc4c-ce69bb5cc174" > [Quantum](https://github.com/gtsteffaniak/filebrowser) | <img width="48" src="https://raw.githubusercontent.com/filebrowser/filebrowser/master/branding/banner.png" > [Filebrowser](https://github.com/filebrowser/filebrowser) |
110
- |--------------|---------|--|-------------------------------------------------------------------------------------------------------------------------|
111
- | 文件系统支持 | ✅ | ✅ | ✅ |
112
- | Linux | ✅ | ✅ | ✅ |
113
- | Windows | ✅ | | ✅ |
114
- | Mac | ✅ | ✅| ✅ |
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. 请将PR先提交到dev分支
138
- 2. 功能性提交请在qq群先沟通一下
181
+ 1. PR 请先提交到 `dev` 分支
182
+ 2. 功能性提交请在 QQ 群中提前沟通
183
+
184
+ ---
185
+
186
+ ## 感谢
187
+
188
+ 以下项目为 FileCat 提供了灵感或基础:
139
189
 
140
- ## Thanks
141
- 以下项目为 FileCat 提供了灵感或基础
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
- - [filebrowser](https://github.com/filebrowser/filebrowser)
144
- - [MeshCentral](https://github.com/Ylianst/MeshCentral)
145
- - [mstsc](https://github.com/citronneur/mstsc.js)
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("图片生成")},{value:"embeddings",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>"}}]);
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("open shell... ");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)}})}}}]);