mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-19 22:52:08 +08:00
feat: update licensing terms and UI components
- Revised the licensing agreement to introduce a User-Segmented Dual Licensing model, detailing conditions for individual and organizational use. - Enhanced UI components to display a specific empty state image in various popups and pages. - Adjusted styles in MiniAppIconsManager and MiniAppSettings for improved layout and appearance. - Updated default web search provider to 'local-bing' and modified font size in ProviderOAuth description for better readability. - Changed window style setting from 'transparent' to 'opaque' for a more consistent user experience.
This commit is contained in:
parent
c288b4a8d0
commit
ea89a37b1d
@ -14,35 +14,76 @@
|
|||||||
<div class="mb-12">
|
<div class="mb-12">
|
||||||
<h1 class="text-3xl font-bold mb-8 text-gray-900">许可协议</h1>
|
<h1 class="text-3xl font-bold mb-8 text-gray-900">许可协议</h1>
|
||||||
|
|
||||||
<p class="mb-6 text-gray-700">采用 Apache License 2.0 修改版许可,并附加以下条件:</p>
|
<p class="mb-6 text-gray-700">本项目采用<strong>区分用户的双重许可 (User-Segmented Dual Licensing)</strong> 模式。</p>
|
||||||
|
|
||||||
<section class="mb-8">
|
<section class="mb-8">
|
||||||
<h2 class="text-xl font-semibold mb-4 text-gray-900">一. 商用许可</h2>
|
<h2 class="text-xl font-semibold mb-4 text-gray-900">核心原则</h2>
|
||||||
<p class="mb-4 text-gray-700">在以下任何一种情况下,您需要联系我们并获得明确的书面商业授权后,方可继续使用 Cherry Studio 材料:</p>
|
<ul class="list-disc pl-6 space-y-2 text-gray-700">
|
||||||
<ol class="list-decimal pl-6 space-y-2 text-gray-700">
|
<li><strong>个人用户 和 10人及以下企业/组织:</strong> 默认适用 <strong>GNU Affero 通用公共许可证 v3.0 (AGPLv3)</strong>。</li>
|
||||||
<li><strong>修改与衍生</strong>: 您对 Cherry Studio 材料进行修改或基于其进行衍生开发(包括但不限于修改应用名称、Logo、代码、功能、界面,数据等)。</li>
|
<li><strong>超过10人的企业/组织:</strong> <strong>必须</strong> 获取 <strong>商业许可证 (Commercial License)</strong>。</li>
|
||||||
<li><strong>企业服务</strong>: 在您的企业内部,或为企业客户提供基于 Cherry Studio 的服务,且该服务支持 10 人及以上累计用户使用。</li>
|
</ul>
|
||||||
<li><strong>硬件捆绑销售</strong>: 您将 Cherry Studio 预装或集成到硬件设备或产品中进行捆绑销售。</li>
|
|
||||||
<li><strong>政府或教育机构大规模采购</strong>: 您的使用场景属于政府或教育机构的大规模采购项目,特别是涉及安全、数据隐私等敏感需求时。</li>
|
|
||||||
<li><strong>面向公众的公有云服务</strong>:基于 Cherry Studio,提供面向公众的公有云服务。</li>
|
|
||||||
</ol>
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="mb-8">
|
<section class="mb-8">
|
||||||
<h2 class="text-xl font-semibold mb-4 text-gray-900">二. 贡献者协议</h2>
|
<h2 class="text-xl font-semibold mb-4 text-gray-900">定义:"10人及以下"</h2>
|
||||||
<p class="mb-4 text-gray-700">作为 Cherry Studio 的贡献者,您应当同意以下条款:</p>
|
<p class="text-gray-700">
|
||||||
<ol class="list-decimal pl-6 space-y-2 text-gray-700">
|
指在您的组织(包括公司、非营利组织、政府机构、教育机构等任何实体)中,能够访问、使用或以任何方式直接或间接受益于本软件(Cherry
|
||||||
<li><strong>许可调整</strong>:生产者有权根据需要对开源协议进行调整,使其更加严格或宽松。</li>
|
Studio)功能的个人总数不超过10人。这包括但不限于开发者、测试人员、运营人员、最终用户、通过集成系统间接使用者等。
|
||||||
<li><strong>商业用途</strong>:您贡献的代码可能会被用于商业用途,包括但不限于云业务运营。</li>
|
</p>
|
||||||
</ol>
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="mb-8">
|
<section class="mb-8">
|
||||||
<h2 class="text-xl font-semibold mb-4 text-gray-900">三. 其他条款</h2>
|
<h2 class="text-xl font-semibold mb-4 text-gray-900">1. 开源许可证 (Open Source License): AGPLv3 - 适用于个人及10人及以下组织
|
||||||
<ol class="list-decimal pl-6 space-y-2 text-gray-700">
|
</h2>
|
||||||
<li>本协议条款的解释权归 Cherry Studio 开发者所有。</li>
|
<ul class="list-disc pl-6 space-y-2 text-gray-700">
|
||||||
<li>本协议可能根据实际情况进行更新,更新时将通过本软件通知用户。</li>
|
<li>如果您是个人用户,或者您的组织满足上述"10人及以下"的定义,您可以在 <strong>AGPLv3</strong> 的条款下自由使用、修改和分发 Cherry Studio。AGPLv3 的完整文本可以访问
|
||||||
</ol>
|
<a href="https://www.gnu.org/licenses/agpl-3.0.html"
|
||||||
|
class="text-blue-600 hover:underline">https://www.gnu.org/licenses/agpl-3.0.html</a> 获取。
|
||||||
|
</li>
|
||||||
|
<li><strong>核心义务:</strong> AGPLv3 的一个关键要求是,如果您修改了 Cherry Studio 并通过网络提供服务,或者分发了修改后的版本,您必须以 AGPLv3
|
||||||
|
许可证向接收者提供相应的<strong>完整源代码</strong>。即使您符合"10人及以下"的标准,如果您希望避免此源代码公开义务,您也需要考虑获取商业许可证(见下文)。</li>
|
||||||
|
<li>使用前请务必仔细阅读并理解 AGPLv3 的所有条款。</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="mb-8">
|
||||||
|
<h2 class="text-xl font-semibold mb-4 text-gray-900">2. 商业许可证 (Commercial License) - 适用于超过10人的组织,或希望规避 AGPLv3
|
||||||
|
义务的用户</h2>
|
||||||
|
<ul class="list-disc pl-6 space-y-2 text-gray-700">
|
||||||
|
<li><strong>强制要求:</strong>
|
||||||
|
如果您的组织<strong>不</strong>满足上述"10人及以下"的定义(即有11人或更多人可以访问、使用或受益于本软件),您<strong>必须</strong>联系我们获取并签署一份商业许可证才能使用
|
||||||
|
Cherry Studio。</li>
|
||||||
|
<li><strong>自愿选择:</strong> 即使您的组织满足"10人及以下"的条件,但如果您的使用场景<strong>无法满足 AGPLv3
|
||||||
|
的条款要求</strong>(特别是关于<strong>源代码公开</strong>的义务),或者您需要 AGPLv3 <strong>未提供</strong>的特定商业条款(如保证、赔偿、无 Copyleft
|
||||||
|
限制等),您也<strong>必须</strong>联系我们获取并签署一份商业许可证。</li>
|
||||||
|
<li><strong>需要商业许可证的常见情况包括(但不限于):</strong>
|
||||||
|
<ul class="list-disc pl-6 mt-2 space-y-1">
|
||||||
|
<li>您的组织规模超过10人。</li>
|
||||||
|
<li>(无论组织规模)您希望分发修改过的 Cherry Studio 版本,但<strong>不希望</strong>根据 AGPLv3 公开您修改部分的源代码。</li>
|
||||||
|
<li>(无论组织规模)您希望基于修改过的 Cherry Studio 提供网络服务(SaaS),但<strong>不希望</strong>根据 AGPLv3 向服务使用者提供修改后的源代码。</li>
|
||||||
|
<li>(无论组织规模)您的公司政策、客户合同或项目要求不允许使用 AGPLv3 许可的软件,或要求闭源分发及保密。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>获取商业许可:</strong> 请通过邮箱 <a href="mailto:bd@cherry-ai.com"
|
||||||
|
class="text-blue-600 hover:underline">bd@cherry-ai.com</a> 联系 Cherry Studio 开发团队洽谈商业授权事宜。</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="mb-8">
|
||||||
|
<h2 class="text-xl font-semibold mb-4 text-gray-900">3. 贡献 (Contributions)</h2>
|
||||||
|
<ul class="list-disc pl-6 space-y-2 text-gray-700">
|
||||||
|
<li>我们欢迎社区对 Cherry Studio 的贡献。所有向本项目提交的贡献都将被视为在 <strong>AGPLv3</strong> 许可证下提供。</li>
|
||||||
|
<li>通过向本项目提交贡献(例如通过 Pull Request),即表示您同意您的代码以 AGPLv3 许可证授权给本项目及所有后续使用者(无论这些使用者最终遵循 AGPLv3 还是商业许可)。</li>
|
||||||
|
<li>您也理解并同意,您的贡献可能会被包含在根据商业许可证分发的 Cherry Studio 版本中。</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="mb-8">
|
||||||
|
<h2 class="text-xl font-semibold mb-4 text-gray-900">4. 其他条款 (Other Terms)</h2>
|
||||||
|
<ul class="list-disc pl-6 space-y-2 text-gray-700">
|
||||||
|
<li>关于商业许可证的具体条款和条件,以双方签署的正式商业许可协议为准。</li>
|
||||||
|
<li>项目维护者保留根据需要更新本许可政策(包括用户规模定义和阈值)的权利。相关更新将通过项目官方渠道(如代码仓库、官方网站)进行通知。</li>
|
||||||
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -50,58 +91,107 @@
|
|||||||
|
|
||||||
<!-- English Version -->
|
<!-- English Version -->
|
||||||
<div>
|
<div>
|
||||||
<h1 class="text-3xl font-bold mb-8 text-gray-900">License Agreement</h1>
|
<h1 class="text-3xl font-bold mb-8 text-gray-900">Licensing</h1>
|
||||||
|
|
||||||
<p class="mb-6 text-gray-700">This software is licensed under a modified version of the Apache License 2.0, with
|
<p class="mb-6 text-gray-700">This project employs a <strong>User-Segmented Dual Licensing</strong> model.</p>
|
||||||
the following additional conditions.</p>
|
|
||||||
|
|
||||||
<section class="mb-8">
|
<section class="mb-8">
|
||||||
<h2 class="text-xl font-semibold mb-4 text-gray-900">I. Commercial Licensing</h2>
|
<h2 class="text-xl font-semibold mb-4 text-gray-900">Core Principle</h2>
|
||||||
<p class="mb-4 text-gray-700">You must contact us and obtain explicit written commercial authorization to
|
<ul class="list-disc pl-6 space-y-2 text-gray-700">
|
||||||
continue using Cherry Studio materials under any of the following circumstances:</p>
|
<li><strong>Individual Users and Organizations with 10 or Fewer Individuals:</strong> Governed by default
|
||||||
<ol class="list-decimal pl-6 space-y-2 text-gray-700">
|
under the <strong>GNU Affero General Public License v3.0 (AGPLv3)</strong>.</li>
|
||||||
<li><strong>Modifications and Derivatives:</strong> You modify Cherry Studio materials or perform derivative
|
<li><strong>Organizations with More Than 10 Individuals:</strong> <strong>Must</strong> obtain a
|
||||||
development based on them (including but not limited to changing the application's name, logo, code,
|
<strong>Commercial License</strong>.
|
||||||
functionality, user interface, data, etc.).</li>
|
</li>
|
||||||
<li><strong>Enterprise Services:</strong> You use Cherry Studio internally within your enterprise, or you
|
</ul>
|
||||||
provide Cherry Studio-based services for enterprise customers, and such services support cumulative usage by
|
</section>
|
||||||
10 or more users.</li>
|
|
||||||
<li><strong>Hardware Bundling and Sales:</strong> You pre-install or integrate Cherry Studio into hardware
|
<section class="mb-8">
|
||||||
devices or products for bundled sale.</li>
|
<h2 class="text-xl font-semibold mb-4 text-gray-900">Definition: "10 or Fewer Individuals"</h2>
|
||||||
<li><strong>Large-scale Procurement by Government or Educational Institutions:</strong> Your usage scenario
|
<p class="text-gray-700">
|
||||||
involves large-scale procurement projects by government or educational institutions, especially in cases
|
Refers to any organization (including companies, non-profits, government agencies, educational institutions,
|
||||||
involving sensitive requirements such as security and data privacy.</li>
|
etc.) where the total number of individuals who can access, use, or in any way directly or indirectly benefit
|
||||||
<li><strong>Public Cloud Services:</strong> You provide public cloud-based product services utilizing Cherry
|
from the functionality of this software (Cherry Studio) does not exceed 10. This includes, but is not limited
|
||||||
|
to, developers, testers, operations staff, end-users, and indirect users via integrated systems.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="mb-8">
|
||||||
|
<h2 class="text-xl font-semibold mb-4 text-gray-900">1. Open Source License: AGPLv3 - For Individuals and
|
||||||
|
Organizations of 10 or Fewer</h2>
|
||||||
|
<ul class="list-disc pl-6 space-y-2 text-gray-700">
|
||||||
|
<li>If you are an individual user, or if your organization meets the "10 or Fewer Individuals" definition
|
||||||
|
above, you are free to use, modify, and distribute Cherry Studio under the terms of the
|
||||||
|
<strong>AGPLv3</strong>. The full text of the AGPLv3 can be found at <a
|
||||||
|
href="https://www.gnu.org/licenses/agpl-3.0.html"
|
||||||
|
class="text-blue-600 hover:underline">https://www.gnu.org/licenses/agpl-3.0.html</a>.
|
||||||
|
</li>
|
||||||
|
<li><strong>Core Obligation:</strong> A key requirement of the AGPLv3 is that if you modify Cherry Studio and
|
||||||
|
make it available over a network, or distribute the modified version, you must provide the <strong>complete
|
||||||
|
corresponding source code</strong> under the AGPLv3 license to the recipients. Even if you qualify under
|
||||||
|
the "10 or Fewer Individuals" rule, if you wish to avoid this source code disclosure obligation, you will
|
||||||
|
need to obtain a Commercial License (see below).</li>
|
||||||
|
<li>Please read and understand the full terms of the AGPLv3 carefully before use.</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="mb-8">
|
||||||
|
<h2 class="text-xl font-semibold mb-4 text-gray-900">2. Commercial License - For Organizations with More Than 10
|
||||||
|
Individuals, or Users Needing to Avoid AGPLv3 Obligations</h2>
|
||||||
|
<ul class="list-disc pl-6 space-y-2 text-gray-700">
|
||||||
|
<li><strong>Mandatory Requirement:</strong> If your organization does <strong>not</strong> meet the "10 or
|
||||||
|
Fewer Individuals" definition above (i.e., 11 or more individuals can access, use, or benefit from the
|
||||||
|
software), you <strong>must</strong> contact us to obtain and execute a Commercial License to use Cherry
|
||||||
Studio.</li>
|
Studio.</li>
|
||||||
</ol>
|
<li><strong>Voluntary Option:</strong> Even if your organization meets the "10 or Fewer Individuals"
|
||||||
|
condition, if your intended use case <strong>cannot comply with the terms of the AGPLv3</strong>
|
||||||
|
(particularly the obligations regarding <strong>source code disclosure</strong>), or if you require specific
|
||||||
|
commercial terms <strong>not offered</strong> by the AGPLv3 (such as warranties, indemnities, or freedom
|
||||||
|
from copyleft restrictions), you also <strong>must</strong> contact us to obtain and execute a Commercial
|
||||||
|
License.</li>
|
||||||
|
<li><strong>Common scenarios requiring a Commercial License include (but are not limited to):</strong>
|
||||||
|
<ul class="list-disc pl-6 mt-2 space-y-1">
|
||||||
|
<li>Your organization has more than 10 individuals who can access, use, or benefit from the software.</li>
|
||||||
|
<li>(Regardless of organization size) You wish to distribute a modified version of Cherry Studio but
|
||||||
|
<strong>do not want</strong> to disclose the source code of your modifications under AGPLv3.
|
||||||
|
</li>
|
||||||
|
<li>(Regardless of organization size) You wish to provide a network service (SaaS) based on a modified
|
||||||
|
version of Cherry Studio but <strong>do not want</strong> to provide the modified source code to users
|
||||||
|
of the service under AGPLv3.</li>
|
||||||
|
<li>(Regardless of organization size) Your corporate policies, client contracts, or project requirements
|
||||||
|
prohibit the use of AGPLv3-licensed software or mandate closed-source distribution and confidentiality.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>Obtaining a Commercial License:</strong> Please contact the Cherry Studio development team via
|
||||||
|
email at <a href="mailto:bd@cherry-ai.com" class="text-blue-600 hover:underline">bd@cherry-ai.com</a> to
|
||||||
|
discuss commercial licensing options.</li>
|
||||||
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="mb-8">
|
<section class="mb-8">
|
||||||
<h2 class="text-xl font-semibold mb-4 text-gray-900">II. Contributor Agreement</h2>
|
<h2 class="text-xl font-semibold mb-4 text-gray-900">3. Contributions</h2>
|
||||||
<p class="mb-4 text-gray-700">As a contributor to Cherry Studio, you must agree to the following terms:</p>
|
<ul class="list-disc pl-6 space-y-2 text-gray-700">
|
||||||
<ol class="list-decimal pl-6 space-y-2 text-gray-700">
|
<li>We welcome community contributions to Cherry Studio. All contributions submitted to this project are
|
||||||
<li><strong>License Adjustments:</strong> The producer reserves the right to adjust the open-source license as
|
considered to be offered under the <strong>AGPLv3</strong> license.</li>
|
||||||
necessary, making it more strict or permissive.</li>
|
<li>By submitting a contribution to this project (e.g., via a Pull Request), you agree to license your code
|
||||||
<li><strong>Commercial Usage:</strong> Your contributed code may be used commercially, including but not
|
under the AGPLv3 to the project and all its downstream users (regardless of whether those users ultimately
|
||||||
limited to cloud business operations.</li>
|
operate under AGPLv3 or a Commercial License).</li>
|
||||||
</ol>
|
<li>You also understand and agree that your contribution may be included in distributions of Cherry Studio
|
||||||
|
offered under our commercial license.</li>
|
||||||
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="mb-8">
|
<section class="mb-8">
|
||||||
<h2 class="text-xl font-semibold mb-4 text-gray-900">III. Other Terms</h2>
|
<h2 class="text-xl font-semibold mb-4 text-gray-900">4. Other Terms</h2>
|
||||||
<ol class="list-decimal pl-6 space-y-2 text-gray-700">
|
<ul class="list-disc pl-6 space-y-2 text-gray-700">
|
||||||
<li>Cherry Studio developers reserve the right of final interpretation of these agreement terms.</li>
|
<li>The specific terms and conditions of the Commercial License are governed by the formal commercial license
|
||||||
<li>This agreement may be updated according to practical circumstances, and users will be notified of updates
|
agreement signed by both parties.</li>
|
||||||
through this software.</li>
|
<li>The project maintainers reserve the right to update this licensing policy (including the definition and
|
||||||
</ol>
|
threshold for user count) as needed. Updates will be communicated through official project channels (e.g.,
|
||||||
|
code repository, official website).</li>
|
||||||
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<p class="mt-8 text-gray-700">
|
|
||||||
Other than these specific conditions, all remaining rights and restrictions follow the Apache License 2.0. For
|
|
||||||
more detailed information regarding Apache License 2.0, please visit
|
|
||||||
<a href="http://www.apache.org/licenses/LICENSE-2.0"
|
|
||||||
class="text-blue-600 hover:underline">http://www.apache.org/licenses/LICENSE-2.0</a>.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@ -48,7 +48,7 @@ const MinAppsPopover: FC<Props> = ({ children }) => {
|
|||||||
))}
|
))}
|
||||||
{isEmpty(minapps) && (
|
{isEmpty(minapps) && (
|
||||||
<Center>
|
<Center>
|
||||||
<Empty />
|
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
|
||||||
</Center>
|
</Center>
|
||||||
)}
|
)}
|
||||||
</AppsContainer>
|
</AppsContainer>
|
||||||
|
|||||||
@ -183,7 +183,7 @@ const FilesPage: FC = () => {
|
|||||||
{dataSource && dataSource?.length > 0 ? (
|
{dataSource && dataSource?.length > 0 ? (
|
||||||
<FileList id={fileType} list={dataSource} files={sortedFiles} />
|
<FileList id={fileType} list={dataSource} files={sortedFiles} />
|
||||||
) : (
|
) : (
|
||||||
<Empty />
|
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
|
||||||
)}
|
)}
|
||||||
</MainContent>
|
</MainContent>
|
||||||
</ContentContainer>
|
</ContentContainer>
|
||||||
|
|||||||
@ -54,7 +54,7 @@ const TopicMessages: FC<Props> = ({ topic, ...props }) => {
|
|||||||
<Divider style={{ margin: '8px auto 15px' }} variant="dashed" />
|
<Divider style={{ margin: '8px auto 15px' }} variant="dashed" />
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
{isEmpty && <Empty />}
|
{isEmpty && <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />}
|
||||||
{!isEmpty && (
|
{!isEmpty && (
|
||||||
<HStack justifyContent="center">
|
<HStack justifyContent="center">
|
||||||
<Button onClick={() => onContinueChat(topic)} icon={<MessageOutlined />}>
|
<Button onClick={() => onContinueChat(topic)} icon={<MessageOutlined />}>
|
||||||
|
|||||||
@ -32,6 +32,7 @@ const Mermaid: React.FC<Props> = ({ chart }) => {
|
|||||||
}
|
}
|
||||||
}, [chart, theme])
|
}, [chart, theme])
|
||||||
|
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
const renderMermaid = useCallback(debounce(renderMermaidBase, 1000), [renderMermaidBase])
|
const renderMermaid = useCallback(debounce(renderMermaidBase, 1000), [renderMermaidBase])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { getShikiInstance } from '@renderer/utils/shiki'
|
|||||||
import { Card } from 'antd'
|
import { Card } from 'antd'
|
||||||
import MarkdownIt from 'markdown-it'
|
import MarkdownIt from 'markdown-it'
|
||||||
import { npxFinder } from 'npx-scope-finder'
|
import { npxFinder } from 'npx-scope-finder'
|
||||||
import { useEffect, useRef, useState } from 'react'
|
import { useCallback, useEffect, useRef, useState } from 'react'
|
||||||
import styled from 'styled-components'
|
import styled from 'styled-components'
|
||||||
|
|
||||||
interface McpDescriptionProps {
|
interface McpDescriptionProps {
|
||||||
@ -22,18 +22,18 @@ const MCPDescription = ({ searchKey }: McpDescriptionProps) => {
|
|||||||
)
|
)
|
||||||
const { theme } = useTheme()
|
const { theme } = useTheme()
|
||||||
|
|
||||||
useEffect(() => {
|
const getMcpInfo = useCallback(async () => {
|
||||||
const sk = getShikiInstance(theme)
|
|
||||||
md.current.use(sk)
|
|
||||||
getMcpInfo()
|
|
||||||
}, [theme, searchKey])
|
|
||||||
|
|
||||||
const getMcpInfo = async () => {
|
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
const packages = await npxFinder(searchKey).finally(() => setLoading(false))
|
const packages = await npxFinder(searchKey).finally(() => setLoading(false))
|
||||||
const readme = packages[0]?.original?.readme ?? '暂无描述'
|
const readme = packages[0]?.original?.readme ?? '暂无描述'
|
||||||
setRenderedMarkdown(md.current.render(readme))
|
setRenderedMarkdown(md.current.render(readme))
|
||||||
}
|
}, [md, searchKey])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const sk = getShikiInstance(theme)
|
||||||
|
md.current.use(sk)
|
||||||
|
getMcpInfo()
|
||||||
|
}, [getMcpInfo, theme])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Section>
|
<Section>
|
||||||
|
|||||||
@ -112,7 +112,7 @@ const MiniAppIconsManager: FC<MiniAppManagerProps> = ({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<DragDropContext onDragEnd={onDragEnd}>
|
<DragDropContext onDragEnd={onDragEnd}>
|
||||||
<ProgramSection>
|
<ProgramSection style={{ background: 'transparent' }}>
|
||||||
{(['visible', 'disabled'] as const).map((listType) => (
|
{(['visible', 'disabled'] as const).map((listType) => (
|
||||||
<ProgramColumn key={listType}>
|
<ProgramColumn key={listType}>
|
||||||
<h4>{t(`settings.miniapps.${listType}`)}</h4>
|
<h4>{t(`settings.miniapps.${listType}`)}</h4>
|
||||||
|
|||||||
@ -93,7 +93,7 @@ const MiniAppSettings: FC = () => {
|
|||||||
/>
|
/>
|
||||||
</BorderedContainer>
|
</BorderedContainer>
|
||||||
<SettingDivider />
|
<SettingDivider />
|
||||||
<SettingRow>
|
<SettingRow style={{ height: 40, alignItems: 'center' }}>
|
||||||
<SettingLabelGroup>
|
<SettingLabelGroup>
|
||||||
<SettingRowTitle>{t('settings.miniapps.open_link_external.title')}</SettingRowTitle>
|
<SettingRowTitle>{t('settings.miniapps.open_link_external.title')}</SettingRowTitle>
|
||||||
</SettingLabelGroup>
|
</SettingLabelGroup>
|
||||||
|
|||||||
@ -77,7 +77,7 @@ const ProviderLogo = styled.img`
|
|||||||
`
|
`
|
||||||
|
|
||||||
const Description = styled.div`
|
const Description = styled.div`
|
||||||
font-size: 12px;
|
font-size: 11px;
|
||||||
color: var(--color-text-2);
|
color: var(--color-text-2);
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|||||||
@ -149,7 +149,7 @@ export const initialState: SettingsState = {
|
|||||||
trayOnClose: true,
|
trayOnClose: true,
|
||||||
tray: true,
|
tray: true,
|
||||||
theme: ThemeMode.auto,
|
theme: ThemeMode.auto,
|
||||||
windowStyle: 'transparent',
|
windowStyle: 'opaque',
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
topicPosition: 'left',
|
topicPosition: 'left',
|
||||||
showTopicTime: false,
|
showTopicTime: false,
|
||||||
|
|||||||
@ -26,7 +26,7 @@ export interface WebSearchState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const initialState: WebSearchState = {
|
const initialState: WebSearchState = {
|
||||||
defaultProvider: '',
|
defaultProvider: 'local-bing',
|
||||||
providers: [
|
providers: [
|
||||||
{
|
{
|
||||||
id: 'tavily',
|
id: 'tavily',
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user