@tbox.cn/app-template-agent 0.10.10 → 0.10.12
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/ENV.md +2 -0
- package/package.json +2 -2
- package/packages/agent-ui-kit/src/components/ActionBar/DebugButton.test.tsx +84 -0
- package/packages/agent-ui-kit/src/components/ActionBar/index.test.tsx +83 -0
- package/packages/agent-ui-kit/src/components/ActionBar/index.tsx +1 -0
- package/packages/agent-ui-kit/src/components/MessageBubble/index.test.tsx +24 -2
- package/packages/agent-ui-kit/src/components/MessageBubble/index.tsx +1 -0
- package/pnpm-lock.template.yaml +22 -22
- package/pnpm-workspace.template.yaml +3 -3
package/ENV.md
CHANGED
|
@@ -115,6 +115,8 @@ dev/src 与 prod/dist bundle 形态恒等):
|
|
|
115
115
|
| `TBOX_LLM_AFFINITY` | 会话亲和大容量旋钮(缺省 on;`=off` 关闭——fetch 头 `X-Affinity-Session` 与 body `prompt_cache_key` 双通道均不注入。best-effort 语义:网关负载可覆盖亲和;排障时若网关对未知 body 字段报错可关) |
|
|
116
116
|
| `TBOX_LLM_CONN_BIND` | per-session 连接绑定旋钮(缺省 on;`=off` 关闭——LLM fetch 回退全局连接池。连接=网关缓存池路由单位:per-session 单连接(120s keep-alive)钉死集群分配,保活跨 run 提升前缀缓存命中;排障时可关) |
|
|
117
117
|
| `TBOX_LLM_COOKIE_AFFINITY` | 网关 cookie 亲和旋钮(缺省 on;`=off` 关闭——不回传网关 set-cookie。回传激活 LB 粘性:连接重建后恢复原集群的通道;best-effort) |
|
|
118
|
+
| `TBOX_SOFA_TRACE` | SOFA 链路标识注入旋钮(缺省 on;`=off` 关注入——出站 `*.tbox.cn` 请求不带 sofa-traceid/traceid 双格式头;作用域进入照常。平台 tracelog 串联排障用,独立回滚) |
|
|
119
|
+
| `TBOX_SOFA_TRACE_HOSTS` | SOFA 注入 host 闸门扩展(逗号分隔 host 后缀,**追加**于缺省 `tbox.cn`;如预发 `agtgw-pre.alipay.com`。dot 锚定匹配,闸外请求字节级不变) |
|
|
118
120
|
|
|
119
121
|
## 统一鉴权
|
|
120
122
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tbox.cn/app-template-agent",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.12",
|
|
4
4
|
"description": "tbox AI Agent 全栈模板(多包 pnpm workspace):apps/client + apps/server。唯一模板(W4 单一模板统一化:缺省空装配 chat 形态;mall 能力经 profiles/mall 加装),能力经 tbox-app module add 模块扩展(shopping-guide/member 等)。",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=24.0.0 <25.0.0"
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"typescript-eslint": "8.67.0",
|
|
37
37
|
"eslint-plugin-react-hooks": "5.2.0",
|
|
38
38
|
"vite": "6.4.3",
|
|
39
|
-
"@tbox.cn/app-sdk-server": "0.
|
|
39
|
+
"@tbox.cn/app-sdk-server": "0.23.0"
|
|
40
40
|
},
|
|
41
41
|
"license": "MIT",
|
|
42
42
|
"publishConfig": {
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
/**
|
|
3
|
+
* DebugButton postMessage 载荷契约锁(P0 对齐 trace-exporter 行格式锁定先例):
|
|
4
|
+
* 载荷形状是 H5 → 平台父窗口的跨系统契约——键名漂移 = 平台侧静默断裂。
|
|
5
|
+
* conversationId 语义:会话 β 后由服务端经 run 事件 threadId / 历史行下发,
|
|
6
|
+
* 与 requestId 同点位落位至 message;D2 锁定「缺席 = 键值 undefined 仍发送」
|
|
7
|
+
* 现状降级形态(平台侧 no-conv 回退依赖此形态)。
|
|
8
|
+
*/
|
|
9
|
+
import { act } from 'react';
|
|
10
|
+
import { createRoot } from 'react-dom/client';
|
|
11
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
12
|
+
|
|
13
|
+
vi.mock('@tbox.cn/app-agent-sdk-client', () => ({
|
|
14
|
+
createLogger: () => ({ warn: vi.fn() }),
|
|
15
|
+
}));
|
|
16
|
+
|
|
17
|
+
import { DebugButton } from './DebugButton';
|
|
18
|
+
|
|
19
|
+
describe('DebugButton 平台契约(tbox:debug-trace 载荷锁定)', () => {
|
|
20
|
+
let host: HTMLDivElement;
|
|
21
|
+
let root: ReturnType<typeof createRoot>;
|
|
22
|
+
let postSpy: ReturnType<typeof vi.fn>;
|
|
23
|
+
|
|
24
|
+
beforeEach(() => {
|
|
25
|
+
host = document.createElement('div');
|
|
26
|
+
document.body.appendChild(host);
|
|
27
|
+
root = createRoot(host);
|
|
28
|
+
// happy-dom 下 window.parent === window:同一函数引用
|
|
29
|
+
postSpy = vi.fn();
|
|
30
|
+
window.parent.postMessage = postSpy as unknown as typeof window.postMessage;
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
afterEach(() => {
|
|
34
|
+
act(() => root.unmount());
|
|
35
|
+
host.remove();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const clickDebug = () => {
|
|
39
|
+
act(() => {
|
|
40
|
+
host.querySelector('.tbox-debug-btn')!.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
it('D1 点击 → 载荷全键精确(type/requestId/conversationId/messageId/messageCreatedAt)', () => {
|
|
45
|
+
act(() => {
|
|
46
|
+
root.render(<DebugButton requestId="req_1" conversationId="conv_1" messageId="m1" messageCreatedAt={123} />);
|
|
47
|
+
});
|
|
48
|
+
clickDebug();
|
|
49
|
+
expect(postSpy).toHaveBeenCalledTimes(1);
|
|
50
|
+
expect(postSpy.mock.calls[0]![0]).toEqual({
|
|
51
|
+
type: 'tbox:debug-trace',
|
|
52
|
+
requestId: 'req_1',
|
|
53
|
+
conversationId: 'conv_1',
|
|
54
|
+
messageId: 'm1',
|
|
55
|
+
messageCreatedAt: 123,
|
|
56
|
+
});
|
|
57
|
+
expect(postSpy.mock.calls[0]![1]).toBe('*');
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('D2 conversationId 缺席 → 载荷键恒在场、值为 undefined(现状降级形态锁定)', () => {
|
|
61
|
+
act(() => {
|
|
62
|
+
root.render(<DebugButton requestId="req_1" messageId="m2" messageCreatedAt={456} />);
|
|
63
|
+
});
|
|
64
|
+
clickDebug();
|
|
65
|
+
const payload = postSpy.mock.calls[0]![0] as Record<string, unknown>;
|
|
66
|
+
// 键恒在场(严格区分键存在性——toEqual 对 undefined 键与缺失等价,故断言键集)
|
|
67
|
+
expect(Object.keys(payload).sort()).toEqual([
|
|
68
|
+
'conversationId',
|
|
69
|
+
'messageCreatedAt',
|
|
70
|
+
'messageId',
|
|
71
|
+
'requestId',
|
|
72
|
+
'type',
|
|
73
|
+
]);
|
|
74
|
+
expect(payload.conversationId).toBeUndefined();
|
|
75
|
+
expect(payload.requestId).toBe('req_1');
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it('D3 requestId 缺席 → 不渲染(渲染守卫不变)', () => {
|
|
79
|
+
act(() => {
|
|
80
|
+
root.render(<DebugButton messageId="m3" />);
|
|
81
|
+
});
|
|
82
|
+
expect(host.querySelector('.tbox-debug-btn')).toBeNull();
|
|
83
|
+
});
|
|
84
|
+
});
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
/**
|
|
3
|
+
* ActionBar → DebugButton prop 接线守卫(病因学守卫):
|
|
4
|
+
* 会话 β(31de86f3)删除 conversationId prop 行零红灯复发——本测试锁定
|
|
5
|
+
* message.requestId/conversationId 恒透传至 DebugButton(删除任一 prop 行 → 红)。
|
|
6
|
+
* 捕获式 mock(MessageBubble 测试同款模式)。
|
|
7
|
+
*/
|
|
8
|
+
import { act } from 'react';
|
|
9
|
+
import { createRoot } from 'react-dom/client';
|
|
10
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
11
|
+
import type { ChatMessage } from '../../types';
|
|
12
|
+
|
|
13
|
+
const { debugPropsRef } = vi.hoisted(() => ({
|
|
14
|
+
debugPropsRef: {} as { current?: Record<string, unknown> },
|
|
15
|
+
}));
|
|
16
|
+
|
|
17
|
+
vi.mock('./DebugButton', () => ({
|
|
18
|
+
DebugButton: (props: Record<string, unknown>) => {
|
|
19
|
+
debugPropsRef.current = props;
|
|
20
|
+
return null;
|
|
21
|
+
},
|
|
22
|
+
}));
|
|
23
|
+
vi.mock('../../store-context', () => ({
|
|
24
|
+
useChatStore: (selector: (s: Record<string, unknown>) => unknown) =>
|
|
25
|
+
selector({ submitFeedback: vi.fn() }),
|
|
26
|
+
}));
|
|
27
|
+
vi.mock('../../chat-config', () => ({
|
|
28
|
+
useChatConfigStore: (selector: (s: Record<string, unknown>) => unknown) => selector({ enableTTS: false }),
|
|
29
|
+
}));
|
|
30
|
+
vi.mock('@tbox.cn/app-agent-sdk-client', () => ({
|
|
31
|
+
createLogger: () => ({ warn: vi.fn() }),
|
|
32
|
+
useFeedbackAdapter: () => undefined,
|
|
33
|
+
useRefreshSession: () => undefined,
|
|
34
|
+
useTTSAdapter: () => undefined,
|
|
35
|
+
}));
|
|
36
|
+
vi.mock('../../utils/copyText', () => ({ copyText: vi.fn(async () => true) }));
|
|
37
|
+
vi.mock('../../utils/toast', () => ({ toast: vi.fn() }));
|
|
38
|
+
|
|
39
|
+
import { ActionBar } from './index';
|
|
40
|
+
|
|
41
|
+
const doneMessage = (over: Partial<ChatMessage> = {}): ChatMessage => ({
|
|
42
|
+
id: 'm1',
|
|
43
|
+
role: 'assistant',
|
|
44
|
+
content: '答案',
|
|
45
|
+
status: 'done',
|
|
46
|
+
createdAt: 1,
|
|
47
|
+
...over,
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
describe('ActionBar → DebugButton 接线(病因学守卫)', () => {
|
|
51
|
+
let host: HTMLDivElement;
|
|
52
|
+
let root: ReturnType<typeof createRoot>;
|
|
53
|
+
|
|
54
|
+
beforeEach(() => {
|
|
55
|
+
host = document.createElement('div');
|
|
56
|
+
document.body.appendChild(host);
|
|
57
|
+
root = createRoot(host);
|
|
58
|
+
debugPropsRef.current = undefined;
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
afterEach(() => {
|
|
62
|
+
act(() => root.unmount());
|
|
63
|
+
host.remove();
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('A1 done 消息:requestId + conversationId 均透传(删除任一 prop 行 → 红)', () => {
|
|
67
|
+
act(() => {
|
|
68
|
+
root.render(<ActionBar message={doneMessage({ requestId: 'req_1', conversationId: 'conv_1' })} />);
|
|
69
|
+
});
|
|
70
|
+
expect(debugPropsRef.current).toMatchObject({
|
|
71
|
+
requestId: 'req_1',
|
|
72
|
+
conversationId: 'conv_1',
|
|
73
|
+
messageId: 'm1',
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('A2 字段缺席:prop 透传 undefined(不抛错、按钮层自守卫)', () => {
|
|
78
|
+
act(() => {
|
|
79
|
+
root.render(<ActionBar message={doneMessage({ requestId: 'req_1' })} />);
|
|
80
|
+
});
|
|
81
|
+
expect(debugPropsRef.current).toMatchObject({ requestId: 'req_1', conversationId: undefined });
|
|
82
|
+
});
|
|
83
|
+
});
|
|
@@ -150,6 +150,7 @@ export function ActionBar({ message }: { message: ChatMessage }) {
|
|
|
150
150
|
|
|
151
151
|
<DebugButton
|
|
152
152
|
requestId={message.requestId}
|
|
153
|
+
conversationId={message.conversationId}
|
|
153
154
|
messageId={message.id}
|
|
154
155
|
messageCreatedAt={new Date(message.createdAt).getTime()}
|
|
155
156
|
/>
|
|
@@ -7,8 +7,8 @@ import type { TboxCardPayload } from '@tbox.cn/app-contracts';
|
|
|
7
7
|
const mocks = vi.hoisted(() => ({
|
|
8
8
|
state: {
|
|
9
9
|
cardsByMessageId: {} as Record<string, TboxCardPayload[]>,
|
|
10
|
-
conversationId: null,
|
|
11
10
|
},
|
|
11
|
+
debugProps: null as Record<string, unknown> | null,
|
|
12
12
|
}));
|
|
13
13
|
|
|
14
14
|
vi.mock('../../store-context', () => ({
|
|
@@ -29,7 +29,12 @@ vi.mock('../../components/ActionBar', () => ({
|
|
|
29
29
|
CopyButton: () => null,
|
|
30
30
|
getMessageCopyText: () => '',
|
|
31
31
|
}));
|
|
32
|
-
vi.mock('../../components/ActionBar/DebugButton', () => ({
|
|
32
|
+
vi.mock('../../components/ActionBar/DebugButton', () => ({
|
|
33
|
+
DebugButton: (props: Record<string, unknown>) => {
|
|
34
|
+
mocks.debugProps = props;
|
|
35
|
+
return null;
|
|
36
|
+
},
|
|
37
|
+
}));
|
|
33
38
|
|
|
34
39
|
import { MessageBubble } from './index';
|
|
35
40
|
|
|
@@ -109,4 +114,21 @@ describe('MessageBubble member gate card partition', () => {
|
|
|
109
114
|
// 纵向铺开:不再有轮播圆点指示器
|
|
110
115
|
expect(host.querySelector('[aria-label^="第 "]')).toBeNull();
|
|
111
116
|
});
|
|
117
|
+
|
|
118
|
+
it('error 消息接线:DebugButton 透传 requestId + conversationId(error 分支守卫——不经 ActionBar 的独立渲染路径)', () => {
|
|
119
|
+
mocks.state.cardsByMessageId = {}; // 用例间隔离:清除前序用例的卡片桶残留
|
|
120
|
+
mocks.debugProps = null;
|
|
121
|
+
act(() => {
|
|
122
|
+
root.render(
|
|
123
|
+
<MessageBubble
|
|
124
|
+
message={{ ...emptyAssistantMessage, status: 'error' as const, error: '失败', requestId: 'req_e', conversationId: 'conv_e' }}
|
|
125
|
+
/>,
|
|
126
|
+
);
|
|
127
|
+
});
|
|
128
|
+
expect(mocks.debugProps).toMatchObject({
|
|
129
|
+
requestId: 'req_e',
|
|
130
|
+
conversationId: 'conv_e',
|
|
131
|
+
messageId: 'assistant-1',
|
|
132
|
+
});
|
|
133
|
+
});
|
|
112
134
|
});
|
|
@@ -163,6 +163,7 @@ export function MessageBubble({ message }: { message: ChatMessage }) {
|
|
|
163
163
|
{message.requestId && (
|
|
164
164
|
<DebugButton
|
|
165
165
|
requestId={message.requestId}
|
|
166
|
+
conversationId={message.conversationId}
|
|
166
167
|
messageId={message.id}
|
|
167
168
|
messageCreatedAt={new Date(message.createdAt).getTime()}
|
|
168
169
|
/>
|
package/pnpm-lock.template.yaml
CHANGED
|
@@ -16,11 +16,11 @@ catalogs:
|
|
|
16
16
|
specifier: 0.1.0
|
|
17
17
|
version: 0.1.0
|
|
18
18
|
'@tbox.cn/app-agent-sdk-client':
|
|
19
|
-
specifier: 0.1.
|
|
20
|
-
version: 0.1.
|
|
19
|
+
specifier: 0.1.4
|
|
20
|
+
version: 0.1.4
|
|
21
21
|
'@tbox.cn/app-agent-sdk-server':
|
|
22
|
-
specifier: 0.
|
|
23
|
-
version: 0.
|
|
22
|
+
specifier: 0.2.0
|
|
23
|
+
version: 0.2.0
|
|
24
24
|
'@tbox.cn/app-contracts':
|
|
25
25
|
specifier: 0.12.3
|
|
26
26
|
version: 0.12.3
|
|
@@ -28,8 +28,8 @@ catalogs:
|
|
|
28
28
|
specifier: 0.12.4
|
|
29
29
|
version: 0.12.4
|
|
30
30
|
'@tbox.cn/app-sdk-server':
|
|
31
|
-
specifier: 0.
|
|
32
|
-
version: 0.
|
|
31
|
+
specifier: 0.23.0
|
|
32
|
+
version: 0.23.0
|
|
33
33
|
'@tbox.cn/app-theme-tbox':
|
|
34
34
|
specifier: 0.1.3
|
|
35
35
|
version: 0.1.3
|
|
@@ -115,7 +115,7 @@ importers:
|
|
|
115
115
|
devDependencies:
|
|
116
116
|
'@tbox.cn/app-sdk-server':
|
|
117
117
|
specifier: 'catalog:'
|
|
118
|
-
version: 0.
|
|
118
|
+
version: 0.23.0
|
|
119
119
|
eslint:
|
|
120
120
|
specifier: 'catalog:'
|
|
121
121
|
version: 9.39.5
|
|
@@ -142,7 +142,7 @@ importers:
|
|
|
142
142
|
version: link:../../packages/provider-custom
|
|
143
143
|
'@tbox.cn/app-agent-sdk-client':
|
|
144
144
|
specifier: 'catalog:'
|
|
145
|
-
version: 0.1.
|
|
145
|
+
version: 0.1.4(@types/react@18.3.31)
|
|
146
146
|
'@tbox.cn/app-contracts':
|
|
147
147
|
specifier: 'catalog:'
|
|
148
148
|
version: 0.12.3
|
|
@@ -206,7 +206,7 @@ importers:
|
|
|
206
206
|
version: 0.1.0(@mastra/core@1.59.0(ai@6.0.246(zod@3.25.76))(express@4.22.2)(rxjs@7.8.1)(zod@3.25.76))(@tbox-dev-js/sdk@0.1.18)(zod@3.25.76)
|
|
207
207
|
'@tbox.cn/app-agent-sdk-server':
|
|
208
208
|
specifier: 'catalog:'
|
|
209
|
-
version: 0.
|
|
209
|
+
version: 0.2.0(@tbox-dev-js/sdk@0.1.18)(rxjs@7.8.1)
|
|
210
210
|
'@tbox.cn/app-contracts':
|
|
211
211
|
specifier: 'catalog:'
|
|
212
212
|
version: 0.12.3
|
|
@@ -246,7 +246,7 @@ importers:
|
|
|
246
246
|
version: 2.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
|
247
247
|
'@tbox.cn/app-agent-sdk-client':
|
|
248
248
|
specifier: 'catalog:'
|
|
249
|
-
version: 0.1.
|
|
249
|
+
version: 0.1.4(@types/react@18.3.31)
|
|
250
250
|
'@tbox.cn/app-contracts':
|
|
251
251
|
specifier: 'catalog:'
|
|
252
252
|
version: 0.12.3
|
|
@@ -314,10 +314,10 @@ importers:
|
|
|
314
314
|
dependencies:
|
|
315
315
|
'@tbox.cn/app-agent-sdk-client':
|
|
316
316
|
specifier: 'catalog:'
|
|
317
|
-
version: 0.1.
|
|
317
|
+
version: 0.1.4(@types/react@18.3.31)
|
|
318
318
|
'@tbox.cn/app-agent-sdk-server':
|
|
319
319
|
specifier: 'catalog:'
|
|
320
|
-
version: 0.
|
|
320
|
+
version: 0.2.0(@tbox-dev-js/sdk@0.1.18)(rxjs@7.8.1)
|
|
321
321
|
'@tbox.cn/app-contracts':
|
|
322
322
|
specifier: 'catalog:'
|
|
323
323
|
version: 0.12.3
|
|
@@ -1335,12 +1335,12 @@ packages:
|
|
|
1335
1335
|
'@tbox-dev-js/sdk': '>=0.1.18 <0.2.0'
|
|
1336
1336
|
zod: '>=3.24.0 <4.0.0'
|
|
1337
1337
|
|
|
1338
|
-
'@tbox.cn/app-agent-sdk-client@0.1.
|
|
1339
|
-
resolution: {integrity: sha512-
|
|
1338
|
+
'@tbox.cn/app-agent-sdk-client@0.1.4':
|
|
1339
|
+
resolution: {integrity: sha512-5Mlqcsvj7q0/5DyTNbczCEttodfhJf5m2XBhgepF04pye3TlOuHJazR5mkInRyPjZAzbYiC0uN6AaK86Dmt1aQ==}
|
|
1340
1340
|
engines: {node: '>=20.0.0'}
|
|
1341
1341
|
|
|
1342
|
-
'@tbox.cn/app-agent-sdk-server@0.
|
|
1343
|
-
resolution: {integrity: sha512-
|
|
1342
|
+
'@tbox.cn/app-agent-sdk-server@0.2.0':
|
|
1343
|
+
resolution: {integrity: sha512-5V+H4lDWd78RnRng3BtFc9TEKog/WN+SXl5oMJWvqR7oJvXGOgsToCra3dUXSHTZw4c9r7YEN1m+aXU0JdBe2g==}
|
|
1344
1344
|
engines: {node: '>=20.0.0'}
|
|
1345
1345
|
|
|
1346
1346
|
'@tbox.cn/app-contracts-mall@0.12.4':
|
|
@@ -1367,8 +1367,8 @@ packages:
|
|
|
1367
1367
|
resolution: {integrity: sha512-KDcFdIrIEOlwDvIqBu29CzR5vDjt0BCADMBrgrd5WlRqjrPM1/jM/RcaRO6gRuElmQCp5LfsoAkVeYTZE/6rpw==}
|
|
1368
1368
|
engines: {node: '>=20.0.0'}
|
|
1369
1369
|
|
|
1370
|
-
'@tbox.cn/app-sdk-server@0.
|
|
1371
|
-
resolution: {integrity: sha512-
|
|
1370
|
+
'@tbox.cn/app-sdk-server@0.23.0':
|
|
1371
|
+
resolution: {integrity: sha512-h+WtBjHF6ophOLj+amsiejZJ8TwoxLTmbnEmgfmUxDMgXHLzqJe/A/KAXN701ryku0IEDtIRXeWJ1szPLG9H5g==}
|
|
1372
1372
|
engines: {node: '>=20.0.0'}
|
|
1373
1373
|
hasBin: true
|
|
1374
1374
|
|
|
@@ -4077,7 +4077,7 @@ snapshots:
|
|
|
4077
4077
|
'@tbox-dev-js/sdk': 0.1.18
|
|
4078
4078
|
zod: 3.25.76
|
|
4079
4079
|
|
|
4080
|
-
'@tbox.cn/app-agent-sdk-client@0.1.
|
|
4080
|
+
'@tbox.cn/app-agent-sdk-client@0.1.4(@types/react@18.3.31)':
|
|
4081
4081
|
dependencies:
|
|
4082
4082
|
'@tbox.cn/app-contracts': 0.12.3
|
|
4083
4083
|
'@tbox.cn/app-sdk-client': 0.21.1
|
|
@@ -4089,7 +4089,7 @@ snapshots:
|
|
|
4089
4089
|
- '@types/react'
|
|
4090
4090
|
- immer
|
|
4091
4091
|
|
|
4092
|
-
'@tbox.cn/app-agent-sdk-server@0.
|
|
4092
|
+
'@tbox.cn/app-agent-sdk-server@0.2.0(@tbox-dev-js/sdk@0.1.18)(rxjs@7.8.1)':
|
|
4093
4093
|
dependencies:
|
|
4094
4094
|
'@ag-ui/core': 0.0.47
|
|
4095
4095
|
'@ai-sdk/openai-compatible': 2.0.68(zod@3.25.76)
|
|
@@ -4099,7 +4099,7 @@ snapshots:
|
|
|
4099
4099
|
'@tbox.cn/agent-plugin': 0.1.0(@mastra/core@1.59.0(ai@6.0.246(zod@3.25.76))(express@4.22.2)(rxjs@7.8.1)(zod@3.25.76))(@tbox-dev-js/sdk@0.1.18)(zod@3.25.76)
|
|
4100
4100
|
'@tbox.cn/app-contracts': 0.12.3
|
|
4101
4101
|
'@tbox.cn/app-sdk-core': 0.20.2
|
|
4102
|
-
'@tbox.cn/app-sdk-server': 0.
|
|
4102
|
+
'@tbox.cn/app-sdk-server': 0.23.0
|
|
4103
4103
|
ai: 6.0.246(zod@3.25.76)
|
|
4104
4104
|
express: 4.22.2
|
|
4105
4105
|
gray-matter: 4.0.3
|
|
@@ -4149,7 +4149,7 @@ snapshots:
|
|
|
4149
4149
|
dependencies:
|
|
4150
4150
|
'@tbox.cn/app-contracts': 0.12.3
|
|
4151
4151
|
|
|
4152
|
-
'@tbox.cn/app-sdk-server@0.
|
|
4152
|
+
'@tbox.cn/app-sdk-server@0.23.0':
|
|
4153
4153
|
dependencies:
|
|
4154
4154
|
'@ag-ui/core': 0.0.47
|
|
4155
4155
|
'@tbox.cn/app-contracts': 0.12.3
|
|
@@ -40,9 +40,9 @@ catalog:
|
|
|
40
40
|
"@tbox.cn/agent-plugin": 0.1.0
|
|
41
41
|
"@tbox.cn/app-sdk-core": 0.20.2
|
|
42
42
|
"@tbox.cn/app-sdk-client": 0.21.1
|
|
43
|
-
"@tbox.cn/app-sdk-server": 0.
|
|
44
|
-
"@tbox.cn/app-agent-sdk-server": 0.
|
|
45
|
-
"@tbox.cn/app-agent-sdk-client": 0.1.
|
|
43
|
+
"@tbox.cn/app-sdk-server": 0.23.0
|
|
44
|
+
"@tbox.cn/app-agent-sdk-server": 0.2.0
|
|
45
|
+
"@tbox.cn/app-agent-sdk-client": 0.1.4
|
|
46
46
|
"@tbox.cn/app-contracts": 0.12.3
|
|
47
47
|
"@tbox.cn/app-contracts-mall": 0.12.4
|
|
48
48
|
"@tbox.cn/app-theme-tbox": 0.1.3
|