Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
"test:coverage": "vitest run --coverage",
"prebuild": "rimraf packages/tdesign-react/es/* packages/tdesign-react/lib/* packages/tdesign-react/dist/* packages/tdesign-react/esm/* packages/tdesign-react/cjs/*",
"build": "cross-env NODE_ENV=production rollup -c script/rollup.config.js && node script/utils/bundle-override.js && pnpm run build:tsc",
"prebuild:aigc": "rimraf packages/tdesign-react-aigc/es",
"build:aigc": "cross-env NODE_ENV=production rollup -c script/rollup.aigc.config.js && tsc -p ./tsconfig.aigc.build.json --outDir packages/tdesign-react-aigc/es/",
"build:tsc": "run-p build:tsc-*",
"build:tsc-es": "tsc -p ./tsconfig.build.json --outDir packages/tdesign-react/es/",
Expand Down
2 changes: 1 addition & 1 deletion packages/ai-core
Submodule ai-core updated 70 files
+12 −0 .editorconfig
+52 −0 .github/pull_request_template.md
+0 −52 .github/workflows/component-ci.yml
+23 −0 .github/workflows/pkg-pr-new.yml
+7 −0 .github/workflows/pr-spell-check.yml
+1 −1 .github/workflows/pull-request.yml
+1 −0 .prettierignore
+0 −28 .prettierrc.mjs
+130 −8 eslint.config.mjs
+6 −10 package.json
+25 −0 packages/chat-engine/CHANGELOG.md
+9 −0 packages/chat-engine/LICENSE
+70 −0 packages/chat-engine/README-zh_CN.md
+70 −0 packages/chat-engine/README.md
+0 −28 packages/chat-engine/adapters/a2ui/index.ts
+0 −596 packages/chat-engine/adapters/a2ui/processor/A2uiMessageProcessor.ts
+0 −172 packages/chat-engine/adapters/a2ui/processor/ComponentTree.ts
+0 −223 packages/chat-engine/adapters/a2ui/processor/DataStore.ts
+0 −119 packages/chat-engine/adapters/a2ui/processor/PathResolver.ts
+0 −5 packages/chat-engine/adapters/a2ui/types/index.ts
+0 −589 packages/chat-engine/adapters/a2ui/types/types.ts
+0 −206 packages/chat-engine/adapters/a2ui/utils/binding.ts
+0 −29 packages/chat-engine/adapters/a2ui/utils/index.ts
+0 −420 packages/chat-engine/adapters/a2ui/utils/validation.ts
+71 −168 packages/chat-engine/adapters/agui/ActivityManager.ts
+55 −181 packages/chat-engine/adapters/agui/StateManager.ts
+238 −77 packages/chat-engine/adapters/agui/event-mapper.ts
+51 −13 packages/chat-engine/adapters/agui/index.ts
+30 −8 packages/chat-engine/adapters/agui/types/events.ts
+20 −7 packages/chat-engine/adapters/agui/types/schema.ts
+179 −380 packages/chat-engine/adapters/agui/utils.ts
+3 −2 packages/chat-engine/adapters/index.ts
+35 −0 packages/chat-engine/adapters/json-render/SurfaceStateManager.ts
+150 −54 packages/chat-engine/adapters/json-render/a2ui-to-jsonrender.ts
+165 −0 packages/chat-engine/adapters/json-render/action-binding.ts
+6 −0 packages/chat-engine/adapters/json-render/index.ts
+76 −0 packages/chat-engine/adapters/json-render/message-helpers.ts
+63 −29 packages/chat-engine/adapters/json-render/types/a2ui.ts
+2 −2 packages/chat-engine/adapters/json-render/types/core.ts
+1 −1 packages/chat-engine/adapters/openclaw/device-key-manager.ts
+10 −1 packages/chat-engine/adapters/openclaw/history-converter.ts
+24 −24 packages/chat-engine/adapters/openclaw/index.ts
+17 −11 packages/chat-engine/adapters/openclaw/rpc-handler.ts
+2 −0 packages/chat-engine/adapters/openclaw/types/events.ts
+1 −0 packages/chat-engine/adapters/openclaw/types/messages.ts
+1 −1 packages/chat-engine/adapters/openclaw/utils.ts
+1 −1 packages/chat-engine/adapters/shared/activity-manager.ts
+6 −4 packages/chat-engine/index.ts
+17 −14 packages/chat-engine/package.json
+33 −11 packages/chat-engine/processor/index.ts
+10 −5 packages/chat-engine/server/batch-client.ts
+5 −5 packages/chat-engine/server/errors.ts
+11 −11 packages/chat-engine/server/llm-service.ts
+2 −2 packages/chat-engine/server/sse-client.ts
+2 −2 packages/chat-engine/server/sse-parser.ts
+1 −1 packages/chat-engine/server/types.ts
+21 −1 packages/chat-engine/store/message.ts
+11 −11 packages/chat-engine/stream-handlers/agui-stream-handler.ts
+15 −6 packages/chat-engine/stream-handlers/openclaw-stream-handler.ts
+8 −2 packages/chat-engine/stream-handlers/types.ts
+40 −12 packages/chat-engine/tsdown.config.ts
+40 −20 packages/chat-engine/type.ts
+4 −4 packages/chat-engine/utils/index.ts
+2 −2 packages/chat-engine/utils/performance.ts
+10 −8 packages/shared/event-emitter.ts
+61 −57 packages/shared/immutable-patch.ts
+0 −2 packages/shared/json-patch/index.ts
+8 −8 packages/shared/logger.ts
+0 −24 pnpm-lock.yaml
+92 −0 scripts/verify-iife.mjs
14 changes: 12 additions & 2 deletions packages/pro-components/chat/_util/reactify.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -440,8 +440,18 @@ const reactify = <T extends AnyProps = AnyProps>(

render() {
const { children, className, ...rest } = this.props;

return createElement(WC, { class: className, ...rest, ref: this.ref }, children);
// 仅将基本类型作为 attribute 传递,其余复杂类型(object/function/ReactNode)
// 在 update() 中按需处理为 property / slot / event,避免 React 19 把非基本类型
// 通过 JSX 写成异常 attribute,进而干扰 omi 组件的 defaultProps 合并流程
// (典型症状:t-chat-list 的 autoScroll / defaultScrollTo 默认值失效导致自动滚动失效)
const filteredProps: Record<string, any> = {};
Object.keys(rest).forEach((key) => {
const val = (rest as Record<string, any>)[key];
if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') {
filteredProps[key] = val;
}
});
return createElement(WC, { class: className, ...filteredProps, ref: this.ref }, children);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
import { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';
import { stateManager } from '@tdesign/ai-chat-engine';

import type { ChatJSONObject } from '@tdesign/ai-chat-engine';

/**
* 状态订阅相关类型定义
*/
Expand Down Expand Up @@ -41,7 +43,7 @@ export interface UseStateActionReturn {
getStateByKey: (key: string) => any;
}

export const useAgentState = <T = any>(options: StateActionOptions = {}): UseStateActionReturn => {
export const useAgentState = (options: StateActionOptions = {}): UseStateActionReturn => {
const { initialState, subscribeKey } = options;
const [stateMap, setStateMap] = useState<Record<string, any>>(initialState || {});
const [currentStateKey, setCurrentStateKey] = useState<string | null>(null);
Expand All @@ -52,7 +54,7 @@ export const useAgentState = <T = any>(options: StateActionOptions = {}): UseSta

useEffect(
() =>
stateManager.subscribeToLatest((newState: T, newStateKey: string) => {
stateManager.subscribeToLatest((newState: ChatJSONObject, newStateKey: string) => {
// 如果指定了 subscribeKey,只有匹配时才更新状态
if (subscribeKey && newStateKey !== subscribeKey) {
// 仍然更新内部状态,但不触发重新渲染
Expand Down
18 changes: 15 additions & 3 deletions packages/pro-components/chat/chat-message/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,24 @@ import 'tdesign-web-components/lib/chat-message';

import reactify from '../_util/reactify';

import type { TdChatMessageProps } from 'tdesign-web-components';
import type { ChatMessagesData } from '@tdesign/ai-chat-engine';
import type { TdChatMessageProps as WCTdChatMessageProps } from 'tdesign-web-components';

/**
* TdChatMessageProps 的 `message` 字段来源修正:
* - `tdesign-web-components` 里的 `ChatMessagesData` 与 `@tdesign/ai-chat-engine`
* 里的 `ChatMessagesData` 暂时是同构但不同源的两份类型(前者是历史内部定义,
* 后者是新架构的规范来源),下游 `useChat` 返回的 messages 走的是 chat-engine,
* 桥接组件如果直接用 web-components 的类型会导致 TS 无法互赋值。
* - 这里用 `Omit + &` 覆盖 `message` 字段的类型来源,运行时不变;组件底层是
* web component,只关心属性值,不感知 TS 类型。
*/
export type TdChatMessageProps = Omit<WCTdChatMessageProps, 'message'> & {
message?: ChatMessagesData;
};

export const ChatMessage: React.ForwardRefExoticComponent<
Omit<TdChatMessageProps & React.PropsWithChildren, 'ref'> & React.RefAttributes<HTMLElement | undefined>
> = reactify<TdChatMessageProps>('t-chat-item', 'ChatMessage');

export default ChatMessage;

export type { TdChatMessageProps } from 'tdesign-web-components';
1 change: 1 addition & 0 deletions packages/tdesign-react-aigc/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
},
"dependencies": {
"@babel/runtime": "~7.26.7",
"@tdesign/ai-chat-engine": "^0.0.2",
"classnames": "~2.5.1",
"lodash-es": "^4.17.21",
"react-fast-compare": "^3.2.2",
Expand Down
19 changes: 10 additions & 9 deletions script/rollup.aigc.config.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import url from '@rollup/plugin-url';
import json from '@rollup/plugin-json';
import babel from '@rollup/plugin-babel';
import styles from 'rollup-plugin-styles';
import { resolve } from 'path';

import analyzer from 'rollup-plugin-analyzer';
import esbuild from 'rollup-plugin-esbuild';
import replace from '@rollup/plugin-replace';
import multiInput from 'rollup-plugin-multi-input';
import styles from 'rollup-plugin-styles';
import { terser } from 'rollup-plugin-terser';
import commonjs from '@rollup/plugin-commonjs';
import { DEFAULT_EXTENSIONS } from '@babel/core';
import multiInput from 'rollup-plugin-multi-input';
import babel from '@rollup/plugin-babel';
import commonjs from '@rollup/plugin-commonjs';
import json from '@rollup/plugin-json';
import nodeResolve from '@rollup/plugin-node-resolve';
import analyzer from 'rollup-plugin-analyzer';
import { resolve } from 'path';
import replace from '@rollup/plugin-replace';
import url from '@rollup/plugin-url';

import pkg from '../packages/tdesign-react-aigc/package.json';

Expand Down
Loading