@pactor-app/skills 1.34.0 → 1.40.0

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.
Files changed (49) hide show
  1. package/package.json +1 -1
  2. package/pactor-dsl/SKILL.md +28 -1
  3. package/pactor-dsl/references/dsl-authoring.md +174 -36
  4. package/pactor-prd/SKILL.md +20 -21
  5. package/pactor-prd/references/acceptance-checklist.md +1 -1
  6. package/pactor-prd/references/component-mapping.md +1 -1
  7. package/pactor-prd/references/data-api.md +37 -0
  8. package/pactor-prd/references/incremental-wireframe-delta.md +8 -9
  9. package/pactor-prd/references/page-inventory-and-files.md +2 -2
  10. package/pactor-prd/references/page-templates.md +59 -12
  11. package/pactor-prd/references/project-structure.md +1 -1
  12. package/pactor-prd/template/README.md +4 -4
  13. package/pactor-prd/template/app/api/d/[...parts]/route.ts +80 -0
  14. package/pactor-prd/template/app/layout.tsx +1 -3
  15. package/pactor-prd/template/next.config.js +2 -2
  16. package/pactor-prd/template/pnpm-lock.yaml +97 -97
  17. package/pactor-prd/template/src/pactor/App.tsx +3 -2
  18. package/pactor-prd/template/src/pactor/actions.ts +5 -431
  19. package/pactor-prd/template/src/pactor/components/index.ts +1 -4
  20. package/pactor-prd/template/src/pactor/config.ts +12 -4
  21. package/pactor-prd/template/src/server/yaml/common/dashboard.yaml +1 -1
  22. package/pactor-prd/template/src/server/yaml/common/login.yaml +46 -75
  23. package/pactor-prd/template/src/server/yaml/models/data-list.yaml +4 -4
  24. package/pactor-prd/template/src/server/yaml/provider/provider-detail.yaml +2 -2
  25. package/pactor-prd/template/src/server/yaml/provider/provider-edit.yaml +1 -1
  26. package/pactor-prd/template/src/server/yaml/provider/provider-list.yaml +1 -1
  27. package/pactor-prd/template/src/server/yaml/route/route-detail.yaml +1 -1
  28. package/pactor-prd/template/src/server/yaml/route/route-edit.yaml +1 -1
  29. package/pactor-prd/template/src/server/yaml/route/route-list.yaml +1 -1
  30. package/pactor-prd/template/src/server/yaml/sitemap.yaml +2 -6
  31. package/pactor-prd/references/mock-data-routes.md +0 -66
  32. package/pactor-prd/template/app/api/data/[...parts]/route.ts +0 -160
  33. package/pactor-prd/template/app/login.css +0 -122
  34. package/pactor-prd/template/src/pactor/components/chip-filter.tsx +0 -89
  35. package/pactor-prd/template/src/pactor/components/chip-node.tsx +0 -46
  36. package/pactor-prd/template/src/pactor/mocks/audit-mock.ts +0 -403
  37. package/pactor-prd/template/src/pactor/mocks/call-logs-mock.ts +0 -875
  38. package/pactor-prd/template/src/pactor/mocks/client-debug-mock.ts +0 -188
  39. package/pactor-prd/template/src/pactor/mocks/client-templates-mock.ts +0 -497
  40. package/pactor-prd/template/src/pactor/mocks/clients-mock.ts +0 -483
  41. package/pactor-prd/template/src/pactor/mocks/costs-mock.ts +0 -406
  42. package/pactor-prd/template/src/pactor/mocks/dashboard-mock.ts +0 -192
  43. package/pactor-prd/template/src/pactor/mocks/data-list-mock.ts +0 -84
  44. package/pactor-prd/template/src/pactor/mocks/model-debug-mock.ts +0 -144
  45. package/pactor-prd/template/src/pactor/mocks/models-mock.ts +0 -799
  46. package/pactor-prd/template/src/pactor/mocks/ops-usage-mock.ts +0 -806
  47. package/pactor-prd/template/src/pactor/mocks/providers-mock.ts +0 -424
  48. package/pactor-prd/template/src/pactor/mocks/routes-mock.ts +0 -604
  49. package/pactor-prd/template/src/pactor/services.ts +0 -200
@@ -1,12 +1,12 @@
1
1
  # 页面 YAML 模板
2
2
 
3
- 常用页面模板。占位符:`{{kebab-id}}` 页面 id、`{{页面标题}}`、`{{模块名}}`、`{{resource}}` 数据接口名(单段,见 mock-data-routes.md)、`{{实体名}}` 业务实体中文名。DSL 语法细节以 `pactor-dsl` skill 与 packages/ui 当前导出为准。
3
+ 常用页面模板。占位符:`{{kebab-id}}` 页面 id、`{{页面标题}}`、`{{模块名}}`、`{{resource}}` 数据接口名(单段,见 data-api.md)、`{{实体名}}` 业务实体中文名。DSL 语法细节以 `pactor-dsl` skill 与 packages/ui 当前导出为准。
4
4
 
5
5
  **数据列表页(搜索 + 表格 + 新建/编辑)默认套用「数据列表标准模型」**;仅当新建/编辑是独立路由表单页时才用轻量变体。
6
6
 
7
7
  ## 数据列表标准模型(搜索 Form + 表格 + 抽屉新建/编辑)
8
8
 
9
- 从成熟实现提取的完整闭环:搜索过滤、新建/编辑共用抽屉表单(分区 + 条件显隐 + 预填)、操作列 link 按钮。**完整可拷贝的骨架文件:`template/src/server/yaml/models/data-list.yaml`**(已注册进模板 sitemap 的可运行示例,菜单「页面骨架 / 数据列表」直接预览;复制后替换页面信息、字段、接口名与文案即可,配套 mock 为 `template/src/pactor/mocks/data-list-mock.ts`)。结构照抄,字段按线框图替换:
9
+ 从成熟实现提取的完整闭环:搜索过滤、新建/编辑共用抽屉表单(分区 + 条件显隐 + 预填)、操作列 link 按钮。**完整可拷贝的骨架文件:`template/src/server/yaml/models/data-list.yaml`**(已注册进模板 sitemap 的可运行示例,菜单「页面骨架 / 数据列表」直接预览;复制后替换页面信息、字段、接口名与文案即可)。结构照抄,字段按线框图替换:
10
10
 
