@givolt/i3-composer-agent 2.3.1 → 2.3.3
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/.agents/plugins/marketplace.json +1 -1
- package/.claude/commands/i3-prototype.md +5 -7
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.gemini/commands/i3-prototype.toml +5 -7
- package/README.md +16 -7
- package/bin/agent-targets.json +4 -2
- package/bin/i3-composer-agent.cjs +74 -7
- package/bin/install.cjs +16 -1
- package/bin/native-layout.cjs +1 -1
- package/bin/native-migration.cjs +27 -3
- package/bin/tool-selector.cjs +24 -7
- package/bin/wizard.cjs +89 -15
- package/commands/i3-prototype.toml +5 -7
- package/docs/codebuddy-setup.md +91 -3
- package/docs/codex-setup.md +6 -0
- package/docs/other-hosts.md +1 -1
- package/docs/ui-prototype-native/MAIN-SESSION-REPORT.md +66 -0
- package/docs/ui-prototype-native/USAGE.md +93 -0
- package/docs/workbuddy-setup.md +6 -0
- package/evals/cases/i3-frontend-ui-engineering.json +16 -0
- package/evals/cases/i3-ui-prototype.json +109 -0
- package/evals/cases/i3-using-agent-skills.json +28 -0
- package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.css +3 -0
- package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.js +8 -0
- package/evals/fixtures/i3-ui-prototype/admin-list/capability-definition.json +67 -0
- package/evals/fixtures/i3-ui-prototype/admin-list/index.html +89 -0
- package/evals/fixtures/i3-ui-prototype/admin-list/readme.md +52 -0
- package/evals/fixtures/i3-ui-prototype/admin-list/template.json +8 -0
- package/evals/zh-CN/cases/i3-frontend-ui-engineering.json +17 -0
- package/evals/zh-CN/cases/i3-ui-prototype.json +115 -0
- package/evals/zh-CN/cases/i3-using-agent-skills.json +30 -0
- package/hooks/codebuddy-upstream.cjs +93 -0
- package/hooks/i3-prototype.cjs +12 -0
- package/hooks/manage.cjs +162 -0
- package/package.json +61 -1
- package/plugin.json +1 -1
- package/scripts/design-provider-test.js +7 -0
- package/scripts/enterprise-template-test.js +27 -1
- package/scripts/lib/prototype-fixture.cjs +17 -0
- package/scripts/prototype-cache-test.js +55 -0
- package/scripts/prototype-generation-entry-test.js +6 -0
- package/scripts/prototype-generation-evidence-test.js +10 -0
- package/scripts/prototype-generation-native-test.js +78 -0
- package/scripts/prototype-generation-test.js +99 -0
- package/scripts/prototype-inventory-test.js +43 -0
- package/scripts/prototype-locations-test.js +79 -0
- package/scripts/prototype-project-test.js +183 -0
- package/scripts/ui-prototype-codebuddy-hook-test.js +106 -0
- package/scripts/ui-prototype-content-test.js +123 -0
- package/scripts/ui-prototype-dependencies-test.js +213 -0
- package/scripts/ui-prototype-devtools-test.js +53 -0
- package/scripts/ui-prototype-execution-evidence-test.js +62 -0
- package/scripts/ui-prototype-execution-gates-test.js +66 -0
- package/scripts/ui-prototype-execution-policy-test.js +42 -0
- package/scripts/ui-prototype-execution-runtime-test.js +27 -0
- package/scripts/ui-prototype-ide-source-test.js +73 -0
- package/scripts/ui-prototype-native-test.js +504 -0
- package/scripts/ui-prototype-registration-test.js +53 -0
- package/scripts/ui-prototype-template-test.js +261 -0
- package/scripts/ui-prototype-test.js +10 -0
- package/scripts/ui-prototype-transcript-auto-test.js +67 -0
- package/skills/i3-frontend-ui-engineering/SKILL.md +1 -1
- package/skills/i3-incremental-implementation/SKILL.md +1 -1
- package/skills/i3-ui-prototype/SKILL.md +158 -19
- package/skills/i3-ui-prototype/assets/capabilities/generation.json +833 -0
- package/skills/i3-ui-prototype/assets/capabilities/management.json +294 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/acceptance.json +51 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/component-map.json +13 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/generation-component-map.json +300 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/index.html +11 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package-lock.json +2298 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package.json +22 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/public/prototype-config.json +6 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/App.vue +136 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/components/DeviceEditor.vue +111 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/config.ts +19 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/content.ts +28 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/devices.ts +50 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/theme.ts +25 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/main.ts +18 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/style.css +50 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/useDevices.ts +66 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/devices.test.ts +44 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/theme.test.ts +26 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tsconfig.json +15 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/vite.config.ts +4 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/profile.json +174 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/readme.md +61 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/index.html +11 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package-lock.json +2298 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package.json +22 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/public/prototype-config.json +21 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/App.vue +62 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/PrototypeShell.vue +59 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/config.ts +23 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/presentation.ts +29 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/theme.ts +25 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/main.ts +18 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/style.css +26 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/presentation.test.ts +23 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/theme.test.ts +26 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tsconfig.json +15 -0
- package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/vite.config.ts +4 -0
- package/skills/i3-ui-prototype/assets/hosts/codebuddy/profile.json +13 -0
- package/skills/i3-ui-prototype/assets/optional-skills/host-targets.json +739 -0
- package/skills/i3-ui-prototype/assets/optional-skills/sources.json +27 -0
- package/skills/i3-ui-prototype/assets/templates/catalog.js +149 -0
- package/skills/i3-ui-prototype/assets/templates/catalog.json +2 -1
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/capability-definition.json +294 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/component-inventory.json +707 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/generation.json +49 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/index.html +507 -2
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline-build.json +265 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline.js +8888 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template-inventory.json +28791 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template.json +9 -0
- package/skills/i3-ui-prototype/assets/templates/gallery/index.html +5 -5
- package/skills/i3-ui-prototype/assets/templates/generation-options.js +42 -0
- package/skills/i3-ui-prototype/assets/templates/index.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/presentation.html +17 -0
- package/skills/i3-ui-prototype/references/artifact-contract.md +26 -1
- package/skills/i3-ui-prototype/references/content-template.md +81 -0
- package/skills/i3-ui-prototype/references/enterprise-admin.md +6 -0
- package/skills/i3-ui-prototype/references/entry-contract.md +71 -0
- package/skills/i3-ui-prototype/references/execution-evidence.md +66 -0
- package/skills/i3-ui-prototype/references/expert-adapter.md +33 -5
- package/skills/i3-ui-prototype/references/framework-contract.md +76 -0
- package/skills/i3-ui-prototype/references/generation-contract.md +122 -0
- package/skills/i3-ui-prototype/references/interaction-acceptance.md +169 -0
- package/skills/i3-ui-prototype/references/legacy-native.md +58 -0
- package/skills/i3-ui-prototype/references/optional-skills.md +63 -0
- package/skills/i3-ui-prototype/references/project-layout.md +92 -0
- package/skills/i3-ui-prototype/references/template-adapters.md +7 -1
- package/skills/i3-ui-prototype/references/workflow-contract.md +62 -4
- package/skills/i3-ui-prototype/scripts/adapters/easel-html.cjs +1 -1
- package/skills/i3-ui-prototype/scripts/browser-workspace.cjs +72 -0
- package/skills/i3-ui-prototype/scripts/codebuddy-context.cjs +75 -0
- package/skills/i3-ui-prototype/scripts/codebuddy-hook.cjs +157 -0
- package/skills/i3-ui-prototype/scripts/codebuddy-ide-source.cjs +69 -0
- package/skills/i3-ui-prototype/scripts/codebuddy-registration.cjs +123 -0
- package/skills/i3-ui-prototype/scripts/content-template.cjs +98 -0
- package/skills/i3-ui-prototype/scripts/enterprise-template.cjs +13 -6
- package/skills/i3-ui-prototype/scripts/execution-assertions.cjs +43 -0
- package/skills/i3-ui-prototype/scripts/execution-evidence.cjs +146 -0
- package/skills/i3-ui-prototype/scripts/execution-gates.cjs +147 -0
- package/skills/i3-ui-prototype/scripts/execution-policy.cjs +41 -0
- package/skills/i3-ui-prototype/scripts/execution-runtime.cjs +60 -0
- package/skills/i3-ui-prototype/scripts/generation-assets.cjs +18 -0
- package/skills/i3-ui-prototype/scripts/generation-contract.cjs +214 -0
- package/skills/i3-ui-prototype/scripts/generation-evidence.cjs +50 -0
- package/skills/i3-ui-prototype/scripts/generation-replan.cjs +34 -0
- package/skills/i3-ui-prototype/scripts/hosts/codebuddy.cjs +16 -0
- package/skills/i3-ui-prototype/scripts/manage-baseline.cjs +1 -1
- package/skills/i3-ui-prototype/scripts/native-browser.cjs +785 -0
- package/skills/i3-ui-prototype/scripts/native-build.cjs +91 -0
- package/skills/i3-ui-prototype/scripts/native-delivery.cjs +103 -0
- package/skills/i3-ui-prototype/scripts/native-devtools.cjs +92 -0
- package/skills/i3-ui-prototype/scripts/native-files.cjs +35 -0
- package/skills/i3-ui-prototype/scripts/native-pilot-lib.cjs +292 -0
- package/skills/i3-ui-prototype/scripts/native-pilot.cjs +50 -0
- package/skills/i3-ui-prototype/scripts/optional-skill-install.cjs +203 -0
- package/skills/i3-ui-prototype/scripts/project-registry.cjs +126 -0
- package/skills/i3-ui-prototype/scripts/prototype-dependencies.cjs +81 -0
- package/skills/i3-ui-prototype/scripts/prototype-hooks.cjs +87 -0
- package/skills/i3-ui-prototype/scripts/prototype-lib.cjs +31 -13
- package/skills/i3-ui-prototype/scripts/prototype-locations.cjs +69 -0
- package/skills/i3-ui-prototype/scripts/sync-template.cjs +19 -0
- package/skills/i3-ui-prototype/scripts/template-contract.cjs +407 -0
- package/skills/i3-ui-prototype/scripts/template-inventory.cjs +78 -0
- package/skills/i3-ui-prototype/scripts/validate-result.cjs +117 -0
- package/skills/i3-using-agent-skills/SKILL.md +2 -5
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "management",
|
|
4
|
+
"version": "1.3.0",
|
|
5
|
+
"regionModes": [
|
|
6
|
+
"management-list",
|
|
7
|
+
"edit-form",
|
|
8
|
+
"application-shell",
|
|
9
|
+
"content-reference",
|
|
10
|
+
"content"
|
|
11
|
+
],
|
|
12
|
+
"capabilities": [
|
|
13
|
+
{
|
|
14
|
+
"id": "theme",
|
|
15
|
+
"title": "四种命名主题",
|
|
16
|
+
"appliesTo": [
|
|
17
|
+
"application-shell"
|
|
18
|
+
],
|
|
19
|
+
"requirement": "required",
|
|
20
|
+
"parameters": {
|
|
21
|
+
"defaultTheme": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"required": true,
|
|
24
|
+
"enum": [
|
|
25
|
+
"light"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"presets": {
|
|
29
|
+
"type": "array",
|
|
30
|
+
"required": true,
|
|
31
|
+
"includes": [
|
|
32
|
+
"light",
|
|
33
|
+
"dark",
|
|
34
|
+
"fresh",
|
|
35
|
+
"tech"
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"scenarios": [
|
|
40
|
+
{
|
|
41
|
+
"id": "switch",
|
|
42
|
+
"title": "原生组件主题一致且保留业务状态",
|
|
43
|
+
"expected": "明亮、暗黑、清新、科技按名称选择;Table/Form/Drawer/Select浮层同步,切换不重挂、不丢筛选选择与未保存输入"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "persistence",
|
|
47
|
+
"title": "实例主题偏好隔离与恢复",
|
|
48
|
+
"expected": "独立namespace主题键,刷新恢复;同源第二实例隔离;坏缓存与拒存储安全回退"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "accessibility",
|
|
52
|
+
"title": "四主题可访问与窄屏",
|
|
53
|
+
"expected": "实际文字对比度、键盘焦点、320/375窄屏和减少动效均可验证"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "filter",
|
|
59
|
+
"title": "查询与重置",
|
|
60
|
+
"appliesTo": [
|
|
61
|
+
"management-list"
|
|
62
|
+
],
|
|
63
|
+
"requirement": "required",
|
|
64
|
+
"parameters": {
|
|
65
|
+
"resetPage": {
|
|
66
|
+
"type": "boolean",
|
|
67
|
+
"required": true,
|
|
68
|
+
"enum": [
|
|
69
|
+
true
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"clearSelection": {
|
|
73
|
+
"type": "boolean",
|
|
74
|
+
"required": true,
|
|
75
|
+
"enum": [
|
|
76
|
+
true
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"scenarios": [
|
|
81
|
+
{
|
|
82
|
+
"id": "query",
|
|
83
|
+
"title": "查询命中与无结果",
|
|
84
|
+
"expected": "条件只显示匹配记录,无匹配时显示空结果"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "reset",
|
|
88
|
+
"title": "重置查询",
|
|
89
|
+
"expected": "条件清空、回到第一页并清空选择"
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "selection",
|
|
95
|
+
"title": "当前页多选",
|
|
96
|
+
"appliesTo": [
|
|
97
|
+
"management-list"
|
|
98
|
+
],
|
|
99
|
+
"requirement": "required",
|
|
100
|
+
"parameters": {
|
|
101
|
+
"strategy": {
|
|
102
|
+
"type": "string",
|
|
103
|
+
"required": true,
|
|
104
|
+
"enum": [
|
|
105
|
+
"current-page-clear-on-change"
|
|
106
|
+
]
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
"scenarios": [
|
|
110
|
+
{
|
|
111
|
+
"id": "select-page",
|
|
112
|
+
"title": "单选、全选与部分选中",
|
|
113
|
+
"expected": "选中数量和当前页全选状态与记录一致"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"id": "clear-on-change",
|
|
117
|
+
"title": "换页或筛选清空选择",
|
|
118
|
+
"expected": "翻页或重新筛选后选中数量为零"
|
|
119
|
+
}
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"id": "pagination",
|
|
124
|
+
"title": "分页",
|
|
125
|
+
"appliesTo": [
|
|
126
|
+
"management-list"
|
|
127
|
+
],
|
|
128
|
+
"requirement": "required",
|
|
129
|
+
"parameters": {
|
|
130
|
+
"mode": {
|
|
131
|
+
"type": "string",
|
|
132
|
+
"required": false,
|
|
133
|
+
"enum": [
|
|
134
|
+
"fixed",
|
|
135
|
+
"adjustable"
|
|
136
|
+
],
|
|
137
|
+
"default": "fixed"
|
|
138
|
+
},
|
|
139
|
+
"fixedPageSize": {
|
|
140
|
+
"type": "integer",
|
|
141
|
+
"required": false,
|
|
142
|
+
"minimum": 1,
|
|
143
|
+
"requiredInMode": "fixed"
|
|
144
|
+
},
|
|
145
|
+
"defaultPageSize": {
|
|
146
|
+
"type": "integer",
|
|
147
|
+
"required": false,
|
|
148
|
+
"minimum": 1,
|
|
149
|
+
"requiredInMode": "adjustable"
|
|
150
|
+
},
|
|
151
|
+
"pageSizeOptions": {
|
|
152
|
+
"type": "array",
|
|
153
|
+
"required": false,
|
|
154
|
+
"items": {
|
|
155
|
+
"type": "integer",
|
|
156
|
+
"minimum": 1
|
|
157
|
+
},
|
|
158
|
+
"minItems": 2,
|
|
159
|
+
"uniqueItems": true,
|
|
160
|
+
"requiredInMode": "adjustable"
|
|
161
|
+
},
|
|
162
|
+
"minimumTestPages": {
|
|
163
|
+
"type": "integer",
|
|
164
|
+
"required": true,
|
|
165
|
+
"minimum": 3
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
"scenarios": [
|
|
169
|
+
{
|
|
170
|
+
"id": "pages",
|
|
171
|
+
"title": "默认容量下至少三页记录",
|
|
172
|
+
"expected": "按固定容量或可调模式的默认容量核对首、中、末页及总数"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"id": "page-size",
|
|
176
|
+
"title": "绑定分页容量",
|
|
177
|
+
"expected": "fixed 只允许 fixedPageSize 且无容量切换;adjustable 只允许 defaultPageSize 与唯一正整数 pageSizeOptions,默认值必须包含其中;实际切换每个绑定选项并恢复默认值,重置页码与选择"
|
|
178
|
+
}
|
|
179
|
+
]
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"id": "bulk",
|
|
183
|
+
"title": "批量状态变更",
|
|
184
|
+
"appliesTo": [
|
|
185
|
+
"management-list"
|
|
186
|
+
],
|
|
187
|
+
"requirement": "required",
|
|
188
|
+
"parameters": {
|
|
189
|
+
"target": {
|
|
190
|
+
"type": "string",
|
|
191
|
+
"required": true,
|
|
192
|
+
"enum": [
|
|
193
|
+
"selected-only"
|
|
194
|
+
]
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
"scenarios": [
|
|
198
|
+
{
|
|
199
|
+
"id": "selected-only",
|
|
200
|
+
"title": "批量操作正确对象",
|
|
201
|
+
"expected": "未选择时禁用;操作只更新选中记录并反馈结果"
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"id": "edit",
|
|
207
|
+
"title": "编辑表单",
|
|
208
|
+
"appliesTo": [
|
|
209
|
+
"edit-form"
|
|
210
|
+
],
|
|
211
|
+
"requirement": "required",
|
|
212
|
+
"parameters": {
|
|
213
|
+
"presentation": {
|
|
214
|
+
"type": "string",
|
|
215
|
+
"required": true,
|
|
216
|
+
"enum": [
|
|
217
|
+
"drawer"
|
|
218
|
+
]
|
|
219
|
+
},
|
|
220
|
+
"preserveOnFailure": {
|
|
221
|
+
"type": "boolean",
|
|
222
|
+
"required": true,
|
|
223
|
+
"enum": [
|
|
224
|
+
true
|
|
225
|
+
]
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
"scenarios": [
|
|
229
|
+
{
|
|
230
|
+
"id": "validation",
|
|
231
|
+
"title": "必填校验",
|
|
232
|
+
"expected": "空名称不保存并定位错误"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"id": "save",
|
|
236
|
+
"title": "保存同步",
|
|
237
|
+
"expected": "保存后列表中的正确记录更新,其他记录不变"
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"id": "retry",
|
|
241
|
+
"title": "提交失败与重试",
|
|
242
|
+
"expected": "失败保留输入,重试成功后同步列表"
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"id": "drawer-motion",
|
|
246
|
+
"title": "抽屉进入退出与模糊遮罩",
|
|
247
|
+
"expected": "进入退出动画完整,关闭后恢复焦点和滚动,遮罩实际具有滤镜"
|
|
248
|
+
}
|
|
249
|
+
]
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"id": "feedback",
|
|
253
|
+
"title": "数据状态与反馈",
|
|
254
|
+
"appliesTo": [
|
|
255
|
+
"management-list",
|
|
256
|
+
"edit-form",
|
|
257
|
+
"content"
|
|
258
|
+
],
|
|
259
|
+
"requirement": "required",
|
|
260
|
+
"parameters": {
|
|
261
|
+
"states": {
|
|
262
|
+
"type": "array",
|
|
263
|
+
"required": true,
|
|
264
|
+
"includesByMode": {
|
|
265
|
+
"management-list": [
|
|
266
|
+
"loading",
|
|
267
|
+
"empty",
|
|
268
|
+
"error",
|
|
269
|
+
"success"
|
|
270
|
+
],
|
|
271
|
+
"edit-form": [
|
|
272
|
+
"loading",
|
|
273
|
+
"error",
|
|
274
|
+
"success"
|
|
275
|
+
],
|
|
276
|
+
"content": [
|
|
277
|
+
"loading",
|
|
278
|
+
"empty",
|
|
279
|
+
"error",
|
|
280
|
+
"success"
|
|
281
|
+
]
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
"scenarios": [
|
|
286
|
+
{
|
|
287
|
+
"id": "states",
|
|
288
|
+
"title": "适用状态可触发并恢复",
|
|
289
|
+
"expected": "绑定 states 中的各状态可确定性触发;失败后保留必要输入,恢复后显示正确数据"
|
|
290
|
+
}
|
|
291
|
+
]
|
|
292
|
+
}
|
|
293
|
+
]
|
|
294
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"frameworkId": "vue-antdv-next",
|
|
4
|
+
"version": "1.1.0",
|
|
5
|
+
"paginationFocusGuard": true,
|
|
6
|
+
"browserReview": {
|
|
7
|
+
"schemaVersion": 1,
|
|
8
|
+
"required": true,
|
|
9
|
+
"skill": "i3-browser-testing-with-devtools",
|
|
10
|
+
"provider": "chrome-devtools-mcp",
|
|
11
|
+
"observations": ["dom", "screenshot", "console", "network", "accessibility", "performance"]
|
|
12
|
+
},
|
|
13
|
+
"requiredChecks": ["typecheck", "unit-test", "production-build", "real-browser"],
|
|
14
|
+
"scenarios": [
|
|
15
|
+
{
|
|
16
|
+
"id": "template-content-projection", "required": true,
|
|
17
|
+
"steps": ["Edit supported HTML titles, labels and action text in a separate working template", "Sync and create a new native instance", "Build it and inspect the projected content through real components"],
|
|
18
|
+
"expected": "The new build visibly renders the changed HTML content through native components; the original instance remains unchanged. This existing browser journey is included in the fixed 20 baseline scenarios, or 23 when theme is explicitly enabled."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "drawer-motion", "capabilityId": "edit", "required": true,
|
|
22
|
+
"steps": ["Open first record with normal motion", "Observe multiple nonterminal panel transforms during entry", "Close while recording DOM presence and transforms", "Wait for afterOpenChange(false)"],
|
|
23
|
+
"expected": "Native enter and exit occur; editor content remains during exit and is removed after exit. Do not replace this with a static screenshot or runtime declaration."
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "mask-blur", "capabilityId": "edit", "required": true,
|
|
27
|
+
"steps": ["Open editor", "Inspect visible native mask computed backdrop-filter and screenshot background", "Mutation check: remove actual filter while preserving class"],
|
|
28
|
+
"expected": "Mask has an effective non-none blur filter and visible background blur; class-only mutation fails."
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "focus-scroll", "capabilityId": "edit", "required": true,
|
|
32
|
+
"steps": ["Keyboard-open editor from a focused row action", "Check focus is in editor and cannot Tab out", "Check body scroll lock", "Close with Escape", "Check editor closes and focus returns to opener, scrolling unlocked"],
|
|
33
|
+
"expected": "Focus and scroll are restored after native exit; if the original row disappears, query is the fallback focus target."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "reduced-motion", "capabilityId": "edit", "required": true,
|
|
37
|
+
"steps": ["Emulate prefers-reduced-motion: reduce", "Open and close editor", "Inspect actual animation and transition durations"],
|
|
38
|
+
"expected": "Motion is suppressed/reduced, close lifecycle still completes and focus restores."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "instance-isolation", "capabilityId": "feedback", "required": true,
|
|
42
|
+
"steps": ["Use two generated instances on the same origin with distinct storageNamespace", "Edit one, reload both", "Reset one, reload both"],
|
|
43
|
+
"expected": "Each retains only its own data and reset has no effect on the other. Mock-version change loads deterministic seed."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "build-identity", "required": true,
|
|
47
|
+
"steps": ["Build fixed candidate into immutable output", "Hash actual index/config/loaded resources", "Compare browser network-loaded build and candidate identity", "Try serving an older build"],
|
|
48
|
+
"expected": "Current build passes; stale build fails even if page metadata claims a current candidate."
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"frameworkId": "vue-antdv-next",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"capabilities": {
|
|
6
|
+
"filter": { "components": ["Input", "Select", "Button"], "implementation": "src/useDevices.ts", "applicationResponsibilities": ["compose committed name/status filters", "reset page and selection on query", "empty-result recovery"] },
|
|
7
|
+
"selection": { "components": ["Table.rowSelection"], "implementation": "src/App.vue", "applicationResponsibilities": ["controlled selectedRowKeys", "current-page select-all and indeterminate via native Table", "clear on query/page changes", "selected count"] },
|
|
8
|
+
"pagination": { "components": ["Table.pagination"], "implementation": "src/App.vue", "applicationResponsibilities": ["21 deterministic records", "page size 10", "three pages", "filtered total and actual visible records", "clear selection on page change"] },
|
|
9
|
+
"bulk": { "components": ["Button", "Alert"], "implementation": "src/useDevices.ts", "applicationResponsibilities": ["disable without selection", "update selected identities only", "persist instance data", "clear selection and report affected count"] },
|
|
10
|
+
"edit": { "components": ["Drawer", "Form", "FormItem", "Input", "Select", "Button", "Alert"], "implementation": "src/components/DeviceEditor.vue", "applicationResponsibilities": ["required non-whitespace name", "preserve input on simulated failure", "successful retry updates one identity", "keep component mounted during exit", "explicit native mask blur", "focus restoration"] },
|
|
11
|
+
"feedback": { "components": ["Table.loading", "Empty", "Alert", "Switch"], "implementation": "src/App.vue", "applicationResponsibilities": ["deterministic loading/empty/error/success controls", "retry list without data loss", "reset fixed seed", "namespace storage by instance and mock version"] }
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"frameworkId": "vue-antdv-next",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"boundary": "Native controls provide primitives. Business rules, graph behavior and persistence require application implementation and actual browser verification.",
|
|
6
|
+
"capabilities": {
|
|
7
|
+
"layout": {
|
|
8
|
+
"components": [
|
|
9
|
+
"Layout",
|
|
10
|
+
"LayoutHeader",
|
|
11
|
+
"LayoutSider",
|
|
12
|
+
"LayoutContent",
|
|
13
|
+
"Drawer"
|
|
14
|
+
],
|
|
15
|
+
"applicationResponsibilities": [
|
|
16
|
+
"所选导航与内容布局实际呈现,区域顺序和滚动边界与固定选择一致",
|
|
17
|
+
"桌面、平板与窄屏主要内容和操作可达,不通过隐藏必需字段适配"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"navigation": {
|
|
21
|
+
"components": [
|
|
22
|
+
"Menu",
|
|
23
|
+
"Breadcrumb",
|
|
24
|
+
"Button",
|
|
25
|
+
"Result"
|
|
26
|
+
],
|
|
27
|
+
"applicationResponsibilities": [
|
|
28
|
+
"每个声明页面可达,当前项、返回、深链接及不存在页面状态正确",
|
|
29
|
+
"按固定规则检查折叠、移动菜单、返回后的筛选和页码状态"
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"accessibility": {
|
|
33
|
+
"components": [
|
|
34
|
+
"Form",
|
|
35
|
+
"Button",
|
|
36
|
+
"Input",
|
|
37
|
+
"Drawer"
|
|
38
|
+
],
|
|
39
|
+
"applicationResponsibilities": [
|
|
40
|
+
"名称、标签、Tab顺序、焦点可见及主要操作键盘可达",
|
|
41
|
+
"实际文字与浮层可读;窄屏无阻断性裁剪,减少动效仍可操作"
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
"theme": {
|
|
45
|
+
"components": [
|
|
46
|
+
"ConfigProvider",
|
|
47
|
+
"Select"
|
|
48
|
+
],
|
|
49
|
+
"applicationResponsibilities": [
|
|
50
|
+
"明亮、暗黑、清新、科技均实际覆盖组件、浮层与外壳,默认明亮且切换保留业务状态",
|
|
51
|
+
"刷新恢复、非法偏好和拒绝存储安全回退,实例间隔离"
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
"visual": {
|
|
55
|
+
"components": [
|
|
56
|
+
"ConfigProvider",
|
|
57
|
+
"Flex",
|
|
58
|
+
"Space"
|
|
59
|
+
],
|
|
60
|
+
"applicationResponsibilities": [
|
|
61
|
+
"实际风格、间距密度、圆角、边框与阴影符合所选预设,未覆盖框架和客户明确要求"
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
"interaction": {
|
|
65
|
+
"components": [
|
|
66
|
+
"Button",
|
|
67
|
+
"Form",
|
|
68
|
+
"Alert",
|
|
69
|
+
"Spin"
|
|
70
|
+
],
|
|
71
|
+
"applicationResponsibilities": [
|
|
72
|
+
"每个声明业务操作有有效结果;不可用操作说明原因,忙碌时防止重复提交",
|
|
73
|
+
"操作失败后对象和输入保留,可按规定重试,不用提示文字冒充操作完成"
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
"collection": {
|
|
77
|
+
"components": [
|
|
78
|
+
"Table",
|
|
79
|
+
"List"
|
|
80
|
+
],
|
|
81
|
+
"applicationResponsibilities": [
|
|
82
|
+
"记录稳定身份、总数、可见行与行操作对象对应,不串记录",
|
|
83
|
+
"逐项检查列表工具栏和行操作,不以一个按钮代替全部操作"
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
"filter": {
|
|
87
|
+
"components": [
|
|
88
|
+
"Form",
|
|
89
|
+
"Input",
|
|
90
|
+
"Select",
|
|
91
|
+
"TreeSelect",
|
|
92
|
+
"Button"
|
|
93
|
+
],
|
|
94
|
+
"applicationResponsibilities": [
|
|
95
|
+
"命中、无结果、重置正确;页码与选择按合同重置"
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
"selection": {
|
|
99
|
+
"components": [
|
|
100
|
+
"Table.rowSelection",
|
|
101
|
+
"Checkbox"
|
|
102
|
+
],
|
|
103
|
+
"applicationResponsibilities": [
|
|
104
|
+
"当前页单选、全选、半选及不可选记录正确",
|
|
105
|
+
"筛选、翻页或容量变化按约定清空选择"
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
"pagination": {
|
|
109
|
+
"components": [
|
|
110
|
+
"Table.pagination",
|
|
111
|
+
"Pagination"
|
|
112
|
+
],
|
|
113
|
+
"applicationResponsibilities": [
|
|
114
|
+
"默认容量覆盖首中末页,总数与实际行一致",
|
|
115
|
+
"逐一切换固定选项、恢复默认,页码及选择符合约定"
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
"bulk": {
|
|
119
|
+
"components": [
|
|
120
|
+
"Button",
|
|
121
|
+
"Alert",
|
|
122
|
+
"Modal"
|
|
123
|
+
],
|
|
124
|
+
"applicationResponsibilities": [
|
|
125
|
+
"无选择不可提交,只影响选中身份;成功范围与失败策略来自本次PRD"
|
|
126
|
+
]
|
|
127
|
+
},
|
|
128
|
+
"feedback": {
|
|
129
|
+
"components": [
|
|
130
|
+
"Spin",
|
|
131
|
+
"Empty",
|
|
132
|
+
"Alert",
|
|
133
|
+
"Result",
|
|
134
|
+
"message"
|
|
135
|
+
],
|
|
136
|
+
"applicationResponsibilities": [
|
|
137
|
+
"逐区域触发加载、无数据、筛选无结果、失败和恢复;不存在记录与权限限制有明确状态"
|
|
138
|
+
]
|
|
139
|
+
},
|
|
140
|
+
"columns": {
|
|
141
|
+
"components": [
|
|
142
|
+
"Table",
|
|
143
|
+
"Checkbox",
|
|
144
|
+
"Dropdown",
|
|
145
|
+
"Button"
|
|
146
|
+
],
|
|
147
|
+
"applicationResponsibilities": [
|
|
148
|
+
"显示/隐藏、上移/下移、锁定列和恢复默认均生效",
|
|
149
|
+
"刷新恢复约定列偏好,存储失败仍可本轮操作,宽表可滚动且操作列可达"
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
"deletion": {
|
|
153
|
+
"components": [
|
|
154
|
+
"Modal",
|
|
155
|
+
"Alert",
|
|
156
|
+
"Button"
|
|
157
|
+
],
|
|
158
|
+
"applicationResponsibilities": [
|
|
159
|
+
"核对对象身份、数量、可删除与受阻原因,取消不改变数据",
|
|
160
|
+
"失败保留选择;记录变化重新核对,结果与本次PRD的整批/部分成功策略一致"
|
|
161
|
+
]
|
|
162
|
+
},
|
|
163
|
+
"edit": {
|
|
164
|
+
"components": [
|
|
165
|
+
"Form",
|
|
166
|
+
"FormItem",
|
|
167
|
+
"Input",
|
|
168
|
+
"Select",
|
|
169
|
+
"Drawer",
|
|
170
|
+
"Modal"
|
|
171
|
+
],
|
|
172
|
+
"applicationResponsibilities": [
|
|
173
|
+
"字段类型、必填、格式、长度、联动和只读状态逐项对应需求",
|
|
174
|
+
"校验失败定位字段,提交失败保留输入,再试成功更新正确记录"
|
|
175
|
+
]
|
|
176
|
+
},
|
|
177
|
+
"dirty": {
|
|
178
|
+
"components": [
|
|
179
|
+
"Modal",
|
|
180
|
+
"Drawer",
|
|
181
|
+
"Button"
|
|
182
|
+
],
|
|
183
|
+
"applicationResponsibilities": [
|
|
184
|
+
"关闭、返回、切页和身份变化按约定保留/确认丢弃,不静默丢失输入",
|
|
185
|
+
"需要草稿恢复时验证恢复与版本;不需要时明确丢弃策略"
|
|
186
|
+
]
|
|
187
|
+
},
|
|
188
|
+
"dialog": {
|
|
189
|
+
"components": [
|
|
190
|
+
"Drawer",
|
|
191
|
+
"Modal"
|
|
192
|
+
],
|
|
193
|
+
"applicationResponsibilities": [
|
|
194
|
+
"实际打开与关闭的生命周期完整,抽屉进出中间态存在,未提前卸载",
|
|
195
|
+
"遮罩、Escape、取消、背景滚动与焦点恢复符合固定呈现参数,嵌套弹层不串状态"
|
|
196
|
+
]
|
|
197
|
+
},
|
|
198
|
+
"menu": {
|
|
199
|
+
"components": [
|
|
200
|
+
"Dropdown",
|
|
201
|
+
"Menu",
|
|
202
|
+
"Button"
|
|
203
|
+
],
|
|
204
|
+
"applicationResponsibilities": [
|
|
205
|
+
"菜单键盘开关和焦点正确,逐操作核对对象、权限与结果"
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
"detail": {
|
|
209
|
+
"components": [
|
|
210
|
+
"Descriptions",
|
|
211
|
+
"Tabs",
|
|
212
|
+
"Timeline",
|
|
213
|
+
"Card"
|
|
214
|
+
],
|
|
215
|
+
"applicationResponsibilities": [
|
|
216
|
+
"详情对象、分组、状态与列表对应",
|
|
217
|
+
"采用Tab/历史时切换和返回保留约定上下文,未声明的示例业务不自动移植"
|
|
218
|
+
]
|
|
219
|
+
},
|
|
220
|
+
"hierarchy": {
|
|
221
|
+
"components": [
|
|
222
|
+
"Tree",
|
|
223
|
+
"TreeSelect",
|
|
224
|
+
"Table.expandable"
|
|
225
|
+
],
|
|
226
|
+
"applicationResponsibilities": [
|
|
227
|
+
"逐层展开/收起,路径和节点身份稳定,无数据和不可用节点明确",
|
|
228
|
+
"父子选择策略、半选、搜索和关联列表按声明类型实测,树表展开不丢行或误选"
|
|
229
|
+
]
|
|
230
|
+
},
|
|
231
|
+
"wizard": {
|
|
232
|
+
"components": [
|
|
233
|
+
"Steps",
|
|
234
|
+
"Form",
|
|
235
|
+
"Button"
|
|
236
|
+
],
|
|
237
|
+
"applicationResponsibilities": [
|
|
238
|
+
"每步校验,非法输入不能越过;前后切换保留正确数据",
|
|
239
|
+
"最终复核与提交对象一致,失败保留可重试,关闭和继续符合草稿策略"
|
|
240
|
+
]
|
|
241
|
+
},
|
|
242
|
+
"canvas": {
|
|
243
|
+
"components": [
|
|
244
|
+
"Button",
|
|
245
|
+
"Tooltip",
|
|
246
|
+
"Form"
|
|
247
|
+
],
|
|
248
|
+
"applicationResponsibilities": [
|
|
249
|
+
"节点选择与属性联动,移动和键盘操作作用于同一节点",
|
|
250
|
+
"缩放、适合画布、滚动正确,拖动坐标随缩放换算",
|
|
251
|
+
"新增删除节点与连线、连线规则及校验反馈正确",
|
|
252
|
+
"只读不能编辑,未保存保护与保存结果符合本次业务状态"
|
|
253
|
+
]
|
|
254
|
+
},
|
|
255
|
+
"authorization": {
|
|
256
|
+
"components": [
|
|
257
|
+
"Tree",
|
|
258
|
+
"Checkbox",
|
|
259
|
+
"Button",
|
|
260
|
+
"Alert"
|
|
261
|
+
],
|
|
262
|
+
"applicationResponsibilities": [
|
|
263
|
+
"菜单、按钮、字段的隐藏/禁用和原因符合实际PRD角色",
|
|
264
|
+
"切换范围及直达路由按模拟权限合同处理;不把前端演示称为服务端授权"
|
|
265
|
+
]
|
|
266
|
+
},
|
|
267
|
+
"lifecycle": {
|
|
268
|
+
"components": [
|
|
269
|
+
"Tag",
|
|
270
|
+
"Steps",
|
|
271
|
+
"Timeline",
|
|
272
|
+
"Button"
|
|
273
|
+
],
|
|
274
|
+
"applicationResponsibilities": [
|
|
275
|
+
"允许操作随业务状态变化,拒绝无效转移;版本冲突和历史展示有依据"
|
|
276
|
+
]
|
|
277
|
+
},
|
|
278
|
+
"persistence": {
|
|
279
|
+
"components": [
|
|
280
|
+
"Alert",
|
|
281
|
+
"Button"
|
|
282
|
+
],
|
|
283
|
+
"applicationResponsibilities": [
|
|
284
|
+
"本次实例、用户、范围和页面的偏好或草稿按约定隔离",
|
|
285
|
+
"坏缓存与拒存储有恢复,不静默覆盖其他实例"
|
|
286
|
+
]
|
|
287
|
+
},
|
|
288
|
+
"relation": {
|
|
289
|
+
"components": [
|
|
290
|
+
"Modal",
|
|
291
|
+
"Tree",
|
|
292
|
+
"Table",
|
|
293
|
+
"Input"
|
|
294
|
+
],
|
|
295
|
+
"applicationResponsibilities": [
|
|
296
|
+
"检索、范围过滤、选择、取消和回填对象一致"
|
|
297
|
+
]
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<meta name="color-scheme" content="light">
|
|
7
|
+
<link rel="icon" href="data:,">
|
|
8
|
+
<title>设备管理 · 原型</title>
|
|
9
|
+
</head>
|
|
10
|
+
<body><div id="app"></div><script type="module" src="/src/main.ts"></script></body>
|
|
11
|
+
</html>
|