feat: manually mirror opencoze's code from bytedance

Change-Id: I09a73aadda978ad9511264a756b2ce51f5761adf
This commit is contained in:
fanlv
2025-07-20 17:36:12 +08:00
commit 890153324f
14811 changed files with 1923430 additions and 0 deletions

View File

@@ -0,0 +1,68 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React, { type FC } from 'react';
import {
renderHook,
type WrapperComponent,
} from '@testing-library/react-hooks';
import { ToolGroupKey } from '@coze-agent-ide/tool-config';
import { useAbilityConfig } from '../../src/hooks/builtin/use-ability-config';
import {
AbilityAreaContextProvider,
type ToolEntryCommonProps,
ToolView,
ToolKey,
AbilityScope,
GroupingContainer,
} from '../../src';
vi.stubGlobal('IS_DEV_MODE', false);
type ITestComponentProps = ToolEntryCommonProps;
const TestComponent: FC<ITestComponentProps> = ({ title, toolKey }) => (
<div>
test{title} {toolKey}
</div>
);
describe('useAbilityConfig', () => {
test('useAbilityConfig', () => {
const wrapper: WrapperComponent<{ children }> = ({ children }) => (
<AbilityAreaContextProvider mode={0}>
{children}
<ToolView>
<GroupingContainer
toolGroupKey={ToolGroupKey.CHARACTER}
title="testGroup"
>
<TestComponent toolKey={ToolKey.ONBOARDING} title="demo" />
</GroupingContainer>
</ToolView>
</AbilityAreaContextProvider>
);
const { result } = renderHook(() => useAbilityConfig(), { wrapper });
expect(result.current).toEqual({
abilityKey: ToolKey.ONBOARDING,
scope: AbilityScope.TOOL,
});
});
});

View File

@@ -0,0 +1,153 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { ToolGroupKey, ToolKey } from '@coze-agent-ide/tool-config';
import {
createToolAreaStore,
type ToolAreaStore,
} from '../../src/store/tool-area';
let useToolAreaStore: ToolAreaStore;
vi.stubGlobal('IS_DEV_MODE', false);
beforeEach(() => {
const newToolAreaStore = createToolAreaStore();
useToolAreaStore = newToolAreaStore;
});
const testToolKeyConfig = {
toolGroupKey: ToolGroupKey.DIALOG,
toolKey: ToolKey.PLUGIN,
toolTitle: '工具1',
hasValidData: false,
};
const repeatTestToolKeyConfig = {
toolGroupKey: ToolGroupKey.CHARACTER,
toolKey: ToolKey.PLUGIN,
toolTitle: 'Repeat 工具1',
hasValidData: false,
};
const testToolGroup = {
toolGroupKey: ToolGroupKey.DIALOG,
groupTitle: '测试分组',
};
describe('useToolAreaStore', () => {
test('appendIntoRegisteredToolKeyConfigList add one', () => {
const { appendIntoRegisteredToolKeyConfigList } =
useToolAreaStore.getState();
appendIntoRegisteredToolKeyConfigList(testToolKeyConfig);
expect(
useToolAreaStore.getState().registeredToolKeyConfigList,
).toStrictEqual([testToolKeyConfig]);
});
test('appendIntoRegisteredToolKeyConfigList repeat filter', () => {
const { appendIntoRegisteredToolKeyConfigList } =
useToolAreaStore.getState();
appendIntoRegisteredToolKeyConfigList(testToolKeyConfig);
appendIntoRegisteredToolKeyConfigList(repeatTestToolKeyConfig);
expect(
useToolAreaStore.getState().registeredToolKeyConfigList,
).toStrictEqual([testToolKeyConfig]);
});
test('hasToolKeyInRegisteredToolKeyList', () => {
const { appendIntoRegisteredToolKeyConfigList } =
useToolAreaStore.getState();
appendIntoRegisteredToolKeyConfigList(testToolKeyConfig);
expect(
useToolAreaStore
.getState()
.hasToolKeyInRegisteredToolKeyList(testToolKeyConfig.toolKey),
).toBe(true);
expect(
useToolAreaStore
.getState()
.hasToolKeyInRegisteredToolKeyList(ToolKey.DATABASE),
).toBe(false);
});
test('appendIntoInitialedToolKeyList', () => {
const { appendIntoInitialedToolKeyList } = useToolAreaStore.getState();
appendIntoInitialedToolKeyList(ToolKey.PLUGIN);
expect(useToolAreaStore.getState().initialedToolKeyList).toStrictEqual([
ToolKey.PLUGIN,
]);
});
test('hasToolKeyInInitialedToolKeyList', () => {
const { appendIntoInitialedToolKeyList } = useToolAreaStore.getState();
appendIntoInitialedToolKeyList(ToolKey.PLUGIN);
expect(
useToolAreaStore
.getState()
.hasToolKeyInInitialedToolKeyList(ToolKey.PLUGIN),
).toBe(true);
expect(
useToolAreaStore
.getState()
.hasToolKeyInInitialedToolKeyList(ToolKey.ONBOARDING),
).toBe(false);
});
test('setToolHasValidData', () => {
const { appendIntoRegisteredToolKeyConfigList, setToolHasValidData } =
useToolAreaStore.getState();
appendIntoRegisteredToolKeyConfigList(testToolKeyConfig);
setToolHasValidData({
toolKey: testToolKeyConfig.toolKey,
hasValidData: true,
});
expect(
useToolAreaStore.getState().registeredToolKeyConfigList,
).toStrictEqual([
{
...testToolKeyConfig,
hasValidData: true,
},
]);
});
test('appendIntoRegisteredToolGroupList', () => {
const { appendIntoRegisteredToolGroupList } = useToolAreaStore.getState();
appendIntoRegisteredToolGroupList(testToolGroup);
expect(useToolAreaStore.getState().registeredToolGroupList).toStrictEqual([
testToolGroup,
]);
});
});

View File

@@ -0,0 +1,28 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { generateError } from '../../src/utils/error';
describe('error', () => {
test('test error', () => {
const testMessage = 'test error';
const result = generateError(testMessage);
expect(result).toEqual(
new Error(`[Bot Platform Tool Hooks]: ${testMessage}`),
);
});
});