11
11
  ```yaml
12
12
  dsl: "1.0"
@@ -27,7 +27,7 @@ dataSources:
27
27
  autoLoad: true
28
28
  request:
29
29
  method: GET
30
- url: /api/data/{{resource}}
30
+ url: /api/d/{{resource}}
31
31
  params:
32
32
  keyword: ${state.keyword}
33
33
  status: ${state.status}
@@ -36,7 +36,7 @@ dataSources:
36
36
  autoLoad: false
37
37
  request:
38
38
  method: GET
39
- url: /api/data/{{resource}}/${state.editingId}
39
+ url: /api/d/{{resource}}/${state.editingId}
40
40
  body:
41
41
  type: Page
42
42
  children:
@@ -99,7 +99,7 @@ body:
99
99
  - action: request
100
100
  params:
101
101
  method: POST
102
- url: /api/data/ops/{{resource}}-save
102
+ url: /api/d/ops/{{resource}}-save
103
103
  body:
104
104
  id: ${state.editingId}
105
105
  name: ${event.name}
@@ -332,11 +332,58 @@ body:
332
332
  - **新建/编辑共用同一抽屉**:YAML 锚点 `&entityDrawer` 在「新建」按钮的 `overlay.open` 中定义(必须先出现),表格行内 `*entityDrawer` 引用;`title` 用 `${state.editingId == '' ? ... }` 三元切换;唯一区别是编辑以 `initialValues: ${data.editing}` 预填
333
333
  - **抽屉宽度 720**(`overlay.open type: drawer` 的 `width` 生效);抽屉内分区**不用 Card**:`Text(strong) 标题 → Separator → 字段组`,多个分区重复此结构
334
334
  - **搜索栏按钮对齐**:查询/重置放进 `Field`,其 `label` 用不间断空格 U+00A0(直接敲 `" "` 普通空格可能被压缩),与左侧控件基线对齐
335
- - **Form 不能嵌套**(渲染原生 `<form>`,submit 冒泡):抽屉内只用一个 Form;主从多值(如字典项)的子项编辑在**同一 Form** 内做「子 Table + 行下展开表单」,`onSubmit` 用 `if` 动作按 state 分流提交目标(子项保存走独立 ops 接口 + `reload editing`);表达式不支持数组方法/箭头函数,子项草稿必须走 mock 接口不能前端拼
335
+ - **Form 不能嵌套**(渲染原生 `<form>`,submit 冒泡):抽屉内只用一个 Form;主从多值(如字典项)的子项编辑在**同一 Form** 内做「子 Table + 行下展开表单」,`onSubmit` 用 `if` 动作按 state 分流提交目标(子项保存走独立 ops 接口 + `reload editing`);表达式不支持数组方法/箭头函数,子项草稿必须走服务端接口不能前端拼
336
336
  - **编辑预填链路**:`setState(editingId + 显隐镜像)` → `reload editing` → `overlay.open`;镜像值取自行数据(`${row.type}`),不要等 editing 接口
337
337
  - **overlay.open 阻塞到关闭**,关闭后 `reload list`;新建按钮同理(先重置 state 再 reload editing 清空)
338
338
  - **条件显隐**:`onValuesChange` 把字段值镜像到 state(`"${event.x != null ? event.x : state.x}"` 保持其他字段变化时原值),再用 `when` 控制显隐;编辑时关键字段 `disabled: ${state.editingId != ''}`
339
- - 空 `editingId` 时 mock 的 detail 接口须返回空对象而非 404
339
+ - 空 `editingId` 时后端 detail 接口须返回空对象而非 404(转发层本身对 404 也回退空对象,但真实后端仍建议遵守该约定)
340
+
341
+ ## 登录页(Login 业务组件)
342
+
343
+ 登录页一律用 DSL `type: Login` 业务组件,禁止手写 Card+Form+自定义 CSS。**样板即模板工程的 `template/src/server/yaml/common/login.yaml`**(可直接运行预览),核心结构:
344
+
345
+ ```yaml
346
+ body:
347
+ type: Login
348
+ props:
349
+ layout: split # split(默认) / centered / brand-card / overlap / backdrop
350
+ authVariant: card # 认证区容器:plain 裸表单 / card 常规卡片 / float 大悬浮卡片
351
+ brand: # 品牌区(文案取自 PRD;illustration 缺省内置插画,传 "" 隐藏)
352
+ name: {{产品名}}
353
+ title: {{品牌主标题}}
354
+ description: {{品牌说明}}
355
+ title: 登录
356
+ subtitle: {{副标题}}
357
+ submitText: 登 录
358
+ # registerLink / forgotLink / footer 按需添加(href 跳转或 onRegisterClick/onForgotClick 事件)
359
+ events:
360
+ onSubmit: # values 经 ${event.username} / ${event.password} 读取
361
+ - id: loginResult
362
+ action: request
363
+ params:
364
+ method: POST
365
+ url: {{登录接口地址}}
366
+ body: { username: ${event.username}, password: ${event.password} }
367
+ - action: if
368
+ params:
369
+ condition: ${actions.loginResult == null || actions.loginResult.token == null}
370
+ then:
371
+ - action: message
372
+ params: { messageType: error, text: 用户名或密码错误 }
373
+ - action: if
374
+ params:
375
+ condition: ${actions.loginResult != null && actions.loginResult.token != null}
376
+ then:
377
+ - action: app.reload
378
+ params: { to: / }
379
+ ```
380
+
381
+ 要点:
382
+
383
+ - **布局是产品决策**:原型未明确布局时必须向用户提问(5 种 `layout` + `brandSide`/`brandRatio`/`authVariant` 等修饰),用户不答默认 `split` + `card`;原型可判定则不提问
384
+ - 页面布局(sitemap `layouts`)用纯 PageOutlet 外壳(模板为 `login` 布局),组件自带整页渐变、背景装饰与品牌面板,不要再套自定义背景容器
385
+ - 可配置项权威定义见 `openspec/specs/ui-login-component` 与组件源码(`packages/ui/src/components/business/Login/`);未配置的可选元素不渲染
386
+ - 校验失败由组件内部 Form rules 就地提示;登录失败/成功分支在 DSL 动作链用 `if` + `message` 实现
340
387
 
341
388
  ## 列表页(轻量变体:新建/编辑跳独立表单页)
342
389
 
@@ -357,7 +404,7 @@ dataSources:
357
404
  autoLoad: true
358
405
  request:
359
406
  method: GET
360
- url: /api/data/{{resource}}
407
+ url: /api/d/{{resource}}
361
408
  params:
362
409
  keyword: ${state.keyword}
363
410
  status: ${state.status}
@@ -460,7 +507,7 @@ dataSources:
460
507
  autoLoad: true
461
508
  request:
462
509
  method: GET
463
- url: /api/data/{{resource}}/${route.params.code} # 路径参数经 route 注入
510
+ url: /api/d/{{resource}}/${route.params.code} # 路径参数经 route 注入
464
511
  body:
465
512
  type: Page
466
513
  children:
@@ -504,7 +551,7 @@ dataSources:
504
551
  autoLoad: true
505
552
  request:
506
553
  method: GET
507
- url: /api/data/{{resource}}/${route.params.code}
554
+ url: /api/d/{{resource}}/${route.params.code}
508
555
  body:
509
556
  type: Page
510
557
  children:
@@ -533,9 +580,9 @@ body:
533
580
  onSubmit:
534
581
  - action: setState
535
582
  params: { submitting: true }
536
- - action: http.post # mock 阶段可指向 /api/data/{{resource}}
583
+ - action: http.post # 指向 /api/d/{{resource}}(无后端时转发层返回 { ok: true })
537
584
  params:
538
- url: /api/data/{{resource}}
585
+ url: /api/d/{{resource}}
539
586
  body: ${event}
540
587
  - action: message
541
588
  params: { messageType: success, text: 保存成功 }
@@ -10,7 +10,7 @@
10
10
  │ │ ├── sitemap/route.ts ✅ 返回 sitemap 入口数据(由 src/server/sitemap.ts 组装)
11
11
  │ │ ├── public/pages/[id]/route.ts ➕ 懒加载页面端点,返回单页 envelope(id/resourceType/version/dslVersion/schema/updatedAt)
12
12
  │ │ ├── auth/ · users/ ✅ 模板自带(演示账号,按需保留)
13
- │ │ └── data/[...path]/route.ts ➕ mock 数据统一入口(见 mock-data-routes.md)
13
+ │ │ └── d/[...parts]/route.ts ➕ 数据统一入口(纯转发 → $NEXT_PUBLIC_API_BASE_URL;无后端返回空数据,见 data-api.md)
14
14
  │ ├── globals.css ✅ 全局样式(皮肤导入处)
15
15
  │ ├── layout.tsx ✅ 根布局(自定义页面 CSS 在这里挂载)
16
16
  │ └── theme.css ✅ 主题令牌(样式移植的主战场)
@@ -1,6 +1,6 @@
1
1
  # pactor-prd 模板工程
2
2
 
3
- 可运行的参考实现:Next.js + pactor,页面全部 YAML DSL 描述(`src/server/yaml/`),数据一律 http 数据源 + mock 路由(`app/api/data/[...path]`)。
3
+ 可运行的参考实现:Next.js + pactor,页面全部 YAML DSL 描述(`src/server/yaml/`),数据一律 http 数据源,经纯转发层(`app/api/d/[...parts]`)转发到 `NEXT_PUBLIC_API_BASE_URL`;没有服务层接口时返回空数据,页面按空态渲染。
4
4
 
5
5
  ## 包含内容
6
6
 
@@ -8,7 +8,7 @@
8
8
  - **两个参考模块**:
9
9
  - `yaml/provider/`(供应商:卡片式列表 / 详情 / 新增 / 编辑)
10
10
  - `yaml/route/`(路由:卡片式列表 / 单页纵向详情 / 单页表单新增 / 编辑)
11
- - **完整接线**:`src/pactor/`(SitemapApp 接线、pageEndpoint、皮肤加载、自定义组件与动作)、`src/server/`(yaml 递归加载 + 会话裁剪)、`app/api/`(sitemap / public/pages / data / auth / users)
11
+ - **完整接线**:`src/pactor/`(SitemapApp 接线、pageEndpoint、皮肤加载、自定义组件与动作)、`src/server/`(yaml 递归加载 + 会话裁剪)、`app/api/`(sitemap / public/pages / d 转发层 / auth / users)
12
12
  - **三套皮肤**:`public/skins/`(深浅色俱全),侧栏换肤入口
13
13
 
14
14
  ## 使用方式
@@ -18,8 +18,8 @@
18
18
  1. `package.json` 的 name 改为新工程名
19
19
  2. `src/server/yaml/sitemap.yaml`:app 名称、pages、menus 按 PRD 页面清单重写(保留 layouts)
20
20
  3. 保留 `common/` 公共页面按需调整;参考模块目录可保留作样板,新模块照其结构新增
21
- 4. mock 数据在 `src/pactor/mocks/` 与 `app/api/data/[...path]/route.ts` 路由表中按新域扩展
22
- 5. `pnpm install && pnpm dev`(端口 9011)验证
21
+ 4. 数据接口:dataSources 的 url 直接写最终接口路径(`/api/d/...`,路径即契约);接真实后端时改 `next.config.js` 的 `API_BASE_URLS` 即可,页面 yaml 不动
22
+ 5. `pnpm install && pnpm dev`(端口 9011)验证(无后端时数据区为空态)
23
23
 
24
24
  ## 演示账号
25
25
 
@@ -0,0 +1,80 @@
1
+ import { cookies } from "next/headers";
2
+
3
+ import { serverBaseUrl } from "@/pactor/config";
4
+ import { findUserBySession, SESSION_COOKIE } from "@/server/accounts";
5
+ import { corsHeaders, corsPreflight } from "@/server/cors";
6
+
7
+ /**
8
+ * 页面数据接口统一入口(纯转发):页面 DSL 的 http 数据源(如
9
+ * /api/d/providers)即服务端接口路径,本路由按相同路径、方法、查询与
10
+ * 请求体原样转发到 $serverBaseUrl/api/d/<parts>(src/pactor/config.ts),
11
+ * 并携带会话 cookie;匿名一律 401,不转发。
12
+ *
13
+ * 没有服务层接口时返回空数据(不报错):上游不可达(连接失败)、接口
14
+ * 不存在(404)或返回非 JSON(如命中前端兜底的 HTML)时,GET 返回 {}、
15
+ * POST 返回 { ok: true },页面按空态渲染;接真实后端只需把
16
+ * next.config.js 的 API_BASE_URLS 换成真实地址,页面 yaml 与本路由零改动。
17
+ */
18
+
19
+ /** 无服务层接口时的空数据(GET → 空对象,POST → 成功占位) */
20
+ function emptyData(request: Request): Response {
21
+ const isGet = request.method === "GET" || request.method === "HEAD";
22
+ return Response.json(isGet ? {} : { ok: true }, {
23
+ headers: { "cache-control": "no-store", ...corsHeaders(request) },
24
+ });
25
+ }
26
+
27
+ /** 原样转发:同路径、同方法、同查询、同请求体,携带会话 cookie */
28
+ async function forward(request: Request, parts: string[]): Promise<Response> {
29
+ const url = new URL(request.url);
30
+ const target = `${serverBaseUrl}/api/d/${parts.join("/")}${url.search}`;
31
+ const headers = new Headers();
32
+ const cookie = request.headers.get("cookie");
33
+ if (cookie) headers.set("cookie", cookie);
34
+ const contentType = request.headers.get("content-type");
35
+ if (contentType) headers.set("content-type", contentType);
36
+ const init: RequestInit = { method: request.method, headers };
37
+ if (request.method !== "GET" && request.method !== "HEAD") {
38
+ init.body = await request.text();
39
+ }
40
+ let upstream: globalThis.Response;
41
+ try {
42
+ upstream = await fetch(target, init);
43
+ } catch {
44
+ return emptyData(request); // 上游不可达 → 空数据
45
+ }
46
+ const upstreamType = upstream.headers.get("content-type") ?? "";
47
+ if (upstream.status === 404 || !upstreamType.includes("json")) {
48
+ return emptyData(request); // 接口不存在 / 命中前端兜底 HTML → 空数据
49
+ }
50
+ const body = await upstream.arrayBuffer();
51
+ const resHeaders: Record<string, string> = {
52
+ "cache-control": "no-store",
53
+ "content-type": upstreamType,
54
+ ...corsHeaders(request),
55
+ };
56
+ return new Response(body, { status: upstream.status, headers: resHeaders });
57
+ }
58
+
59
+ async function handle(
60
+ request: Request,
61
+ context: RouteContext<"/api/d/[...parts]">,
62
+ ) {
63
+ const store = await cookies();
64
+ const user = findUserBySession(store.get(SESSION_COOKIE)?.value);
65
+ if (!user) {
66
+ return Response.json(
67
+ { error: "未登录" },
68
+ { status: 401, headers: corsHeaders(request) },
69
+ );
70
+ }
71
+
72
+ const { parts } = await context.params;
73
+ return forward(request, parts);
74
+ }
75
+
76
+ export const GET = handle;
77
+ export const POST = handle;
78
+
79
+ /** 预检(跨源带凭据 / 自定义头时) */
80
+ export const OPTIONS = corsPreflight;
@@ -3,12 +3,10 @@ import { Geist, Geist_Mono } from "next/font/google";
3
3
  import { PactorApp } from "@/pactor/App";
4
4
  // 顺序约定:globals(本项目 tailwind 工具类 + 皮肤无关的外壳规则)→
5
5
  // ui 预建样式(同层冲突时 ui 胜出,保证其内部 base/响应式变体排序生效,
6
- // 如 Sidebar 的 hidden md:block)→ login.css(登录页视觉,须在 ui 之后,
7
- // 经 data-slot 钩子压过组件默认样式)。主题令牌由 public/skins/<skin>.css
6
+ // 如 Sidebar 的 hidden md:block)。主题令牌由 public/skins/<skin>.css
8
7
  // 经下方内联脚本在首屏注入(link 后加载者胜出)。
9
8
  import "./globals.css";
10
9
  import "@pactor-app/ui/styles.css";
11
- import "./login.css";
12
10
 
13
11
  export const metadata: Metadata = {
14
12
  title: "Pactor Console",
@@ -9,8 +9,8 @@
9
9
  * - 构建环境可设 NEXT_PUBLIC_API_BASE_URL 显式覆盖(域名不符合约定时)。
10
10
  */
11
11
  const API_BASE_URLS = {
12
- /** 本地开发:dev 端口 9011 */
13
- development: 'http://localhost:9011',
12
+ /** 本地开发:无服务层接口(转发命中前端兜底 → 返回空数据);接本地后端时改为其地址 */
13
+ development: 'http://localhost:9011/backend',
14
14
  /** 测试环境:替换为实际测试环境 API 域名 */
15
15
  test: 'https://api-test.example.com',
16
16
  /** 生产环境:替换为实际生产 API 域名 */
@@ -9,14 +9,14 @@ importers:
9
9
  .:
10
10
  dependencies:
11
11
  '@pactor-app/core':
12
- specifier: ^1.33.0
13
- version: 1.33.0
12
+ specifier: ^1.34.0
13
+ version: 1.34.0
14
14
  '@pactor-app/runtime':
15
- specifier: ^1.33.0
16
- version: 1.33.0(react@19.2.8)
15
+ specifier: ^1.34.0
16
+ version: 1.34.0(react@19.2.8)
17
17
  '@pactor-app/ui':
18
- specifier: ^1.33.0
19
- version: 1.33.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
18
+ specifier: ^1.34.0
19
+ version: 1.34.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
20
20
  lucide-react:
21
21
  specifier: 1.45.0
22
22
  version: 1.45.0(react@19.2.8)
@@ -24,8 +24,8 @@ importers:
24
24
  specifier: 16.3.5
25
25
  version: 16.3.5(@babel/core@7.29.7)(@types/node@20.19.43)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
26
26
  pactor-app:
27
- specifier: ^1.33.0
28
- version: 1.33.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(vite@8.3.1(@types/node@20.19.43)(jiti@2.7.0)(yaml@2.9.1))
27
+ specifier: ^1.34.0
28
+ version: 1.34.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(vite@8.3.1(@types/node@20.19.43)(jiti@2.7.0)(yaml@2.9.1))
29
29
  react:
30
30
  specifier: 19.2.8
31
31
  version: 19.2.8
@@ -501,73 +501,73 @@ packages:
501
501
  '@oxc-project/types@0.151.0':
502
502
  resolution: {integrity: sha512-J1yXrIlNDZVzE3ada310xeAw7nH8yCAyLPuUIsjKatFPmfn5bS1oW+cM+QsGOtVWd5nhSpbwZWx/rue+r5Z+PA==}
503
503
 
504
- '@pactor-app/app@1.33.0':
505
- resolution: {integrity: sha512-/T3AnTgV3J9gvtwP48uSqp951GJFVt09758RyU3BQMnw3ZJXnLaqfUNMiZ6UlXkd8x32Cfpq3SqbJQRVB1fYlg==}
504
+ '@pactor-app/app@1.34.0':
505
+ resolution: {integrity: sha512-R2AqfNx1HnwF1pHPGHsGJpaHUlbCPfqUflsFaw7dkqDjTc5TuyWzl7MRHaZD1oFbIPaX+qy0fNDp9oob8E029Q==}
506
506
  engines: {node: '>=18'}
507
507
  peerDependencies:
508
508
  react: '>=18'
509
509
  react-dom: '>=18'
510
510
  react-router-dom: '>=6'
511
511
 
512
- '@pactor-app/chat@1.33.0':
513
- resolution: {integrity: sha512-tj3pOA8JXXDzC0jVHr1MQduAuYExP76M0AAsba55mqQ7N64fb2zJDUzMPxYiuv8z9bMr8acKpuOGi/a2tO5hEQ==}
512
+ '@pactor-app/chat@1.34.0':
513
+ resolution: {integrity: sha512-0I7enCfIbU7C0wuOQ/rUDmFKHYcVnbOjoy7Y22nn0pz8DAmqesFU5GFZc2cCf8Mt2ZKgSDB1J5TQI/bN2Qsafw==}
514
514
  engines: {node: '>=18'}
515
515
  peerDependencies:
516
516
  react: '>=18'
517
517
 
518
- '@pactor-app/cli@1.33.0':
519
- resolution: {integrity: sha512-x8+DLqH93Vd0Lkd2zc4stuuc+z0kp++sEnaV49LIktccKBTXNIe6q1BaF8vIX14HrPtSpTtuiMnnlwNR2Nsx/A==}
518
+ '@pactor-app/cli@1.34.0':
519
+ resolution: {integrity: sha512-IZC8jlGbozZ2IKEkwo7JzKfIW0OEVkoklSZptwKaG3SuHLKw3Iw7eFNeLwvBvswciPFoDajYQS+36/YoqC7o8Q==}
520
520
  engines: {node: '>=18'}
521
521
  hasBin: true
522
522
 
523
- '@pactor-app/core@1.33.0':
524
- resolution: {integrity: sha512-XTdm/f7Xom1ifPKwhpvy8WR5cVyLstAtrNAOWcJhs4AdOwYkmuk1MeznRp66Yl9bTJyzhJCEVhsZ7telb0HS6Q==}
523
+ '@pactor-app/core@1.34.0':
524
+ resolution: {integrity: sha512-ldHZIghOq3f9MIUc6764U+RdmhXp2HKUMpnjz90OfZ4I1YOgj8F3g2jZjw699kARSmLUgLj0PVonqjIUsm6k9A==}
525
525
  engines: {node: '>=18'}
526
526
 
527
- '@pactor-app/expression@1.33.0':
528
- resolution: {integrity: sha512-0Z3JUf3NLpEfHUhvzUunmEEZ3B+hEHTz+ATF4RpDVbBVnjmQBdwNcXw1/ybt1I9sJ3eDPOQQtejonsrCX0VzQA==}
527
+ '@pactor-app/expression@1.34.0':
528
+ resolution: {integrity: sha512-Na7rYU3PZGvQOe83OMeFcneWkLP6IkhfheB6miGvX+1L6iTh1VyuFi1fbgtsyUScSllrPA8JJYpXGMCGX+zVCg==}
529
529
  engines: {node: '>=18'}
530
530
 
531
- '@pactor-app/markdown@1.33.0':
532
- resolution: {integrity: sha512-C6u8wZKD4ayRZND4k6HbTz7SDiqb+Pwxwu9xYgYVwRBDugLWVBIfZGSZNThoXcJRumcP5EEsQKeIuNkXbt541g==}
531
+ '@pactor-app/markdown@1.34.0':
532
+ resolution: {integrity: sha512-dU2Z0uvj62/0S16H3J3AQld6DFzN+wV5uVkvYcFeqHN8KiUsP7ppdov9cSGVxo/3Zhk4HbReSBpihEOKyeLzgg==}
533
533
  engines: {node: '>=18'}
534
534
  peerDependencies:
535
535
  react: '>=18'
536
536
 
537
- '@pactor-app/permission@1.33.0':
538
- resolution: {integrity: sha512-CYfW3pfqI6bml5woxTtvlFE/l5ZBeQZe+x1mJigy3dc9gThMVdPKSc9b541RP6Km93tKOz2LK8HOhoE4SlvaxQ==}
537
+ '@pactor-app/permission@1.34.0':
538
+ resolution: {integrity: sha512-Bf4A7BTrtArg9gEnDG25xmzvDC95ffotIhZmRSt6unDj5hu1iaFJbT+TBWqERJ2/TmpIDhx4ipeSN+SOK0jvRQ==}
539
539
  engines: {node: '>=18'}
540
540
 
541
- '@pactor-app/resource@1.33.0':
542
- resolution: {integrity: sha512-ezcM72IFOvHdlUCnQmLiJenVX0Ij/B51hJB87nisJbrDmj3HfPKFoDr1UcRgU5aSlR/yt9Dp/TGTIF4Em7sesQ==}
541
+ '@pactor-app/resource@1.34.0':
542
+ resolution: {integrity: sha512-VNxjZqynNrETgcj2Q9z5PlHlayZXKyXmBhH1iM6ZzzoFy2cn1uoAYURCYtxS7onMotilsSt54CtthybaZHPOyw==}
543
543
  engines: {node: '>=18'}
544
544
 
545
- '@pactor-app/router@1.33.0':
546
- resolution: {integrity: sha512-vhtyczWSzJTe/7rcAK4LsKIdwWEP2vT21fpyNkYzcjIUOXVe2SHmPDu7bmQdW5yB5hQz0IQPkyeLI9HI4xJrcw==}
545
+ '@pactor-app/router@1.34.0':
546
+ resolution: {integrity: sha512-+0jWfZOKIZv2DUQrtES5zuQxRqRleJpNqKqo288hBLA2SP4k/Qj/GG8Yq4yy4wv9XIbjz6cxtu+Bi0g4iBmK4g==}
547
547
  engines: {node: '>=18'}
548
548
  peerDependencies:
549
549
  react: '>=18'
550
550
  react-router-dom: '>=6'
551
551
 
552
- '@pactor-app/runtime@1.33.0':
553
- resolution: {integrity: sha512-JZOTgoo0jeSG5+gp1bpD1Rey4ZDCwBo2IQ6w6tp5SFI9LOOsXxdg8hy2wpX1fQAuS6iO2AtVRIIWbNesghIeTg==}
552
+ '@pactor-app/runtime@1.34.0':
553
+ resolution: {integrity: sha512-lHia4xqPvKfl4/K/aklc8abfIIW1fBDnGB5L94/p21QAkZoZwO6Bs70l3zuWuc1vYL/eyQgXrmAJERCdhiNUXg==}
554
554
  engines: {node: '>=18'}
555
555
  peerDependencies:
556
556
  react: '>=18'
557
557
 
558
- '@pactor-app/schema@1.33.0':
559
- resolution: {integrity: sha512-2J7uvpwUUcwFB01I+xc0w18B9LWMqyL9l1B6Kog5sU/oWsn4pFcQ/bncBKYpW3UW4FVGFz5AVeyN4Rd+uPIcWQ==}
558
+ '@pactor-app/schema@1.34.0':
559
+ resolution: {integrity: sha512-2EZCgAvct7CbefmYVJHJtL6LCBoehePUPVoY1vStKQkJxzOUSESH3FCKcss8eNC0aJfa0nueu+Hnpjrgee9rEw==}
560
560
  engines: {node: '>=18'}
561
561
 
562
- '@pactor-app/ui@1.33.0':
563
- resolution: {integrity: sha512-mhpWWkRfKraQaPQPN1ZuTFQdb4tf/WwWdfa3ULqFf6u+lp+8b1FrsW7cNY7lbElN46e+BgobR2fG+Yy9LurJ3w==}
562
+ '@pactor-app/ui@1.34.0':
563
+ resolution: {integrity: sha512-JDg1STA/Q37o89UmWAoZ4QgiAAisJtr9cpeFZ+WJaH+WSqBtOZr89e3urCQduebCjLr1Z+F44tHy4b1uL0/SYw==}
564
564
  engines: {node: '>=18'}
565
565
  peerDependencies:
566
566
  react: '>=18'
567
567
  react-dom: '>=18'
568
568
 
569
- '@pactor-app/vite-plugin@1.33.0':
570
- resolution: {integrity: sha512-9bNPV95H7h0/DVv5Vc431mLUkuRGX9nnwRdhoUGdcSPkReGJrTH2866i4t8w0ODtUpZ3rD9AexgatpNBlw8NvA==}
569
+ '@pactor-app/vite-plugin@1.34.0':
570
+ resolution: {integrity: sha512-C7lZ3VemtSyRhOqmihpoGZkJnzCJ/WBiyJ5X1mcI7PYVgyh0iqaV+L7vu9V58itKuVYLo1d6XdNSVT6bUYE+Rg==}
571
571
  engines: {node: '>=18'}
572
572
  peerDependencies:
573
573
  vite: '>=5'
@@ -2529,8 +2529,8 @@ packages:
2529
2529
  resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
2530
2530
  engines: {node: '>=6'}
2531
2531
 
2532
- pactor-app@1.33.0:
2533
- resolution: {integrity: sha512-BJxBNIG40chRob0veFRAXTKkplnIipZOP4MkKJ52Udn3wYQ9srey2sAr0/S+LtjRSL0P+/rjWeTuqyoJOeVlrQ==}
2532
+ pactor-app@1.34.0:
2533
+ resolution: {integrity: sha512-wSJPXxRipLUbUvu+4CZJeeU6jTB1mSihSWlHMxOg8d+qvYj1W6PCydYxu9SkGPHGC2gNWMAmHA172VYZ1gHwnQ==}
2534
2534
  engines: {node: '>=18'}
2535
2535
  peerDependencies:
2536
2536
  react: '>=18'
@@ -3613,16 +3613,16 @@ snapshots:
3613
3613
 
3614
3614
  '@oxc-project/types@0.151.0': {}
3615
3615
 
3616
- '@pactor-app/app@1.33.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)':
3616
+ '@pactor-app/app@1.34.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)':
3617
3617
  dependencies:
3618
- '@pactor-app/core': 1.33.0
3619
- '@pactor-app/expression': 1.33.0
3620
- '@pactor-app/permission': 1.33.0
3621
- '@pactor-app/resource': 1.33.0
3622
- '@pactor-app/router': 1.33.0(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
3623
- '@pactor-app/runtime': 1.33.0(react@19.2.8)
3624
- '@pactor-app/schema': 1.33.0
3625
- '@pactor-app/ui': 1.33.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
3618
+ '@pactor-app/core': 1.34.0
3619
+ '@pactor-app/expression': 1.34.0
3620
+ '@pactor-app/permission': 1.34.0
3621
+ '@pactor-app/resource': 1.34.0
3622
+ '@pactor-app/router': 1.34.0(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
3623
+ '@pactor-app/runtime': 1.34.0(react@19.2.8)
3624
+ '@pactor-app/schema': 1.34.0
3625
+ '@pactor-app/ui': 1.34.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
3626
3626
  react: 19.2.8
3627
3627
  react-dom: 19.2.8(react@19.2.8)
3628
3628
  react-router-dom: 7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
@@ -3632,13 +3632,13 @@ snapshots:
3632
3632
  - '@types/react-dom'
3633
3633
  - supports-color
3634
3634
 
3635
- '@pactor-app/chat@1.33.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)':
3635
+ '@pactor-app/chat@1.34.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)':
3636
3636
  dependencies:
3637
- '@pactor-app/core': 1.33.0
3638
- '@pactor-app/markdown': 1.33.0(@types/react@19.3.0)(react@19.2.8)
3639
- '@pactor-app/permission': 1.33.0
3640
- '@pactor-app/runtime': 1.33.0(react@19.2.8)
3641
- '@pactor-app/ui': 1.33.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
3637
+ '@pactor-app/core': 1.34.0
3638
+ '@pactor-app/markdown': 1.34.0(@types/react@19.3.0)(react@19.2.8)
3639
+ '@pactor-app/permission': 1.34.0
3640
+ '@pactor-app/runtime': 1.34.0(react@19.2.8)
3641
+ '@pactor-app/ui': 1.34.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
3642
3642
  react: 19.2.8
3643
3643
  transitivePeerDependencies:
3644
3644
  - '@date-fns/tz'
@@ -3648,22 +3648,22 @@ snapshots:
3648
3648
  - react-router-dom
3649
3649
  - supports-color
3650
3650
 
3651
- '@pactor-app/cli@1.33.0':
3651
+ '@pactor-app/cli@1.34.0':
3652
3652
  dependencies:
3653
- '@pactor-app/core': 1.33.0
3654
- '@pactor-app/expression': 1.33.0
3655
- '@pactor-app/schema': 1.33.0
3653
+ '@pactor-app/core': 1.34.0
3654
+ '@pactor-app/expression': 1.34.0
3655
+ '@pactor-app/schema': 1.34.0
3656
3656
  yaml: 2.9.1
3657
3657
 
3658
- '@pactor-app/core@1.33.0': {}
3658
+ '@pactor-app/core@1.34.0': {}
3659
3659
 
3660
- '@pactor-app/expression@1.33.0':
3660
+ '@pactor-app/expression@1.34.0':
3661
3661
  dependencies:
3662
- '@pactor-app/core': 1.33.0
3662
+ '@pactor-app/core': 1.34.0
3663
3663
 
3664
- '@pactor-app/markdown@1.33.0(@types/react@19.3.0)(react@19.2.8)':
3664
+ '@pactor-app/markdown@1.34.0(@types/react@19.3.0)(react@19.2.8)':
3665
3665
  dependencies:
3666
- '@pactor-app/core': 1.33.0
3666
+ '@pactor-app/core': 1.34.0
3667
3667
  katex: 0.18.9
3668
3668
  react: 19.2.8
3669
3669
  react-markdown: 10.1.0(@types/react@19.3.0)(react@19.2.8)
@@ -3675,41 +3675,41 @@ snapshots:
3675
3675
  - '@types/react'
3676
3676
  - supports-color
3677
3677
 
3678
- '@pactor-app/permission@1.33.0':
3678
+ '@pactor-app/permission@1.34.0':
3679
3679
  dependencies:
3680
- '@pactor-app/core': 1.33.0
3680
+ '@pactor-app/core': 1.34.0
3681
3681
 
3682
- '@pactor-app/resource@1.33.0':
3682
+ '@pactor-app/resource@1.34.0':
3683
3683
  dependencies:
3684
- '@pactor-app/core': 1.33.0
3684
+ '@pactor-app/core': 1.34.0
3685
3685
 
3686
- '@pactor-app/router@1.33.0(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)':
3686
+ '@pactor-app/router@1.34.0(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)':
3687
3687
  dependencies:
3688
- '@pactor-app/core': 1.33.0
3689
- '@pactor-app/permission': 1.33.0
3688
+ '@pactor-app/core': 1.34.0
3689
+ '@pactor-app/permission': 1.34.0
3690
3690
  react: 19.2.8
3691
3691
  react-router-dom: 7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
3692
3692
 
3693
- '@pactor-app/runtime@1.33.0(react@19.2.8)':
3693
+ '@pactor-app/runtime@1.34.0(react@19.2.8)':
3694
3694
  dependencies:
3695
- '@pactor-app/core': 1.33.0
3696
- '@pactor-app/expression': 1.33.0
3697
- '@pactor-app/schema': 1.33.0
3695
+ '@pactor-app/core': 1.34.0
3696
+ '@pactor-app/expression': 1.34.0
3697
+ '@pactor-app/schema': 1.34.0
3698
3698
  react: 19.2.8
3699
3699
 
3700
- '@pactor-app/schema@1.33.0':
3700
+ '@pactor-app/schema@1.34.0':
3701
3701
  dependencies:
3702
- '@pactor-app/core': 1.33.0
3702
+ '@pactor-app/core': 1.34.0
3703
3703
  ajv: 8.20.0
3704
3704
 
3705
- '@pactor-app/ui@1.33.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)':
3705
+ '@pactor-app/ui@1.34.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)':
3706
3706
  dependencies:
3707
3707
  '@base-ui/react': 1.8.0(@date-fns/tz@1.5.0)(@types/react@19.3.0)(date-fns@4.4.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
3708
- '@pactor-app/core': 1.33.0
3709
- '@pactor-app/markdown': 1.33.0(@types/react@19.3.0)(react@19.2.8)
3710
- '@pactor-app/permission': 1.33.0
3711
- '@pactor-app/router': 1.33.0(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
3712
- '@pactor-app/runtime': 1.33.0(react@19.2.8)
3708
+ '@pactor-app/core': 1.34.0
3709
+ '@pactor-app/markdown': 1.34.0(@types/react@19.3.0)(react@19.2.8)
3710
+ '@pactor-app/permission': 1.34.0
3711
+ '@pactor-app/router': 1.34.0(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
3712
+ '@pactor-app/runtime': 1.34.0(react@19.2.8)
3713
3713
  class-variance-authority: 0.7.1
3714
3714
  clsx: 2.1.1
3715
3715
  cmdk: 1.1.1(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
@@ -3734,10 +3734,10 @@ snapshots:
3734
3734
  - react-router-dom
3735
3735
  - supports-color
3736
3736
 
3737
- '@pactor-app/vite-plugin@1.33.0(vite@8.3.1(@types/node@20.19.43)(jiti@2.7.0)(yaml@2.9.1))':
3737
+ '@pactor-app/vite-plugin@1.34.0(vite@8.3.1(@types/node@20.19.43)(jiti@2.7.0)(yaml@2.9.1))':
3738
3738
  dependencies:
3739
- '@pactor-app/core': 1.33.0
3740
- '@pactor-app/schema': 1.33.0
3739
+ '@pactor-app/core': 1.34.0
3740
+ '@pactor-app/schema': 1.34.0
3741
3741
  vite: 8.3.1(@types/node@20.19.43)(jiti@2.7.0)(yaml@2.9.1)
3742
3742
  yaml: 2.9.1
3743
3743
 
@@ -5996,21 +5996,21 @@ snapshots:
5996
5996
 
5997
5997
  p-try@2.2.0: {}
5998
5998
 
5999
- pactor-app@1.33.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(vite@8.3.1(@types/node@20.19.43)(jiti@2.7.0)(yaml@2.9.1)):
6000
- dependencies:
6001
- '@pactor-app/app': 1.33.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
6002
- '@pactor-app/chat': 1.33.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
6003
- '@pactor-app/cli': 1.33.0
6004
- '@pactor-app/core': 1.33.0
6005
- '@pactor-app/expression': 1.33.0
6006
- '@pactor-app/markdown': 1.33.0(@types/react@19.3.0)(react@19.2.8)
6007
- '@pactor-app/permission': 1.33.0
6008
- '@pactor-app/resource': 1.33.0
6009
- '@pactor-app/router': 1.33.0(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
6010
- '@pactor-app/runtime': 1.33.0(react@19.2.8)
6011
- '@pactor-app/schema': 1.33.0
6012
- '@pactor-app/ui': 1.33.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
6013
- '@pactor-app/vite-plugin': 1.33.0(vite@8.3.1(@types/node@20.19.43)(jiti@2.7.0)(yaml@2.9.1))
5999
+ pactor-app@1.34.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(vite@8.3.1(@types/node@20.19.43)(jiti@2.7.0)(yaml@2.9.1)):
6000
+ dependencies:
6001
+ '@pactor-app/app': 1.34.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
6002
+ '@pactor-app/chat': 1.34.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
6003
+ '@pactor-app/cli': 1.34.0
6004
+ '@pactor-app/core': 1.34.0
6005
+ '@pactor-app/expression': 1.34.0
6006
+ '@pactor-app/markdown': 1.34.0(@types/react@19.3.0)(react@19.2.8)
6007
+ '@pactor-app/permission': 1.34.0
6008
+ '@pactor-app/resource': 1.34.0
6009
+ '@pactor-app/router': 1.34.0(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
6010
+ '@pactor-app/runtime': 1.34.0(react@19.2.8)
6011
+ '@pactor-app/schema': 1.34.0
6012
+ '@pactor-app/ui': 1.34.0(@date-fns/tz@1.5.0)(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.2.8(react@19.2.8))(react-router-dom@7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)
6013
+ '@pactor-app/vite-plugin': 1.34.0(vite@8.3.1(@types/node@20.19.43)(jiti@2.7.0)(yaml@2.9.1))
6014
6014
  react: 19.2.8
6015
6015
  react-dom: 19.2.8(react@19.2.8)
6016
6016
  react-router-dom: 7.18.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
@@ -15,8 +15,9 @@ import { pactorComponents } from "./components";
15
15
  * @pactor-app/app 内置;此处只提供:sitemap 源、宿主路由
16
16
  * (pathname / navigate)、HTTP 钩子,以及页面 DSL 依赖的运行时支撑层——
17
17
  * 自定义组件(components/)与调试台自定义动作(actions.ts)。
18
- * 页面数据全部走 http 数据源(/api/data/*,mock 实现见 services.ts +
19
- * mocks/,服务端路由 app/api/data/[...parts]/route.ts 复用同一套包装层)。
18
+ * 页面数据全部走 http 数据源(/api/d/*),经转发层
19
+ *(app/api/d/[...parts]/route.ts)原样转发到 serverBaseUrl(见 config.ts);
20
+ * 没有服务层接口时转发层返回空数据,页面按空态渲染。
20
21
  *
21
22
  * 登录 / 登出是普通 HTTP 调用,由 DSL 中的内置 request 动作直接表达
22
23
  *(见 src/server/yaml/ 的登录页 / 布局 DSL),无需客户端注册服务。