@pactor-app/skills 1.24.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.
- package/LICENSE +21 -0
- package/README.md +40 -0
- package/package.json +26 -0
- package/pactor/SKILL.md +373 -0
- package/pactor/references/dsl-authoring.md +448 -0
- package/prd-to-app/SKILL.md +75 -0
- package/prd-to-app/references/acceptance-checklist.md +47 -0
- package/prd-to-app/references/component-mapping.md +41 -0
- package/prd-to-app/references/mock-data-routes.md +66 -0
- package/prd-to-app/references/page-templates.md +274 -0
- package/prd-to-app/references/project-structure.md +89 -0
- package/prd-to-app/references/theme-and-style.md +41 -0
- package/prd-to-app/template/README.md +26 -0
- package/prd-to-app/template/app/[[...slug]]/page.tsx +7 -0
- package/prd-to-app/template/app/api/auth/login/route.ts +32 -0
- package/prd-to-app/template/app/api/auth/logout/route.ts +22 -0
- package/prd-to-app/template/app/api/data/[...parts]/route.ts +118 -0
- package/prd-to-app/template/app/api/public/pages/[id]/route.ts +40 -0
- package/prd-to-app/template/app/api/sitemap/route.ts +21 -0
- package/prd-to-app/template/app/api/users/route.ts +57 -0
- package/prd-to-app/template/app/favicon.ico +0 -0
- package/prd-to-app/template/app/globals.css +248 -0
- package/prd-to-app/template/app/layout.tsx +49 -0
- package/prd-to-app/template/app/login.css +122 -0
- package/prd-to-app/template/eslint.config.mjs +18 -0
- package/prd-to-app/template/next-env.d.ts +7 -0
- package/prd-to-app/template/next.config.js +32 -0
- package/prd-to-app/template/package.json +34 -0
- package/prd-to-app/template/pnpm-lock.yaml +6854 -0
- package/prd-to-app/template/pnpm-workspace.yaml +7 -0
- package/prd-to-app/template/postcss.config.mjs +7 -0
- package/prd-to-app/template/public/file.svg +1 -0
- package/prd-to-app/template/public/globe.svg +1 -0
- package/prd-to-app/template/public/next.svg +1 -0
- package/prd-to-app/template/public/skins/chenwunaifu.css +111 -0
- package/prd-to-app/template/public/skins/taijingshenlin.css +109 -0
- package/prd-to-app/template/public/skins/xuanzhimoyun.css +110 -0
- package/prd-to-app/template/public/vercel.svg +1 -0
- package/prd-to-app/template/public/window.svg +1 -0
- package/prd-to-app/template/scripts/build.mjs +35 -0
- package/prd-to-app/template/src/pactor/App.tsx +55 -0
- package/prd-to-app/template/src/pactor/actions.ts +438 -0
- package/prd-to-app/template/src/pactor/components/card-links.tsx +86 -0
- package/prd-to-app/template/src/pactor/components/chip-filter.tsx +89 -0
- package/prd-to-app/template/src/pactor/components/chip-node.tsx +46 -0
- package/prd-to-app/template/src/pactor/components/debug-chat.tsx +189 -0
- package/prd-to-app/template/src/pactor/components/index.ts +28 -0
- package/prd-to-app/template/src/pactor/components/log-status.tsx +64 -0
- package/prd-to-app/template/src/pactor/components/status-badge.tsx +46 -0
- package/prd-to-app/template/src/pactor/components/theme-switcher.tsx +136 -0
- package/prd-to-app/template/src/pactor/config.ts +28 -0
- package/prd-to-app/template/src/pactor/mocks/audit-mock.ts +403 -0
- package/prd-to-app/template/src/pactor/mocks/call-logs-mock.ts +875 -0
- package/prd-to-app/template/src/pactor/mocks/client-debug-mock.ts +188 -0
- package/prd-to-app/template/src/pactor/mocks/client-templates-mock.ts +497 -0
- package/prd-to-app/template/src/pactor/mocks/clients-mock.ts +483 -0
- package/prd-to-app/template/src/pactor/mocks/costs-mock.ts +406 -0
- package/prd-to-app/template/src/pactor/mocks/dashboard-mock.ts +192 -0
- package/prd-to-app/template/src/pactor/mocks/model-debug-mock.ts +144 -0
- package/prd-to-app/template/src/pactor/mocks/models-mock.ts +799 -0
- package/prd-to-app/template/src/pactor/mocks/ops-usage-mock.ts +806 -0
- package/prd-to-app/template/src/pactor/mocks/providers-mock.ts +424 -0
- package/prd-to-app/template/src/pactor/mocks/routes-mock.ts +604 -0
- package/prd-to-app/template/src/pactor/services.ts +185 -0
- package/prd-to-app/template/src/pactor/skin.ts +52 -0
- package/prd-to-app/template/src/server/accounts.ts +63 -0
- package/prd-to-app/template/src/server/cors.ts +34 -0
- package/prd-to-app/template/src/server/sitemap.ts +176 -0
- package/prd-to-app/template/src/server/yaml/common/dashboard.yaml +498 -0
- package/prd-to-app/template/src/server/yaml/common/login.yaml +84 -0
- package/prd-to-app/template/src/server/yaml/provider/provider-create.yaml +340 -0
- package/prd-to-app/template/src/server/yaml/provider/provider-detail.yaml +780 -0
- package/prd-to-app/template/src/server/yaml/provider/provider-edit.yaml +366 -0
- package/prd-to-app/template/src/server/yaml/provider/provider-list.yaml +1989 -0
- package/prd-to-app/template/src/server/yaml/route/route-create.yaml +511 -0
- package/prd-to-app/template/src/server/yaml/route/route-detail.yaml +610 -0
- package/prd-to-app/template/src/server/yaml/route/route-edit.yaml +809 -0
- package/prd-to-app/template/src/server/yaml/route/route-list.yaml +1793 -0
- package/prd-to-app/template/src/server/yaml/sitemap.yaml +250 -0
- package/prd-to-app/template/tsconfig.json +34 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# Sitemap 入口数据:元数据 + 布局 + 页面 + 菜单全量。
|
|
2
|
+
# 本文件是会话无关的超集;可见性由 src/server/sitemap.ts 按会话裁剪:
|
|
3
|
+
# public: true → 匿名可见(登录页)
|
|
4
|
+
# permission: x → 需登录且具备对应权限
|
|
5
|
+
# 无标记 → 需登录
|
|
6
|
+
# 页面 DSL 按模块分目录存放(yaml/<模块>/<id>.yaml,页面 id = 文件名),
|
|
7
|
+
# 由 sitemap.ts 递归收集建索引;lazy: true 不随 sitemap 内联下发,
|
|
8
|
+
# 客户端经 /api/public/pages/{id} 懒加载。
|
|
9
|
+
# updatedAt / user / permissions 为会话动态字段,由服务端在响应时注入。
|
|
10
|
+
|
|
11
|
+
id: site
|
|
12
|
+
resourceType: sitemap
|
|
13
|
+
version: 1
|
|
14
|
+
dslVersion: "1.0"
|
|
15
|
+
app: { name: Pactor Console }
|
|
16
|
+
auth: { loginPath: /login }
|
|
17
|
+
|
|
18
|
+
pages:
|
|
19
|
+
- { id: login, path: /login, title: 登录, version: 1, public: true }
|
|
20
|
+
- { id: dashboard, path: /, title: 仪表盘, version: 1, lazy: true }
|
|
21
|
+
# 模块一:模型资产 / 供应商(卡片式列表 + 详情 + 新增/编辑)
|
|
22
|
+
- {
|
|
23
|
+
id: provider-list,
|
|
24
|
+
path: /providers,
|
|
25
|
+
title: 供应商,
|
|
26
|
+
version: 1,
|
|
27
|
+
lazy: true,
|
|
28
|
+
}
|
|
29
|
+
- {
|
|
30
|
+
id: provider-create,
|
|
31
|
+
path: /providers/new,
|
|
32
|
+
title: 新增 Provider,
|
|
33
|
+
version: 1,
|
|
34
|
+
lazy: true,
|
|
35
|
+
}
|
|
36
|
+
- {
|
|
37
|
+
id: provider-detail,
|
|
38
|
+
path: /providers/:code,
|
|
39
|
+
title: Provider 详情,
|
|
40
|
+
version: 1,
|
|
41
|
+
lazy: true,
|
|
42
|
+
}
|
|
43
|
+
- {
|
|
44
|
+
id: provider-edit,
|
|
45
|
+
path: /providers/:code/edit,
|
|
46
|
+
title: 编辑 Provider,
|
|
47
|
+
version: 1,
|
|
48
|
+
lazy: true,
|
|
49
|
+
}
|
|
50
|
+
# 模块二:模型路由 / 路由(卡片式列表 + 单页纵向详情 + 单页表单)
|
|
51
|
+
- { id: route-list, path: /routes, title: 路由, version: 1, lazy: true }
|
|
52
|
+
- {
|
|
53
|
+
id: route-create,
|
|
54
|
+
path: /routes/new,
|
|
55
|
+
title: 新增路由,
|
|
56
|
+
version: 1,
|
|
57
|
+
lazy: true,
|
|
58
|
+
}
|
|
59
|
+
- {
|
|
60
|
+
id: route-detail,
|
|
61
|
+
path: /routes/:code,
|
|
62
|
+
title: 路由详情,
|
|
63
|
+
version: 1,
|
|
64
|
+
lazy: true,
|
|
65
|
+
}
|
|
66
|
+
- {
|
|
67
|
+
id: route-edit,
|
|
68
|
+
path: /routes/:code/edit,
|
|
69
|
+
title: 编辑路由,
|
|
70
|
+
version: 1,
|
|
71
|
+
lazy: true,
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
menus:
|
|
75
|
+
- {
|
|
76
|
+
id: login,
|
|
77
|
+
type: page,
|
|
78
|
+
pageId: login,
|
|
79
|
+
title: 登录,
|
|
80
|
+
layout: login,
|
|
81
|
+
public: true,
|
|
82
|
+
hidden: true,
|
|
83
|
+
}
|
|
84
|
+
- {
|
|
85
|
+
id: home,
|
|
86
|
+
type: page,
|
|
87
|
+
pageId: dashboard,
|
|
88
|
+
title: 首页,
|
|
89
|
+
icon: home,
|
|
90
|
+
layout: admin,
|
|
91
|
+
order: 1,
|
|
92
|
+
}
|
|
93
|
+
- id: assets
|
|
94
|
+
type: group
|
|
95
|
+
title: 模型资产
|
|
96
|
+
icon: package
|
|
97
|
+
order: 2
|
|
98
|
+
children:
|
|
99
|
+
- {
|
|
100
|
+
id: providers,
|
|
101
|
+
type: page,
|
|
102
|
+
pageId: provider-list,
|
|
103
|
+
title: 供应商,
|
|
104
|
+
layout: admin,
|
|
105
|
+
}
|
|
106
|
+
- id: routing
|
|
107
|
+
type: group
|
|
108
|
+
title: 模型路由
|
|
109
|
+
icon: share
|
|
110
|
+
order: 3
|
|
111
|
+
children:
|
|
112
|
+
- {
|
|
113
|
+
id: routes,
|
|
114
|
+
type: page,
|
|
115
|
+
pageId: route-list,
|
|
116
|
+
title: 路由,
|
|
117
|
+
layout: admin,
|
|
118
|
+
}
|
|
119
|
+
# 隐藏页(不出现在菜单,经列表页跳转进入;activeMenu 保持所属菜单高亮)
|
|
120
|
+
- {
|
|
121
|
+
id: provider-create,
|
|
122
|
+
type: page,
|
|
123
|
+
pageId: provider-create,
|
|
124
|
+
layout: admin,
|
|
125
|
+
hidden: true,
|
|
126
|
+
activeMenu: providers,
|
|
127
|
+
}
|
|
128
|
+
- {
|
|
129
|
+
id: provider-detail,
|
|
130
|
+
type: page,
|
|
131
|
+
pageId: provider-detail,
|
|
132
|
+
layout: admin,
|
|
133
|
+
hidden: true,
|
|
134
|
+
activeMenu: providers,
|
|
135
|
+
}
|
|
136
|
+
- {
|
|
137
|
+
id: provider-edit,
|
|
138
|
+
type: page,
|
|
139
|
+
pageId: provider-edit,
|
|
140
|
+
layout: admin,
|
|
141
|
+
hidden: true,
|
|
142
|
+
activeMenu: providers,
|
|
143
|
+
}
|
|
144
|
+
- {
|
|
145
|
+
id: route-create,
|
|
146
|
+
type: page,
|
|
147
|
+
pageId: route-create,
|
|
148
|
+
layout: admin,
|
|
149
|
+
hidden: true,
|
|
150
|
+
activeMenu: routes,
|
|
151
|
+
}
|
|
152
|
+
- {
|
|
153
|
+
id: route-detail,
|
|
154
|
+
type: page,
|
|
155
|
+
pageId: route-detail,
|
|
156
|
+
layout: admin,
|
|
157
|
+
hidden: true,
|
|
158
|
+
activeMenu: routes,
|
|
159
|
+
}
|
|
160
|
+
- {
|
|
161
|
+
id: route-edit,
|
|
162
|
+
type: page,
|
|
163
|
+
pageId: route-edit,
|
|
164
|
+
layout: admin,
|
|
165
|
+
hidden: true,
|
|
166
|
+
activeMenu: routes,
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
# 布局 DSL(PageOutlet 为页面内容出口)。
|
|
170
|
+
# 布局 body 内 ${data.session.*} 由客户端注入的 session dataSource 提供
|
|
171
|
+
#(user / app / menus)。登录 / 登出是普通 HTTP 调用,DSL 用内置 request
|
|
172
|
+
# 动作表达(跨域绝对地址,客户端 httpHooks 自动改写进项目内代理前缀)。
|
|
173
|
+
layouts:
|
|
174
|
+
# 管理端外壳:Sidebar(品牌 + SitemapMenu 导航)> Header(ThemeSwitcher
|
|
175
|
+
# 换肤 + 语言 + 用户菜单)+ Content(PageOutlet 页面出口)
|
|
176
|
+
admin:
|
|
177
|
+
dsl: "1.0"
|
|
178
|
+
body:
|
|
179
|
+
type: Layout
|
|
180
|
+
props: { className: shell-root }
|
|
181
|
+
children:
|
|
182
|
+
- type: Sidebar
|
|
183
|
+
props:
|
|
184
|
+
className: shell-main
|
|
185
|
+
brand: { title: Pactor Console, logo: /next.svg }
|
|
186
|
+
collapsible: true
|
|
187
|
+
content:
|
|
188
|
+
type: SitemapMenu
|
|
189
|
+
props:
|
|
190
|
+
items: ${data.session.menus}
|
|
191
|
+
collapsible: true
|
|
192
|
+
className: shell-menu
|
|
193
|
+
events:
|
|
194
|
+
onSelect:
|
|
195
|
+
- action: navigate
|
|
196
|
+
params: { to: "${event}" }
|
|
197
|
+
children:
|
|
198
|
+
- type: Header
|
|
199
|
+
props:
|
|
200
|
+
className: shell-header
|
|
201
|
+
locales:
|
|
202
|
+
- { label: 中文, value: zh-CN }
|
|
203
|
+
- { label: English, value: en-US }
|
|
204
|
+
user:
|
|
205
|
+
name: ${data.session.user.name}
|
|
206
|
+
items:
|
|
207
|
+
- { label: 个人中心, value: profile, icon: user }
|
|
208
|
+
- { label: 退出登录, value: logout, icon: log-out }
|
|
209
|
+
events:
|
|
210
|
+
onUserSelect:
|
|
211
|
+
- action: if
|
|
212
|
+
params:
|
|
213
|
+
condition: ${event == 'logout'}
|
|
214
|
+
then:
|
|
215
|
+
- action: request
|
|
216
|
+
params:
|
|
217
|
+
method: POST
|
|
218
|
+
url: http://localhost:9011/api/auth/logout
|
|
219
|
+
- action: app.reload
|
|
220
|
+
params: { to: /login }
|
|
221
|
+
else:
|
|
222
|
+
- action: message
|
|
223
|
+
params:
|
|
224
|
+
messageType: info
|
|
225
|
+
text: 打开个人中心(演示)
|
|
226
|
+
onLocaleChange:
|
|
227
|
+
- action: message
|
|
228
|
+
params:
|
|
229
|
+
messageType: info
|
|
230
|
+
text: 语言切换为 ${event}(演示:应用层桥接后整页生效)
|
|
231
|
+
children:
|
|
232
|
+
- type: ThemeSwitcher
|
|
233
|
+
- type: Content
|
|
234
|
+
props: { className: shell-content }
|
|
235
|
+
children:
|
|
236
|
+
- type: PageOutlet
|
|
237
|
+
# 登录页外壳:login-page 全屏渐变容器,样式见 app/login.css
|
|
238
|
+
login:
|
|
239
|
+
dsl: "1.0"
|
|
240
|
+
body:
|
|
241
|
+
type: Flex
|
|
242
|
+
props:
|
|
243
|
+
className: login-page
|
|
244
|
+
children:
|
|
245
|
+
- type: PageOutlet
|
|
246
|
+
# 裸布局:无外壳,页面铺满
|
|
247
|
+
blank:
|
|
248
|
+
dsl: "1.0"
|
|
249
|
+
body:
|
|
250
|
+
type: PageOutlet
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2017",
|
|
4
|
+
"lib": ["dom", "dom.iterable", "esnext"],
|
|
5
|
+
"allowJs": true,
|
|
6
|
+
"skipLibCheck": true,
|
|
7
|
+
"strict": true,
|
|
8
|
+
"noEmit": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"module": "esnext",
|
|
11
|
+
"moduleResolution": "bundler",
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"jsx": "react-jsx",
|
|
15
|
+
"incremental": true,
|
|
16
|
+
"plugins": [
|
|
17
|
+
{
|
|
18
|
+
"name": "next"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"paths": {
|
|
22
|
+
"@/*": ["./src/*"]
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"include": [
|
|
26
|
+
"next-env.d.ts",
|
|
27
|
+
"**/*.ts",
|
|
28
|
+
"**/*.tsx",
|
|
29
|
+
".next/types/**/*.ts",
|
|
30
|
+
".next/dev/types/**/*.ts",
|
|
31
|
+
"**/*.mts"
|
|
32
|
+
],
|
|
33
|
+
"exclude": ["node_modules"]
|
|
34
|
+
}
|