@ibiz-template-plugin/ai-chat 0.0.113 → 0.0.114
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/dist/index.es.js +5772 -5604
- package/dist/index.legacy.js +1 -1
- package/dist/style.css +1 -1
- package/dist/types/components/chat-messages/chat-messages.d.ts +2 -1
- package/dist/types/components/chat-messages/use-virtual-list.d.ts +31 -0
- package/dist/types/components/chat-scrollbar/chat-scrollbar.d.ts +102 -0
- package/dist/types/controller/ai-chat/ai-chat.controller.d.ts +9 -1
- package/dist/types/controller/ai-topic/ai-topic.controller.d.ts +13 -3
- package/dist/types/entity/ai-agent/ai-agent.d.ts +1 -0
- package/dist/types/icons/arrow-down.d.ts +3 -1
- package/dist/types/icons/index.d.ts +0 -1
- package/dist/types/interface/i-ai-agent/i-ai-agent.d.ts +6 -0
- package/dist/types/interface/i-chat-options/i-chat-options.d.ts +1 -0
- package/dist/types/interface/i-topic-options/i-topic-options.d.ts +6 -0
- package/dist/types/locale/en/index.d.ts +1 -1
- package/dist/types/locale/zh-CN/index.d.ts +1 -1
- package/package.json +1 -1
- package/dist/types/icons/solid-down-svg.d.ts +0 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { RefObject } from 'preact';
|
|
2
|
+
import { ReadonlySignal, Signal } from '@preact/signals';
|
|
3
|
+
|
|
4
|
+
export interface ChatScrollbarProps {
|
|
5
|
+
/**
|
|
6
|
+
* 滚动容器 ref(与 useVirtualList 的 containerRef 同源)
|
|
7
|
+
*
|
|
8
|
+
* @type {RefObject<HTMLDivElement | null>}
|
|
9
|
+
*/
|
|
10
|
+
containerRef: RefObject<HTMLDivElement | null>;
|
|
11
|
+
/**
|
|
12
|
+
* 容器 scrollTop 信号
|
|
13
|
+
*
|
|
14
|
+
* @type {Signal<number>}
|
|
15
|
+
*/
|
|
16
|
+
scrollTop: Signal<number>;
|
|
17
|
+
/**
|
|
18
|
+
* 容器可视高度信号
|
|
19
|
+
*
|
|
20
|
+
* @type {Signal<number>}
|
|
21
|
+
*/
|
|
22
|
+
clientHeight: Signal<number>;
|
|
23
|
+
/**
|
|
24
|
+
* 内容总高度信号(依赖实测高度回填)
|
|
25
|
+
*
|
|
26
|
+
* @type {ReadonlySignal<number>}
|
|
27
|
+
*/
|
|
28
|
+
totalSize: ReadonlySignal<number>;
|
|
29
|
+
/**
|
|
30
|
+
* 程序化写滚动位置(同步信号 + 写容器 scrollTop)
|
|
31
|
+
*
|
|
32
|
+
* @type {(top: number) => void}
|
|
33
|
+
*/
|
|
34
|
+
setScrollTop: (top: number) => void;
|
|
35
|
+
/**
|
|
36
|
+
* 拖动到顶部附近的通知(触发加载更早历史)
|
|
37
|
+
*
|
|
38
|
+
* 拖到顶部且前插补偿被跳过时,scrollTop 值可能不变导致浏览器不派发 scroll 事件,
|
|
39
|
+
* 因此不能只依赖 scroll 事件,需在此处直接通知
|
|
40
|
+
*
|
|
41
|
+
* @type {() => void}
|
|
42
|
+
*/
|
|
43
|
+
onNearTop?: () => void;
|
|
44
|
+
/**
|
|
45
|
+
* 拖动状态回调(父组件转发给 useVirtualList 的 setIsDragging)
|
|
46
|
+
*
|
|
47
|
+
* @type {(dragging: boolean) => void}
|
|
48
|
+
*/
|
|
49
|
+
onDragStateChange?: (dragging: boolean) => void;
|
|
50
|
+
/**
|
|
51
|
+
* thumb 最小高度,避免内容过长时不可抓取
|
|
52
|
+
*
|
|
53
|
+
* @type {number}
|
|
54
|
+
*/
|
|
55
|
+
minThumbSize?: number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 自定义虚拟滚动条
|
|
59
|
+
*
|
|
60
|
+
* ## 为什么不用原生滚动条
|
|
61
|
+
* 动态高度虚拟列表中未测量的项用预估高度占位,快速拖动原生滚动条时新项不断被实测,
|
|
62
|
+
* totalSize(scrollHeight)持续变化,原生 thumb 按比例重定位导致滚动条乱跳。
|
|
63
|
+
*
|
|
64
|
+
* ## 核心策略
|
|
65
|
+
* 隐藏原生滚动条绘制,保留原生 scrollTop 驱动内容(wheel/键盘/触摸不变),自绘 thumb:
|
|
66
|
+
* - 拖动期间 thumb 定位用指针比例(dragRatio),不依赖异步的 scroll 事件回读,无滞后抖动;
|
|
67
|
+
* - 拖动期间 totalSize 变化(测量回填/历史前插)时,按指针比例重映射 scrollTop,
|
|
68
|
+
* thumb 始终钉在指针下方,内容坐标系在其下方重排。
|
|
69
|
+
*
|
|
70
|
+
* ## 与 useVirtualList 的数据流交联
|
|
71
|
+
* 本组件不持有滚动状态,全部通过 props 注入 useVirtualList 暴露的信号与回调,
|
|
72
|
+
* 二者是「显示层 ↔ 驱动层」的关系:
|
|
73
|
+
*
|
|
74
|
+
* ```
|
|
75
|
+
* useVirtualList ChatScrollbar
|
|
76
|
+
* ──────────── ──────────────
|
|
77
|
+
* totalSizeSignal ─────────────────────► totalSize (thumb 高度/比例)
|
|
78
|
+
* clientHeightSignal ──────────────────► clientHeight (thumb 高度/比例)
|
|
79
|
+
* scrollTopSignal ─────────────────────► scrollTop (非拖动期 thumb 位置)
|
|
80
|
+
* setScrollTop ◄──────────────────────── 拖动/翻页 (程序化写滚动位置)
|
|
81
|
+
* onDragStateChange ──► isDragging ──► 前插补偿跳过
|
|
82
|
+
* onNearTop ──────────────────────────► 加载更早历史
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* 正向(useVirtualList → 本组件):
|
|
86
|
+
* - 滚动/测量回填/历史前插 → totalSize、scrollTop 信号变化 → 本组件重渲染更新 thumb;
|
|
87
|
+
* - totalSizeSignal 是懒求值信号(只依赖测量版本号),滚动过程中零额外计算。
|
|
88
|
+
*
|
|
89
|
+
* 反向(本组件 → useVirtualList):
|
|
90
|
+
* - 拖动/点击翻页 → setScrollTop:同步写 scrollTop 信号 + 写容器 DOM,
|
|
91
|
+
* 信号先行避免下一帧用旧值闪跳;虚拟列表据此重算可视区;
|
|
92
|
+
* - onDragStateChange → 虚拟列表的 isDragging 信号置 true:
|
|
93
|
+
* 拖动期间「头部前插补偿」被跳过(use-virtual-list.ts:373),
|
|
94
|
+
* 前插导致的 totalSize 变化改由本组件的重锚定 effect 按指针比例重映射 scrollTop 接管,
|
|
95
|
+
* 两端不会同时争抢滚动位置;
|
|
96
|
+
* - onNearTop:拖到顶部时直接通知父级加载历史——前插补偿被跳过后 scrollTop 可能不变,
|
|
97
|
+
* 浏览器不派发 scroll 事件,不能只依赖滚动事件触发加载。
|
|
98
|
+
*
|
|
99
|
+
* @author zpc
|
|
100
|
+
* @date 2026-10-12
|
|
101
|
+
*/
|
|
102
|
+
export declare const ChatScrollbar: (props: ChatScrollbarProps) => import("preact").JSX.Element | null;
|
|
@@ -107,6 +107,10 @@ export declare class AiChatController {
|
|
|
107
107
|
* @type {Signal<boolean>}
|
|
108
108
|
*/
|
|
109
109
|
readonly enableRecallConfigSetting: Signal<boolean>;
|
|
110
|
+
/**
|
|
111
|
+
* 是否显示项目选择组件(当前激活智能体的 flow_mode 为 SKILL 时才显示)
|
|
112
|
+
*/
|
|
113
|
+
readonly enableChatProject: Signal<boolean>;
|
|
110
114
|
/**
|
|
111
115
|
* 是否允许切换AI代理
|
|
112
116
|
*/
|
|
@@ -286,6 +290,10 @@ export declare class AiChatController {
|
|
|
286
290
|
* 初始化AI知识库
|
|
287
291
|
*/
|
|
288
292
|
private initAIChatKnowledge;
|
|
293
|
+
/**
|
|
294
|
+
* 计算项目选择组件是否显示(当前激活智能体的 flow_mode 为 SKILL 时才显示)
|
|
295
|
+
*/
|
|
296
|
+
private computeEnableChatProject;
|
|
289
297
|
/**
|
|
290
298
|
* 计算选中知识库
|
|
291
299
|
*/
|
|
@@ -345,7 +353,7 @@ export declare class AiChatController {
|
|
|
345
353
|
*/
|
|
346
354
|
loadHistoryMore(): Promise<void>;
|
|
347
355
|
/**
|
|
348
|
-
* 获取历史记录后续处理
|
|
356
|
+
* 获取历史记录后续处理(仅查询history接口时调用)
|
|
349
357
|
*/
|
|
350
358
|
private afterFecthHistory;
|
|
351
359
|
/**
|
|
@@ -105,6 +105,12 @@ export declare class AiTopicController {
|
|
|
105
105
|
* @memberof AiTopicController
|
|
106
106
|
*/
|
|
107
107
|
workMode: 'DEFAULT' | 'WORKSPACE';
|
|
108
|
+
/**
|
|
109
|
+
* @description 是否禁用选择业务域(WORKSPACE 工作模式使用)
|
|
110
|
+
* @type {boolean}
|
|
111
|
+
* @memberof AiTopicController
|
|
112
|
+
*/
|
|
113
|
+
disableSelectScope: boolean;
|
|
108
114
|
/**
|
|
109
115
|
* @description 业务域列表(WORKSPACE 工作模式使用)
|
|
110
116
|
* @type {IScopeItem[]}
|
|
@@ -146,10 +152,14 @@ export declare class AiTopicController {
|
|
|
146
152
|
*/
|
|
147
153
|
setActivedTopic(topic: ChatTopic | undefined): void;
|
|
148
154
|
/**
|
|
149
|
-
*
|
|
150
|
-
* @param compWrapperId
|
|
155
|
+
* @description 注入基础资源
|
|
156
|
+
* @param {string} compWrapperId
|
|
157
|
+
* @param {('DEFAULT' | 'WORKSPACE')} workMode
|
|
158
|
+
* @param {boolean} [disableSelectScope]
|
|
159
|
+
* @param {IScopeItem[]} [scopeList]
|
|
160
|
+
* @memberof AiTopicController
|
|
151
161
|
*/
|
|
152
|
-
injectBasicResources(compWrapperId: string, workMode: 'DEFAULT' | 'WORKSPACE', scopeList?: IScopeItem[]): void;
|
|
162
|
+
injectBasicResources(compWrapperId: string, workMode: 'DEFAULT' | 'WORKSPACE', disableSelectScope?: boolean, scopeList?: IScopeItem[]): void;
|
|
153
163
|
/**
|
|
154
164
|
* 注入资源选项
|
|
155
165
|
* @param resourceOptions
|
|
@@ -20,6 +20,7 @@ export declare class AIAgent implements IAIAgent {
|
|
|
20
20
|
get maxchunks(): number | undefined;
|
|
21
21
|
get chunkthreshold(): number | undefined;
|
|
22
22
|
get chunkpageindex(): 0 | 1 | undefined;
|
|
23
|
+
get flow_mode(): 'SKILL' | 'DEFAULT' | 'DE' | 'HUB' | 'SCRIPT' | undefined;
|
|
23
24
|
constructor(agent: IAIAgent, defaultConfig: {
|
|
24
25
|
chunkrerank: 0 | 1 | 2;
|
|
25
26
|
maxchunks?: number;
|
|
@@ -75,4 +75,10 @@ export interface IAIAgent {
|
|
|
75
75
|
* 页面目录召回
|
|
76
76
|
*/
|
|
77
77
|
chunkpageindex?: 0 | 1;
|
|
78
|
+
/**
|
|
79
|
+
* @description 智能体模式
|
|
80
|
+
* @type {('SKILL' | 'DEFAULT' | 'DE' | 'HUB' | 'SCRIPT')} 可执行SKILL模式 | 简单Prompt模式 | 工作流模式 | 分角色总线模式 | 脚本代码模式
|
|
81
|
+
* @memberof IAIAgent
|
|
82
|
+
*/
|
|
83
|
+
flow_mode?: 'SKILL' | 'DEFAULT' | 'DE' | 'HUB' | 'SCRIPT';
|
|
78
84
|
}
|
|
@@ -227,6 +227,12 @@ export interface ITopicOptions extends ITopic {
|
|
|
227
227
|
* 工作模式,默认值,会话数据以列表显示; WORKSPACE:工作区,会话数据分为域(scope)、会话分组分层显示
|
|
228
228
|
*/
|
|
229
229
|
workMode?: 'DEFAULT' | 'WORKSPACE';
|
|
230
|
+
/**
|
|
231
|
+
* @description 禁用选择业务域,仅WORKSPACE模式下生效,默认不禁用
|
|
232
|
+
* @type {boolean}
|
|
233
|
+
* @memberof ITopicOptions
|
|
234
|
+
*/
|
|
235
|
+
disableSelectScope?: boolean;
|
|
230
236
|
/**
|
|
231
237
|
* @description 域列表,当工作模式为WORKSPACE时必填
|
|
232
238
|
* @type {IScopeItem[]}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const SolidDownSvg: () => import("preact").JSX.Element;
|