@tbox.cn/app-template-agent 0.10.14 → 0.10.16
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/.tbox/app.json +2 -2
- package/.tbox/miniapp-containers.json +6 -0
- package/ENV.md +10 -3
- package/README.md +5 -1
- package/package.json +3 -3
- package/packages/agent-ui-kit/package.json +1 -1
- package/pnpm-lock.template.yaml +103 -64
- package/pnpm-workspace.template.yaml +8 -8
- package/profiles/mall.json +3 -2
- package/scripts/dev.mjs +91 -0
- package/scripts/dev.sh +1 -1
package/.tbox/app.json
CHANGED
package/ENV.md
CHANGED
|
@@ -28,6 +28,10 @@
|
|
|
28
28
|
integrations.json → 裸跑免 mallId 全局会话或任意 `?mallId=` 均可演示。零拓扑形态下 provider-mock 于 register 期
|
|
29
29
|
声明隐式默认单实例(mall-demo / 星河 Mock 小镇)——无 URL 参数访问时默认商圈回显照常生效
|
|
30
30
|
(显式 instances/defaultInstanceId 恒赢,声明仅兜底)。
|
|
31
|
+
- 登录轴同兜底(2026-10-12):壳内 code 登录无 mallId 时,换码器经同一 `defaultInstanceId`
|
|
32
|
+
(零拓扑 mock 档 = 隐式 mall-demo)换发随机访客身份——壳内与 WS 轴/浏览器轴同源同值,
|
|
33
|
+
三轴免 mallId 开箱一致。显式 `"defaultInstanceId": null` 关闭兜底(壳内登录 503
|
|
34
|
+
`AUTH_SCOPE_REQUIRED`,指向补配置或入口带 `?mallId=`)。
|
|
31
35
|
|
|
32
36
|
## URL 参数契约(mall 接入)
|
|
33
37
|
|
|
@@ -141,13 +145,16 @@ dev/src 与 prod/dist bundle 形态恒等):
|
|
|
141
145
|
`my.getAuthCode` → `/api/auth/login` → 换码器注册表按登录 context 的 mallId 路由:命中某厂商
|
|
142
146
|
登录槽实例 → 该厂商换码器出马;未命中 mall 由兜底厂商接管(F2 注册制,机制详见 docs/reference/providers.md):
|
|
143
147
|
|
|
144
|
-
- 前提:登录槽实例的 provider 必须装配对应 provider 包(漏装 → 登录落内置 alipay
|
|
145
|
-
|
|
148
|
+
- 前提:登录槽实例的 provider 必须装配对应 provider 包(漏装 → 登录落内置 alipay
|
|
149
|
+
——未配凭据时 guest 降级 + AUTH warn 日志可观测,配置后走真实换码);实例 config 的厂商
|
|
150
|
+
appId 字段已配(漏配 → 该 mall 503,字段名见各 provider 包)。
|
|
146
151
|
- 登录双形态与复合凭证语义由各 provider 包承载;`AUTH_TOKEN_TTL_MS` 保守建议 ≤2h
|
|
147
152
|
(上游 Token 寿命未知;自有 JWT 过期即重登换新)。
|
|
148
153
|
- ⚠️ 与 `VITE_AUTH_PROVIDER=external` **互斥**:设 external 走 `AUTH_EXTERNAL_*` HMAC 转发旁路,
|
|
149
154
|
换码器被 platform 路由绕过,两者勿同时启用。
|
|
150
|
-
- 裸跑(无登录槽配置):无换码器注册 → 内置 alipay
|
|
155
|
+
- 裸跑(无登录槽配置):无换码器注册 → 内置 alipay/weapp;未配 env → **200 guest 降级**
|
|
156
|
+
(Fix D——内置换码器声明 allowsGuestLogin,`[AUTH] login failed (downgraded to guest)` warn
|
|
157
|
+
可观测;意图真实支付宝登录却恒 guest 时查该日志)或 browser 轴 guest,匿名降级属预期行为。
|
|
151
158
|
- 跨 mall 切换(URL `mallId` 变更)由 SDK `scopeKey` 守卫自动清 token 重登,无需手工登出。
|
|
152
159
|
|
|
153
160
|
## 客户端(Vite 注入)
|
package/README.md
CHANGED
|
@@ -4,11 +4,15 @@ tbox AI Agent 全栈模板(npm 包名 `@tbox.cn/app-template-agent`,唯一
|
|
|
4
4
|
缺省出厂 = 空装配(chat 形态);**商圈形态经 `profiles/mall` 画像加装**(`tbox-app create --profile mall`:mall-core + 六业务模块 + 商圈配置叠加)。
|
|
5
5
|
客户端同时支持浏览器和支付宝小程序 web-view;平台能力(鉴权/会话/TTS/ASR/上传/反馈)经 `@tbox.cn/app-sdk` 统一提供(007 下沉)。
|
|
6
6
|
|
|
7
|
+
创建应用时默认生成 `apps/miniapp-container-alipay`,容器计划见 `.tbox/miniapp-containers.json`。使用前配置小程序 AppId 和 H5 地址;重复创建保留已登记的容器。
|
|
8
|
+
|
|
9
|
+
`pnpm dev` 始终启动原有 H5/server;容器已安装且 PATH 中有 `minidev` 时同时启动容器,否则跳过。容器异常退出不影响 H5/server,Ctrl+C 统一停止本次启动的进程。
|
|
10
|
+
|
|
7
11
|
## 快速开始
|
|
8
12
|
|
|
9
13
|
```sh
|
|
10
14
|
pnpm install
|
|
11
|
-
pnpm dev #
|
|
15
|
+
pnpm dev # H5/server + 可选 minidev 小程序容器
|
|
12
16
|
pnpm verify # typecheck + test + build
|
|
13
17
|
```
|
|
14
18
|
|
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.16",
|
|
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"
|
|
@@ -37,14 +37,14 @@
|
|
|
37
37
|
"typescript-eslint": "8.67.0",
|
|
38
38
|
"eslint-plugin-react-hooks": "5.2.0",
|
|
39
39
|
"vite": "6.4.3",
|
|
40
|
-
"@tbox.cn/app-sdk-server": "0.
|
|
40
|
+
"@tbox.cn/app-sdk-server": "0.25.0"
|
|
41
41
|
},
|
|
42
42
|
"license": "MIT",
|
|
43
43
|
"publishConfig": {
|
|
44
44
|
"access": "public"
|
|
45
45
|
},
|
|
46
46
|
"scripts": {
|
|
47
|
-
"dev": "
|
|
47
|
+
"dev": "node scripts/dev.mjs",
|
|
48
48
|
"build": "pnpm check && pnpm --filter ./apps/server build && pnpm --filter ./apps/client build",
|
|
49
49
|
"build:client": "pnpm check && pnpm --filter ./apps/client build",
|
|
50
50
|
"typecheck": "pnpm -r --filter \"./{apps,packages}/*\" typecheck",
|
package/pnpm-lock.template.yaml
CHANGED
|
@@ -16,23 +16,26 @@ 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.6
|
|
20
|
+
version: 0.1.6
|
|
21
21
|
'@tbox.cn/app-agent-sdk-server':
|
|
22
|
-
specifier: 0.2.
|
|
23
|
-
version: 0.2.
|
|
22
|
+
specifier: 0.2.3
|
|
23
|
+
version: 0.2.3
|
|
24
24
|
'@tbox.cn/app-contracts':
|
|
25
|
-
specifier: 0.
|
|
26
|
-
version: 0.
|
|
25
|
+
specifier: 0.13.0
|
|
26
|
+
version: 0.13.0
|
|
27
27
|
'@tbox.cn/app-contracts-mall':
|
|
28
|
-
specifier: 0.
|
|
29
|
-
version: 0.
|
|
28
|
+
specifier: 0.13.0
|
|
29
|
+
version: 0.13.0
|
|
30
|
+
'@tbox.cn/app-sdk-client':
|
|
31
|
+
specifier: 0.21.3
|
|
32
|
+
version: 0.21.3
|
|
30
33
|
'@tbox.cn/app-sdk-server':
|
|
31
|
-
specifier: 0.
|
|
32
|
-
version: 0.
|
|
34
|
+
specifier: 0.25.0
|
|
35
|
+
version: 0.25.0
|
|
33
36
|
'@tbox.cn/app-theme-tbox':
|
|
34
|
-
specifier: 0.1.
|
|
35
|
-
version: 0.1.
|
|
37
|
+
specifier: 0.1.4
|
|
38
|
+
version: 0.1.4
|
|
36
39
|
'@types/express':
|
|
37
40
|
specifier: 4.17.25
|
|
38
41
|
version: 4.17.25
|
|
@@ -115,7 +118,7 @@ importers:
|
|
|
115
118
|
devDependencies:
|
|
116
119
|
'@tbox.cn/app-sdk-server':
|
|
117
120
|
specifier: 'catalog:'
|
|
118
|
-
version: 0.
|
|
121
|
+
version: 0.25.0
|
|
119
122
|
eslint:
|
|
120
123
|
specifier: 'catalog:'
|
|
121
124
|
version: 9.39.5
|
|
@@ -142,13 +145,13 @@ importers:
|
|
|
142
145
|
version: link:../../packages/provider-custom
|
|
143
146
|
'@tbox.cn/app-agent-sdk-client':
|
|
144
147
|
specifier: 'catalog:'
|
|
145
|
-
version: 0.1.
|
|
148
|
+
version: 0.1.6(@types/react@18.3.31)
|
|
146
149
|
'@tbox.cn/app-contracts':
|
|
147
150
|
specifier: 'catalog:'
|
|
148
|
-
version: 0.
|
|
151
|
+
version: 0.13.0
|
|
149
152
|
'@tbox.cn/app-theme-tbox':
|
|
150
153
|
specifier: 'catalog:'
|
|
151
|
-
version: 0.1.
|
|
154
|
+
version: 0.1.4
|
|
152
155
|
react:
|
|
153
156
|
specifier: 'catalog:'
|
|
154
157
|
version: 18.3.1
|
|
@@ -190,6 +193,24 @@ importers:
|
|
|
190
193
|
specifier: 'catalog:'
|
|
191
194
|
version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(happy-dom@20.11.2)(vite@6.4.3(@types/node@24.13.3)(less@4.8.1)(tsx@4.23.11))
|
|
192
195
|
|
|
196
|
+
apps/miniapp-container-alipay:
|
|
197
|
+
devDependencies:
|
|
198
|
+
'@mini-types/alipay':
|
|
199
|
+
specifier: ^3.0.14
|
|
200
|
+
version: 3.0.14
|
|
201
|
+
'@tbox.cn/app-sdk-client':
|
|
202
|
+
specifier: 'catalog:'
|
|
203
|
+
version: 0.21.3
|
|
204
|
+
'@tbox.cn/app-sdk-server':
|
|
205
|
+
specifier: 'catalog:'
|
|
206
|
+
version: 0.25.0
|
|
207
|
+
typescript:
|
|
208
|
+
specifier: 'catalog:'
|
|
209
|
+
version: 5.9.3
|
|
210
|
+
vitest:
|
|
211
|
+
specifier: 'catalog:'
|
|
212
|
+
version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(happy-dom@20.11.2)(vite@6.4.3(@types/node@24.13.3)(less@4.8.1)(tsx@4.23.11))
|
|
213
|
+
|
|
193
214
|
apps/server:
|
|
194
215
|
dependencies:
|
|
195
216
|
'@app/contracts-mall':
|
|
@@ -206,10 +227,10 @@ importers:
|
|
|
206
227
|
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
228
|
'@tbox.cn/app-agent-sdk-server':
|
|
208
229
|
specifier: 'catalog:'
|
|
209
|
-
version: 0.2.
|
|
230
|
+
version: 0.2.3(@tbox-dev-js/sdk@0.1.18)(rxjs@7.8.1)
|
|
210
231
|
'@tbox.cn/app-contracts':
|
|
211
232
|
specifier: 'catalog:'
|
|
212
|
-
version: 0.
|
|
233
|
+
version: 0.13.0
|
|
213
234
|
express:
|
|
214
235
|
specifier: 'catalog:'
|
|
215
236
|
version: 4.22.2
|
|
@@ -246,10 +267,10 @@ importers:
|
|
|
246
267
|
version: 2.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
|
247
268
|
'@tbox.cn/app-agent-sdk-client':
|
|
248
269
|
specifier: 'catalog:'
|
|
249
|
-
version: 0.1.
|
|
270
|
+
version: 0.1.6(@types/react@18.3.31)
|
|
250
271
|
'@tbox.cn/app-contracts':
|
|
251
272
|
specifier: 'catalog:'
|
|
252
|
-
version: 0.
|
|
273
|
+
version: 0.13.0
|
|
253
274
|
antd-mobile:
|
|
254
275
|
specifier: 'catalog:'
|
|
255
276
|
version: 5.42.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
|
@@ -298,7 +319,7 @@ importers:
|
|
|
298
319
|
dependencies:
|
|
299
320
|
'@tbox.cn/app-contracts-mall':
|
|
300
321
|
specifier: 'catalog:'
|
|
301
|
-
version: 0.
|
|
322
|
+
version: 0.13.0
|
|
302
323
|
devDependencies:
|
|
303
324
|
'@types/node':
|
|
304
325
|
specifier: 24.13.3
|
|
@@ -314,13 +335,13 @@ importers:
|
|
|
314
335
|
dependencies:
|
|
315
336
|
'@tbox.cn/app-agent-sdk-client':
|
|
316
337
|
specifier: 'catalog:'
|
|
317
|
-
version: 0.1.
|
|
338
|
+
version: 0.1.6(@types/react@18.3.31)
|
|
318
339
|
'@tbox.cn/app-agent-sdk-server':
|
|
319
340
|
specifier: 'catalog:'
|
|
320
|
-
version: 0.2.
|
|
341
|
+
version: 0.2.3(@tbox-dev-js/sdk@0.1.18)(rxjs@7.8.1)
|
|
321
342
|
'@tbox.cn/app-contracts':
|
|
322
343
|
specifier: 'catalog:'
|
|
323
|
-
version: 0.
|
|
344
|
+
version: 0.13.0
|
|
324
345
|
devDependencies:
|
|
325
346
|
'@types/node':
|
|
326
347
|
specifier: 24.13.3
|
|
@@ -1101,6 +1122,15 @@ packages:
|
|
|
1101
1122
|
peerDependencies:
|
|
1102
1123
|
zod: ^3.25.0 || ^4.0.0
|
|
1103
1124
|
|
|
1125
|
+
'@mini-types/alipay@3.0.14':
|
|
1126
|
+
resolution: {integrity: sha512-FakzSsKvybtWlEIVTIRlr89kuQFn+XY86Ho9VUFFaKLplhW6Wx8FUxTDE7IzV7B9rT8DP/Icy637vUHlXPsw1g==}
|
|
1127
|
+
|
|
1128
|
+
'@mini-types/global@3.0.14':
|
|
1129
|
+
resolution: {integrity: sha512-St2ucFRfKRskposOqV/9iNJTKn1MbyqDypQiy/0DaVJjEm2MFi82RJjX9sBz1uWhQIqzu741PgTjGSy7L/Qj9g==}
|
|
1130
|
+
|
|
1131
|
+
'@mini-types/my@3.0.14':
|
|
1132
|
+
resolution: {integrity: sha512-aEgmM+rbEvEzTvqltCFRAg/h6KKs14M1y+FrOkz+hn2EyNpOVPesUzTjbRhSiFFsE3WdfBh54lHNYBahAmHq7w==}
|
|
1133
|
+
|
|
1104
1134
|
'@modelcontextprotocol/core@2.0.0':
|
|
1105
1135
|
resolution: {integrity: sha512-pJCEwGG7Lfr/+PQp9ZTwKXNeO5wzbfKL7H3MYpCorM4oFBoQrdjnBgEoqG+RjhsvS1FKrDbKux+M1HhlnGWqcA==}
|
|
1106
1136
|
engines: {node: '>=20'}
|
|
@@ -1335,40 +1365,40 @@ packages:
|
|
|
1335
1365
|
'@tbox-dev-js/sdk': '>=0.1.18 <0.2.0'
|
|
1336
1366
|
zod: '>=3.24.0 <4.0.0'
|
|
1337
1367
|
|
|
1338
|
-
'@tbox.cn/app-agent-sdk-client@0.1.
|
|
1339
|
-
resolution: {integrity: sha512
|
|
1368
|
+
'@tbox.cn/app-agent-sdk-client@0.1.6':
|
|
1369
|
+
resolution: {integrity: sha512-/dCthY+JEccMPGafALYkhPRDRBPHSzPklNfXw63XQqhU7yrvqgeyuOXFrhkSYU5ZFzupZErUndXpiZz/zzJVug==}
|
|
1340
1370
|
engines: {node: '>=20.0.0'}
|
|
1341
1371
|
|
|
1342
|
-
'@tbox.cn/app-agent-sdk-server@0.2.
|
|
1343
|
-
resolution: {integrity: sha512-
|
|
1372
|
+
'@tbox.cn/app-agent-sdk-server@0.2.3':
|
|
1373
|
+
resolution: {integrity: sha512-EeSXpW1Aoy85Z9ZXCKSlziGhxyBeQCWQDRuLdkg7ReVKthNXfFKcAiIiaZIQkSjoZB1OL3Qlg8xl2cLqiXZxHA==}
|
|
1344
1374
|
engines: {node: '>=20.0.0'}
|
|
1345
1375
|
|
|
1346
|
-
'@tbox.cn/app-contracts-mall@0.
|
|
1347
|
-
resolution: {integrity: sha512-
|
|
1376
|
+
'@tbox.cn/app-contracts-mall@0.13.0':
|
|
1377
|
+
resolution: {integrity: sha512-EzLRs93WoHbqYI9MZV555ru14jTYnUILhClFisJXd3vlXTpHw9T1annSaa4IpkHepsX6AmCT5FxwvRUZcZ6T3A==}
|
|
1348
1378
|
engines: {node: '>=20.0.0'}
|
|
1349
1379
|
|
|
1350
|
-
'@tbox.cn/app-contracts@0.
|
|
1351
|
-
resolution: {integrity: sha512-
|
|
1380
|
+
'@tbox.cn/app-contracts@0.13.0':
|
|
1381
|
+
resolution: {integrity: sha512-8sqP/23MoUlbTX9enFNotP5bu7XKFfigDUJ6sEn1Ff2a0rRlSTWzLWmDv9lP70cfZMPjh4MHoLKFoukr8QPvMA==}
|
|
1352
1382
|
engines: {node: '>=20.0.0'}
|
|
1353
1383
|
|
|
1354
|
-
'@tbox.cn/app-sdk-client@0.21.
|
|
1355
|
-
resolution: {integrity: sha512-
|
|
1384
|
+
'@tbox.cn/app-sdk-client@0.21.3':
|
|
1385
|
+
resolution: {integrity: sha512-64y22k5gzCc9eEQ0IJA1izxPaosNEmoCJ4YrsfHOoHYq2UPJCCmP7RIu3Rn4stPZ4tcmRdMdAi2y5499KObYHw==}
|
|
1356
1386
|
engines: {node: '>=20.0.0'}
|
|
1357
1387
|
|
|
1358
|
-
'@tbox.cn/app-sdk-core@0.20.
|
|
1359
|
-
resolution: {integrity: sha512-
|
|
1388
|
+
'@tbox.cn/app-sdk-core@0.20.4':
|
|
1389
|
+
resolution: {integrity: sha512-4kcoxnZnPgsO0RwAsjsodOXRhZNQcr9r3INN3Z03/JR2e3E+izkW2YHsgGcdbVSVX81s8gZrkaBbE+xco3wSqg==}
|
|
1360
1390
|
engines: {node: '>=20.0.0'}
|
|
1361
1391
|
|
|
1362
|
-
'@tbox.cn/app-sdk-server@0.
|
|
1363
|
-
resolution: {integrity: sha512
|
|
1392
|
+
'@tbox.cn/app-sdk-server@0.25.0':
|
|
1393
|
+
resolution: {integrity: sha512-wKKbmFnY6YU+mQOoak4UADWe1nWZKKdZeGqzatWC9Ny0W05QtDGLG9ql9kP1IwN3a5S6lFf4A6OBdSwERTFqTw==}
|
|
1364
1394
|
engines: {node: '>=20.0.0'}
|
|
1365
1395
|
hasBin: true
|
|
1366
1396
|
|
|
1367
|
-
'@tbox.cn/app-theme-tbox@0.1.
|
|
1368
|
-
resolution: {integrity: sha512-
|
|
1397
|
+
'@tbox.cn/app-theme-tbox@0.1.4':
|
|
1398
|
+
resolution: {integrity: sha512-VF2fjTBFKJ6x/wvM6/T0qi7dmoiN1stNIT2xDerYbBBLCggr7f+H0v6VtuFMSed6tirlcpAlqtBDOctxudHJlQ==}
|
|
1369
1399
|
|
|
1370
|
-
'@tbox.cn/app-toolkit@0.7.
|
|
1371
|
-
resolution: {integrity: sha512-
|
|
1400
|
+
'@tbox.cn/app-toolkit@0.7.5':
|
|
1401
|
+
resolution: {integrity: sha512-ObVkHKElsDz/JazUHkBaIGYYDxZxvQEtjFAk77HXBc0+PSikSRmtb62F99PWGibTnOSLq6wlkGWhk/y+Iy1UOg==}
|
|
1372
1402
|
engines: {node: '>=20.0.0'}
|
|
1373
1403
|
|
|
1374
1404
|
'@types/babel__core@7.20.5':
|
|
@@ -3907,6 +3937,15 @@ snapshots:
|
|
|
3907
3937
|
zod: 3.25.76
|
|
3908
3938
|
zod-from-json-schema: 0.5.6
|
|
3909
3939
|
|
|
3940
|
+
'@mini-types/alipay@3.0.14':
|
|
3941
|
+
dependencies:
|
|
3942
|
+
'@mini-types/global': 3.0.14
|
|
3943
|
+
'@mini-types/my': 3.0.14
|
|
3944
|
+
|
|
3945
|
+
'@mini-types/global@3.0.14': {}
|
|
3946
|
+
|
|
3947
|
+
'@mini-types/my@3.0.14': {}
|
|
3948
|
+
|
|
3910
3949
|
'@modelcontextprotocol/core@2.0.0':
|
|
3911
3950
|
dependencies:
|
|
3912
3951
|
zod: 4.4.3
|
|
@@ -4069,11 +4108,11 @@ snapshots:
|
|
|
4069
4108
|
'@tbox-dev-js/sdk': 0.1.18
|
|
4070
4109
|
zod: 3.25.76
|
|
4071
4110
|
|
|
4072
|
-
'@tbox.cn/app-agent-sdk-client@0.1.
|
|
4111
|
+
'@tbox.cn/app-agent-sdk-client@0.1.6(@types/react@18.3.31)':
|
|
4073
4112
|
dependencies:
|
|
4074
|
-
'@tbox.cn/app-contracts': 0.
|
|
4075
|
-
'@tbox.cn/app-sdk-client': 0.21.
|
|
4076
|
-
'@tbox.cn/app-sdk-core': 0.20.
|
|
4113
|
+
'@tbox.cn/app-contracts': 0.13.0
|
|
4114
|
+
'@tbox.cn/app-sdk-client': 0.21.3
|
|
4115
|
+
'@tbox.cn/app-sdk-core': 0.20.4
|
|
4077
4116
|
react: 18.3.1
|
|
4078
4117
|
react-dom: 18.3.1(react@18.3.1)
|
|
4079
4118
|
zustand: 4.5.7(@types/react@18.3.31)(react@18.3.1)
|
|
@@ -4081,7 +4120,7 @@ snapshots:
|
|
|
4081
4120
|
- '@types/react'
|
|
4082
4121
|
- immer
|
|
4083
4122
|
|
|
4084
|
-
'@tbox.cn/app-agent-sdk-server@0.2.
|
|
4123
|
+
'@tbox.cn/app-agent-sdk-server@0.2.3(@tbox-dev-js/sdk@0.1.18)(rxjs@7.8.1)':
|
|
4085
4124
|
dependencies:
|
|
4086
4125
|
'@ag-ui/core': 0.0.47
|
|
4087
4126
|
'@ai-sdk/openai-compatible': 2.0.68(zod@3.25.76)
|
|
@@ -4089,9 +4128,9 @@ snapshots:
|
|
|
4089
4128
|
'@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)
|
|
4090
4129
|
'@mastra/observability': 1.16.5(@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))(zod@3.25.76)
|
|
4091
4130
|
'@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)
|
|
4092
|
-
'@tbox.cn/app-contracts': 0.
|
|
4093
|
-
'@tbox.cn/app-sdk-core': 0.20.
|
|
4094
|
-
'@tbox.cn/app-sdk-server': 0.
|
|
4131
|
+
'@tbox.cn/app-contracts': 0.13.0
|
|
4132
|
+
'@tbox.cn/app-sdk-core': 0.20.4
|
|
4133
|
+
'@tbox.cn/app-sdk-server': 0.25.0
|
|
4095
4134
|
ai: 6.0.246(zod@3.25.76)
|
|
4096
4135
|
express: 4.22.2
|
|
4097
4136
|
gray-matter: 4.0.3
|
|
@@ -4109,43 +4148,43 @@ snapshots:
|
|
|
4109
4148
|
- utf-8-validate
|
|
4110
4149
|
- workflow
|
|
4111
4150
|
|
|
4112
|
-
'@tbox.cn/app-contracts-mall@0.
|
|
4151
|
+
'@tbox.cn/app-contracts-mall@0.13.0':
|
|
4113
4152
|
dependencies:
|
|
4114
|
-
'@tbox.cn/app-contracts': 0.
|
|
4153
|
+
'@tbox.cn/app-contracts': 0.13.0
|
|
4115
4154
|
zod: 3.25.76
|
|
4116
4155
|
|
|
4117
|
-
'@tbox.cn/app-contracts@0.
|
|
4156
|
+
'@tbox.cn/app-contracts@0.13.0':
|
|
4118
4157
|
dependencies:
|
|
4119
4158
|
'@ag-ui/core': 0.0.47
|
|
4120
4159
|
react: 18.3.1
|
|
4121
4160
|
zod: 3.25.76
|
|
4122
4161
|
|
|
4123
|
-
'@tbox.cn/app-sdk-client@0.21.
|
|
4162
|
+
'@tbox.cn/app-sdk-client@0.21.3':
|
|
4124
4163
|
dependencies:
|
|
4125
|
-
'@tbox.cn/app-contracts': 0.
|
|
4126
|
-
'@tbox.cn/app-sdk-core': 0.20.
|
|
4164
|
+
'@tbox.cn/app-contracts': 0.13.0
|
|
4165
|
+
'@tbox.cn/app-sdk-core': 0.20.4
|
|
4127
4166
|
react: 18.3.1
|
|
4128
4167
|
react-dom: 18.3.1(react@18.3.1)
|
|
4129
4168
|
|
|
4130
|
-
'@tbox.cn/app-sdk-core@0.20.
|
|
4169
|
+
'@tbox.cn/app-sdk-core@0.20.4':
|
|
4131
4170
|
dependencies:
|
|
4132
|
-
'@tbox.cn/app-contracts': 0.
|
|
4171
|
+
'@tbox.cn/app-contracts': 0.13.0
|
|
4133
4172
|
|
|
4134
|
-
'@tbox.cn/app-sdk-server@0.
|
|
4173
|
+
'@tbox.cn/app-sdk-server@0.25.0':
|
|
4135
4174
|
dependencies:
|
|
4136
4175
|
'@ag-ui/core': 0.0.47
|
|
4137
|
-
'@tbox.cn/app-contracts': 0.
|
|
4138
|
-
'@tbox.cn/app-sdk-core': 0.20.
|
|
4139
|
-
'@tbox.cn/app-toolkit': 0.7.
|
|
4176
|
+
'@tbox.cn/app-contracts': 0.13.0
|
|
4177
|
+
'@tbox.cn/app-sdk-core': 0.20.4
|
|
4178
|
+
'@tbox.cn/app-toolkit': 0.7.5
|
|
4140
4179
|
express: 4.22.2
|
|
4141
4180
|
jose: 6.2.8
|
|
4142
4181
|
zod: 3.25.76
|
|
4143
4182
|
transitivePeerDependencies:
|
|
4144
4183
|
- supports-color
|
|
4145
4184
|
|
|
4146
|
-
'@tbox.cn/app-theme-tbox@0.1.
|
|
4185
|
+
'@tbox.cn/app-theme-tbox@0.1.4': {}
|
|
4147
4186
|
|
|
4148
|
-
'@tbox.cn/app-toolkit@0.7.
|
|
4187
|
+
'@tbox.cn/app-toolkit@0.7.5':
|
|
4149
4188
|
dependencies:
|
|
4150
4189
|
ajv: 8.20.0
|
|
4151
4190
|
zod: 3.25.76
|
|
@@ -38,14 +38,14 @@ catalog:
|
|
|
38
38
|
ws: 8.21.3
|
|
39
39
|
"@types/ws": 8.18.1
|
|
40
40
|
"@tbox.cn/agent-plugin": 0.1.0
|
|
41
|
-
"@tbox.cn/app-sdk-core": 0.20.
|
|
42
|
-
"@tbox.cn/app-sdk-client": 0.21.
|
|
43
|
-
"@tbox.cn/app-sdk-server": 0.
|
|
44
|
-
"@tbox.cn/app-agent-sdk-server": 0.2.
|
|
45
|
-
"@tbox.cn/app-agent-sdk-client": 0.1.
|
|
46
|
-
"@tbox.cn/app-contracts": 0.
|
|
47
|
-
"@tbox.cn/app-contracts-mall": 0.
|
|
48
|
-
"@tbox.cn/app-theme-tbox": 0.1.
|
|
41
|
+
"@tbox.cn/app-sdk-core": 0.20.4
|
|
42
|
+
"@tbox.cn/app-sdk-client": 0.21.3
|
|
43
|
+
"@tbox.cn/app-sdk-server": 0.25.0
|
|
44
|
+
"@tbox.cn/app-agent-sdk-server": 0.2.3
|
|
45
|
+
"@tbox.cn/app-agent-sdk-client": 0.1.6
|
|
46
|
+
"@tbox.cn/app-contracts": 0.13.0
|
|
47
|
+
"@tbox.cn/app-contracts-mall": 0.13.0
|
|
48
|
+
"@tbox.cn/app-theme-tbox": 0.1.4
|
|
49
49
|
zustand: 4.5.7
|
|
50
50
|
eslint: 9.39.5
|
|
51
51
|
typescript-eslint: 8.67.0
|
package/profiles/mall.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "mall 画像(单一模板统一化 W4):create --profile mall 执行器(W5 接线)按 modules 序列加装 + configOverlay 叠加(--config-dir 通道)+ rootFiles 根文件落地(TEMPLATE.md 使用指南 → 应用根)。provider 轴独立(缺省 mock-only 演示态;vendor 档由部署者后续 add)。",
|
|
3
3
|
"name": "mall",
|
|
4
|
-
"description": "商圈 AI Agent:家页形态(home 槽)+ 域装配 +
|
|
4
|
+
"description": "商圈 AI Agent:家页形态(home 槽)+ 域装配 + 七业务域(导购/会员/停车/营销/活动/客服/AI 支付)",
|
|
5
5
|
"modules": [
|
|
6
6
|
"@tbox.cn/app-module-mall-core",
|
|
7
7
|
"@tbox.cn/app-module-shopping-guide",
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"@tbox.cn/app-module-parking",
|
|
10
10
|
"@tbox.cn/app-module-promotion",
|
|
11
11
|
"@tbox.cn/app-module-alipay-activity",
|
|
12
|
-
"@tbox.cn/app-module-customer-service"
|
|
12
|
+
"@tbox.cn/app-module-customer-service",
|
|
13
|
+
"@tbox.cn/app-module-ai-payment"
|
|
13
14
|
],
|
|
14
15
|
"configOverlay": "profiles/mall/config",
|
|
15
16
|
"rootFiles": ["TEMPLATE.md"]
|
package/scripts/dev.mjs
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { accessSync, constants, existsSync, statSync } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
|
|
6
|
+
export function hasCommand(command, env = process.env) {
|
|
7
|
+
const extensions = process.platform === 'win32' ? (env.PATHEXT ?? '.EXE;.CMD;.BAT').split(';') : [''];
|
|
8
|
+
return (env.PATH ?? '').split(path.delimiter).some(dir => extensions.some(extension => {
|
|
9
|
+
try {
|
|
10
|
+
const executable = path.join(dir || '.', command + extension);
|
|
11
|
+
accessSync(executable, constants.X_OK);
|
|
12
|
+
return statSync(executable).isFile();
|
|
13
|
+
}
|
|
14
|
+
catch { return false; }
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function stopChild(child, signal) {
|
|
19
|
+
if (!child?.pid) return;
|
|
20
|
+
try {
|
|
21
|
+
if (process.platform === 'win32') child.kill(signal);
|
|
22
|
+
else process.kill(-child.pid, signal);
|
|
23
|
+
} catch (error) {
|
|
24
|
+
if (error.code !== 'ESRCH') throw error;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** H5/server 为主进程;可选容器失败不终止主进程。 */
|
|
29
|
+
export function startDev({
|
|
30
|
+
projectDir,
|
|
31
|
+
spawnProcess = spawn,
|
|
32
|
+
commandExists = hasCommand,
|
|
33
|
+
stopProcess = stopChild,
|
|
34
|
+
signals = process,
|
|
35
|
+
log = console,
|
|
36
|
+
finish = code => { process.exitCode = code; },
|
|
37
|
+
}) {
|
|
38
|
+
const options = { cwd: projectDir, detached: process.platform !== 'win32', shell: process.platform === 'win32' };
|
|
39
|
+
const containerInstalled = existsSync(path.join(projectDir, 'apps/miniapp-container-alipay/package.json'));
|
|
40
|
+
const containerEnabled = containerInstalled && commandExists('minidev');
|
|
41
|
+
const server = spawnProcess('pnpm', ['--filter', './apps/server', 'dev'], {
|
|
42
|
+
...options, stdio: containerEnabled ? ['ignore', 'inherit', 'inherit'] : 'inherit',
|
|
43
|
+
});
|
|
44
|
+
let container;
|
|
45
|
+
let stopping = false;
|
|
46
|
+
let requestedCode;
|
|
47
|
+
let completed = false;
|
|
48
|
+
const stop = code => {
|
|
49
|
+
if (stopping) return;
|
|
50
|
+
stopping = true;
|
|
51
|
+
requestedCode = code;
|
|
52
|
+
stopProcess(server, 'SIGTERM');
|
|
53
|
+
stopProcess(container, 'SIGTERM');
|
|
54
|
+
setTimeout(() => {
|
|
55
|
+
stopProcess(server, 'SIGKILL');
|
|
56
|
+
stopProcess(container, 'SIGKILL');
|
|
57
|
+
}, 2000);
|
|
58
|
+
};
|
|
59
|
+
const interrupt = () => stop(130);
|
|
60
|
+
const terminate = () => stop(143);
|
|
61
|
+
signals.on('SIGINT', interrupt);
|
|
62
|
+
signals.on('SIGTERM', terminate);
|
|
63
|
+
const complete = code => {
|
|
64
|
+
if (completed) return;
|
|
65
|
+
completed = true;
|
|
66
|
+
stop(code);
|
|
67
|
+
signals.removeListener('SIGINT', interrupt);
|
|
68
|
+
signals.removeListener('SIGTERM', terminate);
|
|
69
|
+
finish(requestedCode ?? code);
|
|
70
|
+
};
|
|
71
|
+
server.once('error', error => { log.error(`H5/server 启动失败:${error.message}`); complete(1); });
|
|
72
|
+
server.once('exit', (code, signal) => complete(code ?? (signal ? 1 : 0)));
|
|
73
|
+
|
|
74
|
+
if (!containerInstalled) {
|
|
75
|
+
log.info('未安装支付宝小程序容器,仅启动 H5/server。');
|
|
76
|
+
} else if (!containerEnabled) {
|
|
77
|
+
log.info('未找到 minidev,跳过小程序容器,H5/server 正常启动。');
|
|
78
|
+
} else {
|
|
79
|
+
log.info('同时启动支付宝小程序容器(minidev)。');
|
|
80
|
+
container = spawnProcess('pnpm', ['--filter', '@app/miniapp-container-alipay', 'dev'], { ...options, stdio: 'inherit' });
|
|
81
|
+
container.once('error', error => log.warn(`小程序容器启动失败,H5/server 继续运行:${error.message}`));
|
|
82
|
+
container.once('exit', code => {
|
|
83
|
+
if (!stopping) log.info(`小程序容器已退出(${code ?? 'signal'}),H5/server 继续运行。`);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return { server, get container() { return container; }, stop };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
90
|
+
startDev({ projectDir: path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..') });
|
|
91
|
+
}
|
package/scripts/dev.sh
CHANGED