filecat 5.70.0 → 5.70.1

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.
@@ -0,0 +1,2 @@
1
+ /*! For license information please see 306.d6adf8fa4e8a595609a8.js.LICENSE.txt */
2
+ "use strict";(self.webpackChunkfilecat=self.webpackChunkfilecat||[]).push([[306],{306(e,t,n){n.r(t),n.d(t,{default:()=>P});var r=n(6540),a=n(4284),c=n(4299),i=n(9844),o=n(7952),s=n(5997),u=n(8247),l=n(3430),f=n(505),m=n(2042),v=n(2389),d=n(5907),p=n(3459),h=n(4777),y=n(7361),g=n(7767),b=n(7444),E=n(6417),w=n(7690),_=n(3033);function k(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",a=n.toStringTag||"@@toStringTag";function c(n,r,a,c){var s=r&&r.prototype instanceof o?r:o,u=Object.create(s.prototype);return S(u,"_invoke",function(n,r,a){var c,o,s,u=0,l=a||[],f=!1,m={p:0,n:0,v:e,a:v,f:v.bind(e,4),d:function(t,n){return c=t,o=0,s=e,m.n=n,i}};function v(n,r){for(o=n,s=r,t=0;!f&&u&&!a&&t<l.length;t++){var a,c=l[t],v=m.p,d=c[2];n>3?(a=d===r)&&(s=c[(o=c[4])?5:(o=3,3)],c[4]=c[5]=e):c[0]<=v&&((a=n<2&&v<c[1])?(o=0,m.v=r,m.n=c[1]):v<d&&(a=n<3||c[0]>r||r>d)&&(c[4]=n,c[5]=r,m.n=d,o=0))}if(a||n>1)return i;throw f=!0,r}return function(a,l,d){if(u>1)throw TypeError("Generator is already running");for(f&&1===l&&v(l,d),o=l,s=d;(t=o<2?e:s)||!f;){c||(o?o<3?(o>1&&(m.n=-1),v(o,s)):m.n=s:m.v=s);try{if(u=2,c){if(o||(a="next"),t=c[a]){if(!(t=t.call(c,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,o<2&&(o=0)}else 1===o&&(t=c.return)&&t.call(c),o<2&&(s=TypeError("The iterator does not provide a '"+a+"' method"),o=1);c=e}else if((t=(f=m.n<0)?s:n.call(r,m))!==i)break}catch(t){c=e,o=1,s=t}finally{u=1}}return{value:t,done:f}}}(n,a,c),!0),u}var i={};function o(){}function s(){}function u(){}t=Object.getPrototypeOf;var l=[][r]?t(t([][r]())):(S(t={},r,function(){return this}),t),f=u.prototype=o.prototype=Object.create(l);function m(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,S(e,a,"GeneratorFunction")),e.prototype=Object.create(f),e}return s.prototype=u,S(f,"constructor",u),S(u,"constructor",s),s.displayName="GeneratorFunction",S(u,a,"GeneratorFunction"),S(f),S(f,a,"Generator"),S(f,r,function(){return this}),S(f,"toString",function(){return"[object Generator]"}),(k=function(){return{w:c,m}})()}function S(e,t,n,r){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}S=function(e,t,n,r){function c(t,n){S(e,t,function(e){return this._invoke(t,n,e)})}t?a?a(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(c("next",0),c("throw",1),c("return",2))},S(e,t,n,r)}function N(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=O(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}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 c,i=!0,o=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){o=!0,c=e},f:function(){try{i||null==n.return||n.return()}finally{if(o)throw c}}}}function x(e,t,n,r,a,c,i){try{var o=e[c](i),s=o.value}catch(e){return void n(e)}o.done?t(s):Promise.resolve(s).then(r,a)}function j(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var c=e.apply(t,n);function i(e){x(c,r,a,i,o,"next",e)}function o(e){x(c,r,a,i,o,"throw",e)}i(void 0)})}}function A(e){return function(e){if(Array.isArray(e))return T(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||O(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function C(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,c,i,o=[],s=!0,u=!1;try{if(c=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=c.call(n)).done)&&(o.push(r.value),o.length!==t);s=!0);}catch(e){u=!0,a=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return o}}(e,t)||O(e,t)||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 O(e,t){if(e){if("string"==typeof e)return T(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?T(e,t):void 0}}function T(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function D(e){var t=e.onDelete,n=e.onCopy,a=(0,v.Bd)().t;return r.createElement("div",{className:"message-actions"},r.createElement("button",{onClick:t},a("删除")),r.createElement("button",{onClick:n},a("复制")))}function I(e){var t=e.attachments,n=void 0===t?[]:t;return n.length?r.createElement("div",{className:"chat-message-attachments"},n.map(function(e,t){return r.createElement("div",{key:"".concat(e.name,"_").concat(t),className:"chat-message-attachment"},r.createElement("i",{className:"material-icons"},"attach_file"),r.createElement("span",null,e.name),r.createElement("small",null,e.size," B"))})):null}function V(e){var t,n;return null!==(t=e.type)&&void 0!==t&&t.startsWith("image/")?"image":null!==(n=e.type)&&void 0!==n&&n.startsWith("text/")||/\.(md|txt|json|js|jsx|ts|tsx|css|html?|xml|ya?ml|py|java|go|rs|c|cpp|h|hpp|sh|bat|cmd|ini|toml|csv|log|sql|env|gitignore|dockerfile)$/i.test(e.name)?"text":"binary"}function F(e){return e.text()}function G(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).filter(function(e){return"user"===e.role||"assistant"===e.role}).map(function(e,t){var n;return{id:Date.now()+t,sender:"assistant"===e.role?"bot":"user",text:e.content,attachments:null!==(n=e.attachments)&&void 0!==n?n:[]}})}function L(e){return e.map(function(e){var t;return{role:"bot"===e.sender?"assistant":"user",content:e.text,attachments:null!==(t=e.attachments)&&void 0!==t?t:[]}})}function P(){var e=C((0,r.useState)([]),2),t=e[0],n=e[1],S=C((0,r.useState)([]),2),x=S[0],O=S[1],T=C((0,r.useState)(""),2),P=T[0],R=T[1],q=C((0,b.L4)(E.AG.ai_session_collapsed),2),H=q[0],M=q[1],W=C((0,r.useState)([]),2),z=W[0],B=W[1],J=(0,v.Bd)().t,K=(0,r.useRef)(null),$=C((0,b.L4)(E.AG.prompt_card),2),U=($[0],$[1]),X=(0,r.useRef)((0,i.sg)(function(e){n(e),se.current&&le(!1)},50)).current,Z=C((0,r.useState)(!1),2),Q=Z[0],Y=Z[1],ee=(0,u.MH)().check_user_auth,te=C((0,r.useState)(""),2),ne=te[0],re=te[1],ae=(0,r.useRef)(null),ce=(0,r.useRef)(null),ie=(0,d.y)(),oe=(0,g.Zp)(),se=(0,r.useRef)(!0),ue=(0,r.useRef)(new h.qq),le=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=ce.current;t&&t.scrollTo({top:t.scrollHeight,behavior:e?"smooth":"auto"})},fe=function(e){var t=Array.from(null!=e?e:[]).filter(Boolean);t.length&&B(function(e){return[].concat(A(e),A(t))})},me=function(){var e=j(k().m(function e(t){var n,r,a,c,i,o,s,u,l;return k().w(function(e){for(;;)switch(e.p=e.n){case 0:n=[],r=N(t),e.p=1,r.s();case 2:if((a=r.n()).done){e.n=10;break}if(c=a.value,i=V(c),o="","text"!==i){e.n=7;break}return e.p=3,e.n=4,F(c);case 4:s=e.v,u=12e4,o=s.length>u?"".concat(s.slice(0,u),"\n\n[内容已截断,原始长度 ").concat(s.length," 字符]"):s,e.n=6;break;case 5:e.p=5,e.v,o="[文本读取失败]";case 6:e.n=8;break;case 7:o="image"===i?"[图片文件: ".concat(c.name,"]"):"[二进制文件: ".concat(c.name,"]");case 8:n.push({name:c.name,mime_type:c.type,size:c.size,kind:i,content:o});case 9:e.n=2;break;case 10:e.n=12;break;case 11:e.p=11,l=e.v,r.e(l);case 12:return e.p=12,r.f(),e.f(12);case 13:return e.a(2,n)}},e,null,[[3,5],[1,11,12,13]])}));return function(t){return e.apply(this,arguments)}}(),ve=function(){var e=j(k().m(function e(t){var r,c,i,o,s,u,l;return k().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,a.jV.get("sessions");case 1:if((s=e.v).code===p.m.Success){e.n=2;break}return e.a(2);case 2:if(u=null!==(r=s.data)&&void 0!==r?r:[],O(u),!(l=null===t?null!==(c=null===(i=u[0])||void 0===i?void 0:i.id)&&void 0!==c?c:"":t||P||(null===(o=u[0])||void 0===o?void 0:o.id)||"")){e.n=4;break}return e.n=3,pe(l);case 3:e.n=5;break;case 4:n([]),R("");case 5:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}(),de=function(){var e=j(k().m(function e(){var t,n;return k().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,a.jV.get("sessions");case 1:(t=e.v).code===p.m.Success&&O(null!==(n=t.data)&&void 0!==n?n:[]);case 2:return e.a(2)}},e)}));return function(){return e.apply(this,arguments)}}(),pe=function(){var e=j(k().m(function e(t){var r,c,i,o=arguments;return k().w(function(e){for(;;)switch(e.n){case 0:return r=o.length>1&&void 0!==o[1]&&o[1],e.n=1,a.jV.post("session/get",{session_id:t});case 1:if((c=e.v).code===p.m.Success&&c.data){e.n=2;break}return e.a(2);case 2:i=c.data,R(i.id),n(G(i.messages)),r&&M(!1),requestAnimationFrame(function(){return le(!1)});case 3:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}(),he=function(){var e=j(k().m(function e(){var t,r;return k().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,a.jV.post("session",{title:"新会话"});case 1:if((t=e.v).code===p.m.Success){e.n=2;break}return e.a(2);case 2:return r=t.data,R(r.id),n([]),M(!1),e.n=3,ve(r.id);case 3:return e.a(2)}},e)}));return function(){return e.apply(this,arguments)}}(),ye=function(){var e=j(k().m(function e(){var t;return k().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,a.XO.get("ai_agent_setting/env");case 1:return(t=e.v).code===p.m.Success&&(ue.current=t.data),e.n=2,ve();case 2:return e.a(2)}},e)}));return function(){return e.apply(this,arguments)}}();(0,r.useEffect)(function(){ye(),requestAnimationFrame(function(){le(!1)})},[]),(0,r.useEffect)(function(){var e=ce.current;if(e){var t=function(){se.current=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:120,n=e.scrollTop;return e.scrollHeight-(n+e.clientHeight)<t}(e)};return e.addEventListener("scroll",t),function(){return e.removeEventListener("scroll",t)}}},[]),(0,r.useLayoutEffect)(function(){se.current&&le(!1)},[t]);var ge=function(e){var t;return[{content:e.text,role:"bot"===e.sender?"assistant":"user",attachments:null!==(t=e.attachments)&&void 0!==t?t:[]}]},be=function(){var e=j(k().m(function e(){var r,c,o,s,u,l,f,m,v,d;return k().w(function(e){for(;;)switch(e.n){case 0:if(r=ne.trim(),!Q&&(r||0!==z.length)){e.n=1;break}return e.a(2);case 1:if(c=P){e.n=4;break}return e.n=2,a.jV.post("session",{title:(r||(null===(o=z[0])||void 0===o?void 0:o.name)||"新会话").slice(0,28)});case 2:if((s=e.v).code===p.m.Success){e.n=3;break}return e.a(2);case 3:return u=s.data,c=u.id,R(c),e.n=4,ve(c);case 4:return e.n=5,me(z);case 5:l=e.v,f={id:Date.now(),sender:"user",text:r,attachments:l},m=[].concat(A(t),[f]),n(m),re(""),B([]),Y(!0),v={id:f.id+1,sender:"bot",text:"AI思考中..."},m.push(v),n(A(m)),d=!0,a.jV.sse_post("chat",{messages:ge(f),session_id:c},{onMessage:function(e){d&&(v.text="",d=!1);try{var t,n,r,a=JSON.parse(e),c="string"==typeof a?a:null!==(t=null==a||null===(n=a.choices)||void 0===n||null===(n=n[0])||void 0===n||null===(n=n.delta)||void 0===n?void 0:n.content)&&void 0!==t?t:null==a||null===(r=a.choices)||void 0===r||null===(r=r[0])||void 0===r||null===(r=r.message)||void 0===r?void 0:r.content;c&&(v.text+=c)}catch(t){try{v.text+=JSON.parse(e)}catch(t){v.text+=e}}X(A(m))},onDone:(0,i.nF)(j(k().m(function e(){return k().w(function(e){for(;;)switch(e.n){case 0:return Y(!1),e.n=1,de();case 1:le(!0);case 2:return e.a(2)}},e)})),100)});case 6:return e.a(2)}},e)}));return function(){return e.apply(this,arguments)}}(),Ee=function(){var e=j(k().m(function e(t){return k().w(function(e){for(;;)switch(e.n){case 0:(0,f.lW)(t),(0,m.LW)("复制成功");case 1:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}(),we=function(){var e=j(k().m(function e(t){var n,c,i;return k().w(function(e){for(;;)switch(e.p=e.n){case 0:return U({open:!0,title:J("字符消耗统计"),context_div:r.createElement("div",{className:"usage-stats-loading"},J("加载中...")),cancel:function(){return U({open:!1})}}),e.p=1,e.n=2,a.jV.post("session/usage_stats",{session_id:t});case 2:(n=e.v).code===p.m.Success&&n.data?(i=n.data,U({open:!0,title:J("字符消耗统计"),context_div:r.createElement("div",{className:"usage-stats-panel"},[{l:J("对话轮次"),v:(null!==(c=i.turns)&&void 0!==c?c:0).toString()},{l:J("AI输入字符"),v:_e(i.input_chars)},{l:J("AI输出字符"),v:_e(i.output_chars)}].map(function(e,t){return r.createElement("div",{key:t,className:"usage-stats-row"},r.createElement("span",{className:"usage-stats-label"},e.l),r.createElement("span",{className:"usage-stats-value"},e.v))}),r.createElement("div",{className:"usage-stats-row usage-stats-total"},r.createElement("span",{className:"usage-stats-label"},J("总计消耗")),r.createElement("span",{className:"usage-stats-value"},_e((i.input_chars||0)+(i.output_chars||0))))),cancel:function(){return U({open:!1})}})):U({open:!0,title:J("字符消耗统计"),context_div:r.createElement("div",{className:"usage-stats-empty"},J("暂无统计数据")),cancel:function(){return U({open:!1})}}),e.n=4;break;case 3:e.p=3,e.v,U({open:!0,title:J("字符消耗统计"),context_div:r.createElement("div",{className:"usage-stats-empty"},J("暂无统计数据")),cancel:function(){return U({open:!1})}});case 4:return e.a(2)}},e,null,[[1,3]])}));return function(t){return e.apply(this,arguments)}}(),_e=function(e){return null==e||e<0?"0":e.toLocaleString()};return r.createElement(r.Fragment,null,r.createElement(o.A,null,r.createElement(s.rA,{icon:"menu",title:J("会话"),onClick:function(){window.innerWidth<=736?M(!0):M(function(e){return!e})}}),r.createElement(s.rA,{icon:"add",title:J("新会话"),onClick:he}),r.createElement(s.rA,{icon:"delete_sweep",title:J("清空全部会话"),onClick:function(){var e;ie({sub_title:J("确认删除全部聊天会话吗?"),confirm_fun:(e=j(k().m(function e(){return k().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,a.jV.post("sessions/clear",{});case 1:return e.n=2,ye();case 2:return e.a(2)}},e)})),function(){return e.apply(this,arguments)})})}}),ee(l.oV.ai_agent_setting)&&r.createElement(s.rA,{icon:"settings",title:"ai setting",onClick:function(){oe("/".concat(y.o.ai_agent_setting_page))}})),r.createElement("div",{className:"chat-page chat-page-with-sessions"},H&&r.createElement("div",{className:"chat-session-overlay",onClick:function(){return M(!1)}}),r.createElement("aside",{className:"chat-session-list ".concat(H?"active":""," ").concat(H?"collapsed":"")},x.map(function(e){return r.createElement(r.Fragment,{key:e.id},r.createElement("button",{className:"chat-session-item ".concat(P===e.id?"active":""),onClick:function(){return pe(e.id,!1)},title:e.summary||e.long_term_memory||e.title},r.createElement("span",null,e.title||"新会话"),r.createElement("small",null,e.message_count),"cli"===e.source&&r.createElement("em",{className:"chat-session-source"},"CLI"),r.createElement(w.MenuSelect,{list:[{name:J("重命名"),click:function(){!function(e,t){var n,c=t;ie({confirm_fun:(n=j(k().m(function t(){return k().w(function(t){for(;;)switch(t.n){case 0:return t.n=1,a.jV.post("sessions/update/meta",{id:e,title:c});case 1:return t.n=2,ve(P);case 2:return t.a(2)}},t)})),function(){return n.apply(this,arguments)}),context_div:r.createElement("div",{className:"card-content"},r.createElement(_.Sm,{value:c,handleInputChange:function(e){return c=e}}))})}(e.id,e.title)}},{name:J("字符消耗统计"),click:function(){return we(e.id)}},{name:J("删除"),click:function(){return t=e.id,void ie({sub_title:"确认删除这个会话吗?",confirm_fun:(n=j(k().m(function e(){return k().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,a.jV.post("session/delete",{session_id:t});case 1:if(P!==t){e.n=3;break}return R(""),e.n=2,ve(null);case 2:e.n=4;break;case 3:return e.n=4,ve(P);case 4:return e.a(2)}},e)})),function(){return n.apply(this,arguments)})});var t,n}}]},r.createElement(s.In,{icon:"more_horiz"}))))})),r.createElement("section",{className:"chat-main"},0===(null==t?void 0:t.length)&&r.createElement("div",{className:"chat-header"},J("询问服务器的一切")),r.createElement("div",{className:"chat-messages",ref:ce},t.map(function(e){return r.createElement("div",{key:e.id,className:"chat-message ".concat(e.sender)},r.createElement(c.default,{context:e.text}),r.createElement(I,{attachments:e.attachments}),r.createElement(D,{onDelete:function(){return r=e.id,c=t.filter(function(e){return e.id!==r}),n(c),void(P&&a.jV.post("session/messages",{session_id:P,messages:L(c)}).catch(console.error));var r,c},onCopy:function(){return Ee(e.text)}}))}),r.createElement("div",{ref:ae})),r.createElement("div",{className:"chat-input-area",onDrop:function(e){var t,n=null===(t=e.dataTransfer)||void 0===t?void 0:t.files;n&&n.length>0&&(e.preventDefault(),fe(n))},onDragOver:function(e){var t;null!==(t=e.dataTransfer)&&void 0!==t&&null!==(t=t.types)&&void 0!==t&&t.includes("Files")&&e.preventDefault()}},r.createElement("input",{ref:K,type:"file",multiple:!0,style:{display:"none"},onChange:function(e){var t;null!==(t=e.target.files)&&void 0!==t&&t.length&&(fe(e.target.files),e.currentTarget.value="")}}),r.createElement("div",{className:"chat-input-shell"},z.length>0&&r.createElement("div",{className:"chat-attachment-strip"},z.map(function(e,t){return r.createElement("div",{key:"".concat(e.name,"_").concat(t),className:"chat-attachment-chip"},r.createElement("i",{className:"material-icons"},"attach_file"),r.createElement("span",{title:e.name},e.name),r.createElement("button",{type:"button",onClick:function(){return function(e){B(function(t){return t.filter(function(t,n){return n!==e})})}(t)}},r.createElement("i",{className:"material-icons"},"close")))})),r.createElement("textarea",{value:ne,onChange:function(e){var t=e.target;t.style.height="auto",t.style.height=Math.min(t.scrollHeight,200)+"px",re(t.value)},onPaste:function(e){var t,n=null===(t=e.clipboardData)||void 0===t?void 0:t.files;n&&n.length>0&&(e.preventDefault(),fe(n))},onKeyDown:function(e){"Process"===e.key||e.nativeEvent.isComposing||"Enter"!==e.key||e.shiftKey||(e.preventDefault(),be())},placeholder:J("输入消息"),className:"chat-input"})),r.createElement(s.rA,{title:"添加文件",icon:"attach_file",onClick:function(){var e;null===(e=K.current)||void 0===e||e.click()}}),!1===Q&&r.createElement(s.Vi,{text:J("发送"),clickFun:be})))))}}}]);