@blade-hq/agent-react 2610.0.0-beta.53 → 2610.0.0-beta.55
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/README.md +29 -0
- package/dist/components/ConnectorPanel.d.ts +41 -0
- package/dist/components/PluginConnectorList.d.ts +47 -0
- package/dist/components/SessionPluginIcon.d.ts +5 -1
- package/dist/components/connector-panel-types.d.ts +35 -0
- package/dist/components/plugin-connector.d.ts +41 -0
- package/dist/components/use-session-plugin-activation.d.ts +40 -0
- package/dist/embed/entry.d.ts +3 -2
- package/dist/index.d.ts +10 -0
- package/dist/index.js +1195 -676
- package/dist/index.js.map +1 -1
- package/dist/style.full.css +1 -1
- package/package.json +2 -2
- package/public-api.md +226 -29
package/README.md
CHANGED
|
@@ -384,6 +384,12 @@ blade-chat { --primary: 262 83% 58%; height: 640px; }
|
|
|
384
384
|
|
|
385
385
|
不需要本包——用后端托管的单文件产物 `<script src=".../sdk/blade-agent.js">` + `<blade-chat>` 自定义元素,行为与 `ChatView` 一致;详见 agent-client README 与接入文档。
|
|
386
386
|
|
|
387
|
+
## 附录:连接器与插件选择
|
|
388
|
+
|
|
389
|
+
- **连接器面板**:`ConnectorPanel`、`ConnectorPanelProps`、`PluginConnectorList`、`PluginConnectorListProps`、`ConfiguringPlugin`
|
|
390
|
+
- **插件行与触发器**:`PluginConnectorItem`、`PluginConnectorSelection`、`selectionFromItem`、`triggerSummary`、`TriggerSummary`、`TRIGGER_ICON_LIMIT`、`mergeConnectorItems`、`catalogToConnectorItems`、`filterConnectorItems`、`pluginConnectorSummary`
|
|
391
|
+
- **启用时序**:`useSessionPluginActivation`、`UseSessionPluginActivationResult`
|
|
392
|
+
|
|
387
393
|
## 附录:re-export 自 @blade-hq/agent-client
|
|
388
394
|
|
|
389
395
|
为方便单包引入,本包 re-export 了 agent-client 的全部公开声明(`BladeClient`、`AgentSession`、`SessionState`、协议类型等),文档一律见 [agent-client 的 README](../agent-client/README.md)。完整签名见 [public-api.md](./public-api.md)。
|
|
@@ -407,6 +413,29 @@ blade-chat { --primary: 262 83% 58%; height: 640px; }
|
|
|
407
413
|
插件的账号、token 等配置由包内 JSON Schema 声明,选择器就地提供填写入口:首次激活缺配置的插件会直接弹出表单(`<SessionPluginConfigDialog client={client} sessionId={id} plugin={plugin} />`),已配置的插件在行内提供「配置」按钮。表单本体是 `<SessionPluginConfigForm>`,参数与提交类型为 `SessionPluginConfigFormProps` / `SessionPluginConfigDraft`,也可单独嵌入;`SessionPluginConfigDialogProps` 是对话框的参数类型。
|
|
408
414
|
|
|
409
415
|
表单只呈现它确定能呈现的 JSON Schema 构造(字符串/数值/布尔/null、对象与数组、枚举、`properties` 内的 `writeOnly`,以及用同一字段的 `const` 固定的 `oneOf` 分支);遇到无法安全呈现的写法直接说明原因,不降级成手写 JSON、不静默丢字段。`writeOnly` 字段永不回显:留空表示保持不变,输入表示修改,显式「清除」才会删除。
|
|
416
|
+
### 连接器面板
|
|
417
|
+
|
|
418
|
+
首页与对话输入框共用同一个连接器面板:`<ConnectorPanel client={client} sessionId={id} />`,
|
|
419
|
+
参数类型为 `ConnectorPanelProps`。面板本身只管插件分区,电脑与外部账号由宿主通过
|
|
420
|
+
`renderComputerSection` / `renderExternalAccounts` / `renderFooterActions` 注入——那些入口
|
|
421
|
+
要跳宿主自己的路由,SDK 不硬编码内部路径。`sessionId` 传 `null` 表示"首页":此时开关只记录
|
|
422
|
+
本次输入的待选(`PluginConnectorSelection`、`onPendingPluginsChange`),不激活任何东西、
|
|
423
|
+
不建会话、不启沙盒;`pendingDisabledReason` 用于说明该模式下为什么用不了待选。
|
|
424
|
+
|
|
425
|
+
插件行的渲染交给 `<PluginConnectorList>`(`PluginConnectorListProps`),它只负责样式与排版:
|
|
426
|
+
"该显示成什么"全部来自 `PluginConnectorItem`、`mergeConnectorItems`、`catalogToConnectorItems`、
|
|
427
|
+
`filterConnectorItems` 与 `pluginConnectorSummary`,判定不各写一份。`sessionPluginLabel` 决定
|
|
428
|
+
一行读起来是什么名字。
|
|
429
|
+
|
|
430
|
+
启用时序由 `useSessionPluginActivation` 收口(返回值类型 `UseSessionPluginActivationResult`):
|
|
431
|
+
**先准备配置、再提交激活**。缺必填配置时开关不落到已启用、立刻弹表单,保存由服务端确认配置
|
|
432
|
+
完整才提交;取消、校验失败、读取失败都保持关闭,不会先写 `active=true` 再补偿。慢准备/慢激活
|
|
433
|
+
期间开关仍可点,语义是取消这次意图而不是再排一次队。配置弹窗由 `ConfiguringPlugin` 描述。
|
|
434
|
+
|
|
435
|
+
触发器要在不打开面板时就能显示"选了哪几个、几个":用 `selectionFromItem` 把一行转成
|
|
436
|
+
`PluginConnectorSelection`,再用 `triggerSummary` 折成 `TriggerSummary`(最多 `TRIGGER_ICON_LIMIT`
|
|
437
|
+
个图标,其余折成数量;没有图标 token 的项不占图标位但仍计数)。
|
|
438
|
+
|
|
410
439
|
### MCP Apps
|
|
411
440
|
|
|
412
441
|
`McpAppCard` 使用官方 AppBridge 渲染归档卡片,内置 Web 消费同一组件。在 `BladeProvider` 下传入会话 ID 与来源 ID,也可直接提供 `BladeClient`。`McpAppMessage` 表示 App 提供的文本;`McpAppMessageContext` 将其交给当前对话的待发送区。用户可在 `ChatView` 查看、移除并确认发送。`update-model-context` 会把 App 提交的当前状态经 `sessions.updateMcpAppContext` 存为会话上下文:只落库、不追加聊天、不启动 agent turn,正在运行的一轮保持启动时版本,下一个新的运行才读取;冲突(409)时重读最新 revision 后重提同一份状态一次。
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { BladeClient, SessionPluginActivation } from "@blade-hq/agent-client";
|
|
2
|
+
import { type ReactNode } from "react";
|
|
3
|
+
import { type PluginConnectorItem } from "./plugin-connector";
|
|
4
|
+
import { type PluginConnectorSelection } from "./connector-panel-types";
|
|
5
|
+
export interface ConnectorPanelProps {
|
|
6
|
+
client: BladeClient;
|
|
7
|
+
/**
|
|
8
|
+
* `null` 表示首页:插件开关只记下本次输入的待选,不激活任何东西、不建会话、
|
|
9
|
+
* 不启动沙盒或 MCP。待选项随首条消息一起交给宿主处理。
|
|
10
|
+
*/
|
|
11
|
+
sessionId: string | null;
|
|
12
|
+
/** 首页待选插件;`sessionId` 为 null 时使用。 */
|
|
13
|
+
pendingPlugins?: PluginConnectorSelection[];
|
|
14
|
+
onPendingPluginsChange?: (next: PluginConnectorSelection[]) => void;
|
|
15
|
+
/** 首页候选开关不可用时的说明(例如软件工厂模式会先建项目再启动)。 */
|
|
16
|
+
pendingDisabledReason?: string | null;
|
|
17
|
+
/** 会话内插件启用/停用结果;宿主据此刷新技能统计。 */
|
|
18
|
+
onPluginsChanged?: (plugin: SessionPluginActivation) => void;
|
|
19
|
+
/**
|
|
20
|
+
* 当前已选(首页待选 / 会话内已启用)的插件,按行原样报给宿主。
|
|
21
|
+
*
|
|
22
|
+
* 触发器要在不打开面板时就能显示「选了哪几个、几个」,它自己拿不到这份状态,
|
|
23
|
+
* 所以由面板单向汇报;面板未挂载时宿主保留上一次的结果。
|
|
24
|
+
*/
|
|
25
|
+
onSelectedChange?: (items: PluginConnectorItem[]) => void;
|
|
26
|
+
/** 宿主注入:电脑分区。参数是搜索词,宿主自己决定怎么过滤。 */
|
|
27
|
+
renderComputerSection?: (query: string) => ReactNode;
|
|
28
|
+
/** 宿主注入:外部账号分区(飞书 / GitHub 等固定连接入口)。 */
|
|
29
|
+
renderExternalAccounts?: (query: string) => ReactNode;
|
|
30
|
+
/** 宿主注入:底部操作(添加连接器 / 管理连接器)。 */
|
|
31
|
+
renderFooterActions?: () => ReactNode;
|
|
32
|
+
className?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 统一连接器面板:顶部搜索、按「电脑 / 插件 / 外部账号」分区、底部添加与管理。
|
|
36
|
+
*
|
|
37
|
+
* 插件分区是这一层唯一的共享实现:首页和会话用同一个列表、同一套启用判定,
|
|
38
|
+
* 判定不各写一份。电脑与外部账号由宿主注入——那些入口需要宿主的路由与 CLI
|
|
39
|
+
* 引导,SDK 不硬编码内部路径,也不替第三方决定跳到哪里。
|
|
40
|
+
*/
|
|
41
|
+
export declare function ConnectorPanel({ client, sessionId, pendingPlugins, onPendingPluginsChange, pendingDisabledReason, onPluginsChanged, onSelectedChange, renderComputerSection, renderExternalAccounts, renderFooterActions, className, }: ConnectorPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { BladeClient, SessionPluginConfigState } from "@blade-hq/agent-client";
|
|
2
|
+
import type { PluginConnectorItem } from "./plugin-connector";
|
|
3
|
+
export interface ConfiguringPlugin {
|
|
4
|
+
name: string;
|
|
5
|
+
/**
|
|
6
|
+
* 这次打开表单是不是「为了启用它」。
|
|
7
|
+
*
|
|
8
|
+
* 只有用户在开关上表达了启用意图时才为 true:已经跑起来的插件再保存配置
|
|
9
|
+
* 不应该顺手重启 / 重新激活(见 SessionPluginSelector 的历史约定)。
|
|
10
|
+
*/
|
|
11
|
+
pendingActivation: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface PluginConnectorListProps {
|
|
14
|
+
client: BladeClient;
|
|
15
|
+
/** 会话内插件用会话接口取图标;首页候选(null)用账号级目录。 */
|
|
16
|
+
sessionId: string | null;
|
|
17
|
+
items: PluginConnectorItem[];
|
|
18
|
+
/** 正在提交意图的行;开关转圈,但仍然可点(点是取消)。 */
|
|
19
|
+
inFlight: Record<string, true>;
|
|
20
|
+
/** 有启用/停用请求在飞,会写服务端的行先锁住次要操作。 */
|
|
21
|
+
busy: boolean;
|
|
22
|
+
/** 上一次操作失败,给出重试入口。 */
|
|
23
|
+
mutationError: boolean;
|
|
24
|
+
onToggle: (item: PluginConnectorItem, next: boolean) => void;
|
|
25
|
+
onRetry: (item: PluginConnectorItem) => void;
|
|
26
|
+
onEditConfig: (item: PluginConnectorItem) => void;
|
|
27
|
+
configuring: ConfiguringPlugin | null;
|
|
28
|
+
onConfigSaved: (state: SessionPluginConfigState) => void;
|
|
29
|
+
onConfigClose: () => void;
|
|
30
|
+
/** 开关不可用时说明原因,而不是静默禁用。 */
|
|
31
|
+
disabledReason?: string | null;
|
|
32
|
+
/**
|
|
33
|
+
* 列表本身不可用(读取失败 / 搜索无结果)时的说明;有值时不再叠加「还没装插件」,
|
|
34
|
+
* 否则会把一次故障或一次没搜到说成「你这个账号没装东西」。
|
|
35
|
+
*/
|
|
36
|
+
unavailableText?: string | null;
|
|
37
|
+
emptyText: string;
|
|
38
|
+
/** 首页待选模式:开关的语义是"待选",不是"已经启用"。 */
|
|
39
|
+
draft?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 连接器面板里的插件列表。
|
|
43
|
+
*
|
|
44
|
+
* 首页与会话共用同一份渲染:开关是开关,候选是候选,行的存在与状态无关——
|
|
45
|
+
* 没启用、没图标也要显示名称和占位,不隐藏整行。
|
|
46
|
+
*/
|
|
47
|
+
export declare function PluginConnectorList({ client, sessionId, items, inFlight, busy, mutationError, onToggle, onRetry, onEditConfig, configuring, onConfigSaved, onConfigClose, disabledReason, unavailableText, emptyText, draft, }: PluginConnectorListProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type { BladeClient, SessionPlugin } from "@blade-hq/agent-client";
|
|
2
2
|
export interface SessionPluginIconProps {
|
|
3
3
|
client: BladeClient;
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* 会话内已准备的包。传 `null` 时改用账号级目录图标(`/api/plugins/{name}/icon`),
|
|
6
|
+
* 这样首页这种还没有会话的地方也能显示包内图标。
|
|
7
|
+
*/
|
|
8
|
+
sessionId: string | null;
|
|
5
9
|
plugin: Pick<SessionPlugin, "name" | "icon">;
|
|
6
10
|
className?: string;
|
|
7
11
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { PluginConnectorItem } from "./plugin-connector";
|
|
2
|
+
/**
|
|
3
|
+
* 首页选中的一个待选插件。
|
|
4
|
+
*
|
|
5
|
+
* 带上展示名和图标是为了两件事:后续的配置弹窗与失败提示能一直用业务名(只传技术
|
|
6
|
+
* ID 的话,用户在面板里看到「示例登录」、在弹窗标题里看到 `demo-login`,等于要他认
|
|
7
|
+
* 两遍),以及不用打开面板就能在触发器上看到自己选了什么。
|
|
8
|
+
*
|
|
9
|
+
* 技术 ID 仍是路径、授权、缓存与调用的权威。
|
|
10
|
+
*/
|
|
11
|
+
export interface PluginConnectorSelection {
|
|
12
|
+
name: string;
|
|
13
|
+
displayName: string | null;
|
|
14
|
+
icon: string | null;
|
|
15
|
+
iconSource: PluginConnectorItem["iconSource"];
|
|
16
|
+
}
|
|
17
|
+
/** 面板一行 → 待选条目。 */
|
|
18
|
+
export declare function selectionFromItem(item: PluginConnectorItem): PluginConnectorSelection;
|
|
19
|
+
/** 触发器上最多直接显示几个插件图标,其余折成数量。 */
|
|
20
|
+
export declare const TRIGGER_ICON_LIMIT = 3;
|
|
21
|
+
/** 触发器要显示的内容:要么是若干图标加一个数量,要么是一个通用图标。 */
|
|
22
|
+
export interface TriggerSummary {
|
|
23
|
+
icons: Array<Pick<PluginConnectorSelection, "name" | "icon" | "iconSource">>;
|
|
24
|
+
/** 超出 TRIGGER_ICON_LIMIT 的数量;0 表示不显示角标。 */
|
|
25
|
+
overflow: number;
|
|
26
|
+
/** 已选/已启用的总数,用于无障碍标签与提示。 */
|
|
27
|
+
total: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 把一份插件列表折成触发器上的显示内容。
|
|
31
|
+
*
|
|
32
|
+
* 图标 token 为空的项不占图标位——占位图标连成一排只会让人误以为自己选了三个
|
|
33
|
+
* 不同的东西;它们仍计入数量。
|
|
34
|
+
*/
|
|
35
|
+
export declare function triggerSummary(items: Array<Pick<PluginConnectorSelection, "name" | "icon" | "iconSource">>): TriggerSummary;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { PluginCatalogEntry, SessionPlugin, SessionPluginConfigSummary } from "@blade-hq/agent-client";
|
|
2
|
+
/**
|
|
3
|
+
* 连接器面板里的一行插件。
|
|
4
|
+
*
|
|
5
|
+
* 展示字段(名称、图标)和启用状态分开表达:目录接口在没有会话时也能给出名称与
|
|
6
|
+
* 图标,而「这次会话是否启用」只有会话接口知道。首页候选行恒为 `active: false`,
|
|
7
|
+
* 因为它只是待选,不代表已经激活。
|
|
8
|
+
*/
|
|
9
|
+
export interface PluginConnectorItem {
|
|
10
|
+
name: string;
|
|
11
|
+
display_name: string | null;
|
|
12
|
+
/** 图标 token;null 时显示统一占位,不隐藏整行。 */
|
|
13
|
+
icon: string | null;
|
|
14
|
+
/** 图标从哪个接口取:账号级目录,还是会话内已准备的包。 */
|
|
15
|
+
iconSource: "account" | "session";
|
|
16
|
+
installed: boolean | null;
|
|
17
|
+
/** 会话里已提交的选择;首页候选恒为 false。 */
|
|
18
|
+
active: boolean;
|
|
19
|
+
status: string;
|
|
20
|
+
reason?: string | null;
|
|
21
|
+
config?: SessionPluginConfigSummary;
|
|
22
|
+
projected: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** 首页候选:只有账号级目录,没有会话状态。 */
|
|
25
|
+
export declare function catalogToConnectorItems(catalog: PluginCatalogEntry[]): PluginConnectorItem[];
|
|
26
|
+
/**
|
|
27
|
+
* 会话列表叠加账号目录。
|
|
28
|
+
*
|
|
29
|
+
* 目录可用时展示字段以目录为准(包可能还没准备,会话列表拿不到名称和图标),
|
|
30
|
+
* 目录不可用时退回会话行自己的字段,这样已选插件仍然可以取消。
|
|
31
|
+
*/
|
|
32
|
+
export declare function mergeConnectorItems(sessionPlugins: SessionPlugin[], catalog: PluginCatalogEntry[] | null): PluginConnectorItem[];
|
|
33
|
+
/**
|
|
34
|
+
* 一行的配置说明文案;权威状态来自配置接口。
|
|
35
|
+
*
|
|
36
|
+
* `unchecked` 刻意没有文案:列表没有读过用户的 Home,说任何话都是噪音,
|
|
37
|
+
* 入口是开关本身。
|
|
38
|
+
*/
|
|
39
|
+
export declare function pluginConnectorSummary(state: string | undefined): string | null;
|
|
40
|
+
/** 按名称和显示名做本地过滤;空查询返回全部。 */
|
|
41
|
+
export declare function filterConnectorItems(items: PluginConnectorItem[], query: string): PluginConnectorItem[];
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { BladeClient, SessionPluginActivation, SessionPluginConfigState } from "@blade-hq/agent-client";
|
|
2
|
+
import type { ConfiguringPlugin } from "./PluginConnectorList";
|
|
3
|
+
import { type PluginConnectorItem } from "./plugin-connector";
|
|
4
|
+
export interface UseSessionPluginActivationResult {
|
|
5
|
+
items: PluginConnectorItem[];
|
|
6
|
+
loading: boolean;
|
|
7
|
+
/** 插件列表本身读不到(Hub 不可用等),已有选择仍然可取消。 */
|
|
8
|
+
listError: boolean;
|
|
9
|
+
/** 某次启用/停用/准备失败了。 */
|
|
10
|
+
mutationError: boolean;
|
|
11
|
+
/** 正在为哪些插件提交意图;对应的开关在转圈,但仍然可点(点是取消)。 */
|
|
12
|
+
inFlight: Record<string, true>;
|
|
13
|
+
busy: boolean;
|
|
14
|
+
configuring: ConfiguringPlugin | null;
|
|
15
|
+
reload: () => void;
|
|
16
|
+
toggle: (item: PluginConnectorItem, next: boolean) => void;
|
|
17
|
+
retry: (item: PluginConnectorItem) => void;
|
|
18
|
+
editConfig: (item: PluginConnectorItem) => void;
|
|
19
|
+
onConfigSaved: (state: SessionPluginConfigState) => void;
|
|
20
|
+
onConfigClose: () => void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 会话内插件启用的唯一实现。
|
|
24
|
+
*
|
|
25
|
+
* 顺序是「先准备配置,再提交 activation」:缺配置时开关不落到已启用、立刻弹表单,
|
|
26
|
+
* 保存成功才提交;取消、校验失败、配置读取失败都不提交。绝不先持久化 active=true
|
|
27
|
+
* 再靠补偿关掉——那样用户下次刷新会看到一个从没被成功打开的插件。
|
|
28
|
+
*
|
|
29
|
+
* 停用仍然直接提交:在服务端它只是取消一条数据库选择,不准备包、不连 MCP。但如果
|
|
30
|
+
* 这次「启用」只是还在准备、压根没提交过 activation,取消就只是放弃本地意图。
|
|
31
|
+
*
|
|
32
|
+
* 所有异步响应都按 (lifetime, mutation) 校验:迟到的准备或激活结果不会把已经取消 /
|
|
33
|
+
* 已经切走会话的插件重新打开;反过来,旧响应发现服务端落库顺序与用户最新意图不同时,
|
|
34
|
+
* 会重新提交最新意图。
|
|
35
|
+
*/
|
|
36
|
+
export declare function useSessionPluginActivation({ client, sessionId, onChange, }: {
|
|
37
|
+
client: BladeClient;
|
|
38
|
+
sessionId: string;
|
|
39
|
+
onChange?: (plugin: SessionPluginActivation) => void;
|
|
40
|
+
}): UseSessionPluginActivationResult;
|
package/dist/embed/entry.d.ts
CHANGED
|
@@ -52,7 +52,8 @@ declare const BladeAgent: {
|
|
|
52
52
|
computerState: typeof agentClient.computerState;
|
|
53
53
|
sortComputers: typeof agentClient.sortComputers;
|
|
54
54
|
ModelsResource: typeof agentClient.ModelsResource;
|
|
55
|
-
|
|
55
|
+
ChatGroupsResource: typeof agentClient.ChatGroupsResource;
|
|
56
|
+
PluginsResource: typeof agentClient.PluginsResource;
|
|
56
57
|
hasChatRunEvent: typeof agentClient.hasChatRunEvent;
|
|
57
58
|
buildMessageContent: typeof agentClient.buildMessageContent;
|
|
58
59
|
chatErrorForDisplay: typeof agentClient.chatErrorForDisplay;
|
|
@@ -113,7 +114,7 @@ declare const BladeAgent: {
|
|
|
113
114
|
workspace_path?: string | null | undefined;
|
|
114
115
|
ba_version?: string | null | undefined;
|
|
115
116
|
sandbox_version?: string | null | undefined;
|
|
116
|
-
|
|
117
|
+
chat_group_id?: string | null | undefined;
|
|
117
118
|
match?: unknown;
|
|
118
119
|
}, {}>;
|
|
119
120
|
SessionStatus: import("arktype/internal/variants/string.ts").StringType<"completed" | "created" | "failed" | "interrupted" | "running" | "waiting_for_input", {}>;
|
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,16 @@ export type { UseMessagePinOptions } from "./hooks/use-message-pin";
|
|
|
10
10
|
export type { ChatCompletionTool, LlmChatOptions, LlmToolCall, UseLlmChatResult, } from "./hooks/use-llm-chat";
|
|
11
11
|
export { ChatView } from "./components/ChatView";
|
|
12
12
|
export type { ChatViewClassNames, ChatViewProps, ChatViewRenderers, ChatViewSlots, FollowupInteractionEvent, } from "./components/ChatView";
|
|
13
|
+
export { ConnectorPanel } from "./components/ConnectorPanel";
|
|
14
|
+
export type { ConnectorPanelProps } from "./components/ConnectorPanel";
|
|
15
|
+
export { PluginConnectorList } from "./components/PluginConnectorList";
|
|
16
|
+
export type { ConfiguringPlugin, PluginConnectorListProps } from "./components/PluginConnectorList";
|
|
17
|
+
export { useSessionPluginActivation } from "./components/use-session-plugin-activation";
|
|
18
|
+
export type { UseSessionPluginActivationResult } from "./components/use-session-plugin-activation";
|
|
19
|
+
export { catalogToConnectorItems, filterConnectorItems, mergeConnectorItems, pluginConnectorSummary, } from "./components/plugin-connector";
|
|
20
|
+
export type { PluginConnectorItem } from "./components/plugin-connector";
|
|
21
|
+
export { selectionFromItem, triggerSummary, TRIGGER_ICON_LIMIT } from "./components/connector-panel-types";
|
|
22
|
+
export type { PluginConnectorSelection, TriggerSummary, } from "./components/connector-panel-types";
|
|
13
23
|
export { SessionPluginSelector } from "./components/SessionPluginSelector";
|
|
14
24
|
export type { SessionPluginSelectorProps } from "./components/SessionPluginSelector";
|
|
15
25
|
export { SessionPluginIcon, sessionPluginLabel } from "./components/SessionPluginIcon";
|