@miniidealab/openlogos 0.9.27 → 0.9.28
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/claude-plugin-template/.claude-plugin/plugin.json +1 -1
- package/claude-plugin-template/skills/product-designer/SKILL.md +26 -1
- package/claude-plugin-template/skills/ui-ux-pro-max/LICENSE +21 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/SKILL.md +379 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/UPSTREAM.md +43 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/claude-plugin-template/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/dist/commands/detect.d.ts +9 -0
- package/dist/commands/detect.d.ts.map +1 -1
- package/dist/commands/detect.js +13 -11
- package/dist/commands/detect.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +49 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +48 -56
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/verify.js +2 -2
- package/dist/commands/verify.js.map +1 -1
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +4 -0
- package/dist/i18n.js.map +1 -1
- package/dist/lib/project-yaml.d.ts +34 -0
- package/dist/lib/project-yaml.d.ts.map +1 -0
- package/dist/lib/project-yaml.js +224 -0
- package/dist/lib/project-yaml.js.map +1 -0
- package/package.json +1 -1
- package/skills/product-designer/SKILL.en.md +26 -1
- package/skills/product-designer/SKILL.md +26 -1
- package/skills/ui-ux-pro-max/LICENSE +21 -0
- package/skills/ui-ux-pro-max/SKILL.md +379 -0
- package/skills/ui-ux-pro-max/UPSTREAM.md +43 -0
- package/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/spec/cli-json-output.md +36 -2
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { parse as parseYaml, parseDocument } from 'yaml';
|
|
4
|
+
function asRecord(value) {
|
|
5
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
6
|
+
return undefined;
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
function asStringArray(value) {
|
|
10
|
+
if (!Array.isArray(value))
|
|
11
|
+
return undefined;
|
|
12
|
+
const items = value.filter((item) => typeof item === 'string');
|
|
13
|
+
return items;
|
|
14
|
+
}
|
|
15
|
+
function asBoolean(value) {
|
|
16
|
+
return typeof value === 'boolean' ? value : undefined;
|
|
17
|
+
}
|
|
18
|
+
function asNodeJson(node) {
|
|
19
|
+
if (!node || typeof node !== 'object')
|
|
20
|
+
return undefined;
|
|
21
|
+
const toJSON = node.toJSON;
|
|
22
|
+
if (typeof toJSON !== 'function')
|
|
23
|
+
return undefined;
|
|
24
|
+
try {
|
|
25
|
+
return toJSON.call(node, null, {});
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function collectMessages(...values) {
|
|
32
|
+
const messages = new Set();
|
|
33
|
+
for (const value of values) {
|
|
34
|
+
const message = value instanceof Error
|
|
35
|
+
? value.message
|
|
36
|
+
: typeof value === 'string'
|
|
37
|
+
? value
|
|
38
|
+
: value && typeof value === 'object' && 'message' in value
|
|
39
|
+
? String(value.message ?? '')
|
|
40
|
+
: String(value ?? '');
|
|
41
|
+
const trimmed = message.trim();
|
|
42
|
+
if (trimmed)
|
|
43
|
+
messages.add(trimmed);
|
|
44
|
+
}
|
|
45
|
+
return Array.from(messages);
|
|
46
|
+
}
|
|
47
|
+
function normalizeModule(raw) {
|
|
48
|
+
const record = asRecord(raw);
|
|
49
|
+
if (!record || typeof record.id !== 'string' || typeof record.name !== 'string')
|
|
50
|
+
return null;
|
|
51
|
+
const module = {
|
|
52
|
+
id: record.id,
|
|
53
|
+
name: record.name,
|
|
54
|
+
};
|
|
55
|
+
if (typeof record.lifecycle === 'string') {
|
|
56
|
+
module.lifecycle = record.lifecycle;
|
|
57
|
+
}
|
|
58
|
+
const skipPhases = asStringArray(record.skip_phases);
|
|
59
|
+
if (skipPhases) {
|
|
60
|
+
module.skip_phases = skipPhases;
|
|
61
|
+
}
|
|
62
|
+
const deploymentRequired = asBoolean(record.deployment_required);
|
|
63
|
+
if (deploymentRequired !== undefined) {
|
|
64
|
+
module.deployment_required = deploymentRequired;
|
|
65
|
+
}
|
|
66
|
+
const smokeRequired = asBoolean(record.smoke_required);
|
|
67
|
+
if (smokeRequired !== undefined) {
|
|
68
|
+
module.smoke_required = smokeRequired;
|
|
69
|
+
}
|
|
70
|
+
return module;
|
|
71
|
+
}
|
|
72
|
+
function normalizeScenario(raw) {
|
|
73
|
+
const record = asRecord(raw);
|
|
74
|
+
if (!record || typeof record.id !== 'string')
|
|
75
|
+
return null;
|
|
76
|
+
const scenario = { id: record.id };
|
|
77
|
+
if (typeof record.module === 'string') {
|
|
78
|
+
scenario.module = record.module;
|
|
79
|
+
}
|
|
80
|
+
return scenario;
|
|
81
|
+
}
|
|
82
|
+
function normalizeDeploymentGate(raw) {
|
|
83
|
+
const record = asRecord(raw);
|
|
84
|
+
if (!record)
|
|
85
|
+
return null;
|
|
86
|
+
const gate = {};
|
|
87
|
+
const deploymentRequired = asBoolean(record.deployment_required);
|
|
88
|
+
if (deploymentRequired !== undefined) {
|
|
89
|
+
gate.deployment_required = deploymentRequired;
|
|
90
|
+
}
|
|
91
|
+
const smokeRequired = asBoolean(record.smoke_required);
|
|
92
|
+
if (smokeRequired !== undefined) {
|
|
93
|
+
gate.smoke_required = smokeRequired;
|
|
94
|
+
}
|
|
95
|
+
const environments = asStringArray(record.environments);
|
|
96
|
+
if (environments) {
|
|
97
|
+
gate.environments = environments;
|
|
98
|
+
}
|
|
99
|
+
return Object.keys(gate).length > 0 ? gate : null;
|
|
100
|
+
}
|
|
101
|
+
function normalizeProjectYaml(raw) {
|
|
102
|
+
const record = asRecord(raw);
|
|
103
|
+
if (!record)
|
|
104
|
+
return null;
|
|
105
|
+
const data = {};
|
|
106
|
+
const modules = Array.isArray(record.modules)
|
|
107
|
+
? record.modules.map(normalizeModule).filter((item) => item !== null)
|
|
108
|
+
: undefined;
|
|
109
|
+
if (modules !== undefined) {
|
|
110
|
+
data.modules = modules;
|
|
111
|
+
}
|
|
112
|
+
const scenarios = Array.isArray(record.scenarios)
|
|
113
|
+
? record.scenarios.map(normalizeScenario).filter((item) => item !== null)
|
|
114
|
+
: undefined;
|
|
115
|
+
if (scenarios !== undefined) {
|
|
116
|
+
data.scenarios = scenarios;
|
|
117
|
+
}
|
|
118
|
+
const deploymentGates = asRecord(record.deployment_gates);
|
|
119
|
+
if (deploymentGates) {
|
|
120
|
+
const normalized = {};
|
|
121
|
+
for (const [moduleId, gate] of Object.entries(deploymentGates)) {
|
|
122
|
+
const normalizedGate = normalizeDeploymentGate(gate);
|
|
123
|
+
if (normalizedGate) {
|
|
124
|
+
normalized[moduleId] = normalizedGate;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (Object.keys(normalized).length > 0) {
|
|
128
|
+
data.deployment_gates = normalized;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return Object.keys(data).length > 0 ? data : null;
|
|
132
|
+
}
|
|
133
|
+
function recoverProjectYamlData(content) {
|
|
134
|
+
const doc = parseDocument(content);
|
|
135
|
+
const recoveredFields = [];
|
|
136
|
+
const data = {};
|
|
137
|
+
let hasRecoveredModules = false;
|
|
138
|
+
const rawModules = asNodeJson(doc.get('modules', true));
|
|
139
|
+
const modules = Array.isArray(rawModules)
|
|
140
|
+
? rawModules.map(normalizeModule).filter((item) => item !== null)
|
|
141
|
+
: undefined;
|
|
142
|
+
if (modules !== undefined) {
|
|
143
|
+
if (modules.length > 0) {
|
|
144
|
+
data.modules = modules;
|
|
145
|
+
recoveredFields.push('modules');
|
|
146
|
+
hasRecoveredModules = true;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
else if (rawModules !== undefined) {
|
|
150
|
+
recoveredFields.push('modules');
|
|
151
|
+
}
|
|
152
|
+
const rawScenarios = asNodeJson(doc.get('scenarios', true));
|
|
153
|
+
const scenarios = Array.isArray(rawScenarios)
|
|
154
|
+
? rawScenarios.map(normalizeScenario).filter((item) => item !== null)
|
|
155
|
+
: undefined;
|
|
156
|
+
if (scenarios !== undefined) {
|
|
157
|
+
data.scenarios = scenarios;
|
|
158
|
+
recoveredFields.push('scenarios');
|
|
159
|
+
}
|
|
160
|
+
const rawDeploymentGates = asNodeJson(doc.get('deployment_gates', true));
|
|
161
|
+
const deploymentGatesRecord = asRecord(rawDeploymentGates);
|
|
162
|
+
if (deploymentGatesRecord) {
|
|
163
|
+
const normalized = {};
|
|
164
|
+
for (const [moduleId, gate] of Object.entries(deploymentGatesRecord)) {
|
|
165
|
+
const normalizedGate = normalizeDeploymentGate(gate);
|
|
166
|
+
if (normalizedGate) {
|
|
167
|
+
normalized[moduleId] = normalizedGate;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (Object.keys(normalized).length > 0) {
|
|
171
|
+
data.deployment_gates = normalized;
|
|
172
|
+
recoveredFields.push('deployment_gates');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
data: Object.keys(data).length > 0 ? data : null,
|
|
177
|
+
recovered_fields: recoveredFields,
|
|
178
|
+
has_recovered_modules: hasRecoveredModules,
|
|
179
|
+
messages: collectMessages('logos-project.yaml 存在可恢复的解析错误', ...doc.errors.map(error => error?.message ?? error)),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
function buildDiagnostics(status, messages, recoveredFields = [], hasRecoveredModules = false) {
|
|
183
|
+
const finalMessages = [...messages];
|
|
184
|
+
if (status === 'recovered' && recoveredFields.length > 0) {
|
|
185
|
+
finalMessages.push(`已从 AST 恢复:${recoveredFields.join('、')}`);
|
|
186
|
+
}
|
|
187
|
+
if (status === 'error' && !hasRecoveredModules) {
|
|
188
|
+
finalMessages.push('无法从 AST 恢复 modules');
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
parse_status: status,
|
|
192
|
+
messages: finalMessages,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
export function readProjectYaml(root) {
|
|
196
|
+
const yamlPath = join(root, 'logos', 'logos-project.yaml');
|
|
197
|
+
if (!existsSync(yamlPath)) {
|
|
198
|
+
return {
|
|
199
|
+
exists: false,
|
|
200
|
+
data: null,
|
|
201
|
+
yaml_diagnostics: null,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
const content = readFileSync(yamlPath, 'utf-8');
|
|
205
|
+
try {
|
|
206
|
+
return {
|
|
207
|
+
exists: true,
|
|
208
|
+
data: normalizeProjectYaml(parseYaml(content)),
|
|
209
|
+
yaml_diagnostics: null,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
const recovered = recoverProjectYamlData(content);
|
|
214
|
+
const status = recovered.has_recovered_modules
|
|
215
|
+
? 'recovered'
|
|
216
|
+
: 'error';
|
|
217
|
+
return {
|
|
218
|
+
exists: true,
|
|
219
|
+
data: recovered.data,
|
|
220
|
+
yaml_diagnostics: buildDiagnostics(status, collectMessages(error, ...recovered.messages), recovered.recovered_fields, recovered.has_recovered_modules),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=project-yaml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-yaml.js","sourceRoot":"","sources":["../../src/lib/project-yaml.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -29,6 +29,7 @@ Before executing this Skill, first determine the product type (inferred from the
|
|
|
29
29
|
| **AI Skills / Conversational Product** | User interacts with AI via natural language | Dialogue flowchart + sample dialogue scripts | Dialogue steps, AI questioning strategy, deliverable format |
|
|
30
30
|
| **Library / SDK** | Called by other programs | API usage examples (code snippets) | Public interfaces, parameter design, return values, error codes |
|
|
31
31
|
| **Mobile Application** | Mobile UI | HTML pages (mobile viewport) | Gesture interaction, navigation patterns, offline state |
|
|
32
|
+
| **Desktop Application** | Locally installed, has GUI, standalone window (Electron / Tauri / SwiftUI / Jetpack Compose / Qt / WPF / GTK, etc.) | HTML simulating desktop layout (with menu bar / toolbar / status bar) or stack-specific style guide | Window management, menu bar / context menu, keyboard shortcuts, system tray, multi-window coordination, file system interaction |
|
|
32
33
|
| **Hybrid** | Combination of multiple deliverables | Select the corresponding format for each deliverable | Interaction handoffs between deliverables |
|
|
33
34
|
|
|
34
35
|
## Execution Steps
|
|
@@ -52,6 +53,7 @@ Design architecture at different levels based on the product type:
|
|
|
52
53
|
- **CLI Tool**: Command tree structure, subcommand hierarchy, global options
|
|
53
54
|
- **AI Skills**: Skill trigger relationships, dialogue step orchestration, deliverable dependency chain
|
|
54
55
|
- **Library / SDK**: Module structure, public API grouping
|
|
56
|
+
- **Desktop Application**: Window structure, menu / shortcut system, IPC design (main↔renderer process / native layers), local storage and file system
|
|
55
57
|
|
|
56
58
|
### Step 3: Refine Interaction Specifications Per Scenario
|
|
57
59
|
|
|
@@ -63,7 +65,30 @@ Building on the Phase 1 GIVEN/WHEN/THEN, refine down to the interaction element
|
|
|
63
65
|
|
|
64
66
|
### Step 5: Generate Prototypes
|
|
65
67
|
|
|
66
|
-
|
|
68
|
+
#### Step 5a (GUI Products Only): Invoke ui-ux-pro-max to Get the Design System
|
|
69
|
+
|
|
70
|
+
**When to apply**: Any product type whose deliverables include a graphical user interface (GUI)—
|
|
71
|
+
- ✅ Trigger: Web Application / Mobile Application / Desktop Application (Electron / Tauri / SwiftUI / Jetpack Compose / Qt / WPF / GTK, etc.) / Hybrid products with GUI deliverables
|
|
72
|
+
- ❌ Skip: Pure CLI Tool / Library / AI Skills / pure API service or any product type without GUI deliverables
|
|
73
|
+
|
|
74
|
+
**Steps**:
|
|
75
|
+
|
|
76
|
+
1. Extract keywords from the Phase 1 requirements document: product type (SaaS / e-commerce / dashboard / portfolio, etc.) + industry + style preferences
|
|
77
|
+
2. Invoke `ui-ux-pro-max`:
|
|
78
|
+
```bash
|
|
79
|
+
python3 logos/skills/ui-ux-pro-max/scripts/search.py "<product_type> <industry> <style_keywords>" --design-system -p "<project_name>"
|
|
80
|
+
```
|
|
81
|
+
3. Consume the output: style + color palette + font pairing + landing page patterns + anti-patterns as the visual foundation for Step 5 prototype generation
|
|
82
|
+
- Web Application: implement the style guide in HTML
|
|
83
|
+
- Desktop / Mobile Application: produce a style guide per the corresponding tech stack (Electron / Tauri reuse react / shadcn / html-tailwind data; SwiftUI / Jetpack Compose / Flutter map directly to their stack data; other native stacks use stack-agnostic style/color/font recommendations)
|
|
84
|
+
|
|
85
|
+
**Fallback**:
|
|
86
|
+
|
|
87
|
+
If `python3` is unavailable, skip this step and inform the user: "Python 3 (required by ui-ux-pro-max) is not detected. The prototype will be generated using a generic style. Install Python 3 and retry to get professional design system recommendations." Continue with Step 5 using a generic style; do not block.
|
|
88
|
+
|
|
89
|
+
#### Step 5b: Generate Prototypes per Product Type
|
|
90
|
+
|
|
91
|
+
Generate prototypes in the format corresponding to the product type (see examples). For GUI products, build on the design system obtained in Step 5a; for non-GUI products, pick the prototype format directly by product type.
|
|
67
92
|
|
|
68
93
|
### Step 6: Output the Product Design Document
|
|
69
94
|
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
| **AI Skills / 对话式产品** | 用户通过自然语言与 AI 交互 | 对话流程图 + 示例对话脚本 | 对话步骤、AI 提问策略、产出物格式 |
|
|
30
30
|
| **库 / SDK** | 被其他程序调用 | API 使用示例(代码片段) | 公开接口、参数设计、返回值、错误码 |
|
|
31
31
|
| **移动应用** | 手机端 UI | HTML 页面(移动视口) | 手势交互、导航模式、离线状态 |
|
|
32
|
+
| **桌面应用** | 本地安装、含 GUI、独立窗口(Electron / Tauri / SwiftUI / Jetpack Compose / Qt / WPF / GTK 等) | HTML 模拟桌面布局(含菜单栏 / 工具栏 / 状态栏)或对应栈风格指南 | 窗口管理、菜单栏 / 上下文菜单、快捷键、系统托盘、多窗口协作、文件系统交互 |
|
|
32
33
|
| **混合型** | 多种交付物组合 | 按交付物分别选择对应形式 | 各交付物间的交互衔接 |
|
|
33
34
|
|
|
34
35
|
## 执行步骤
|
|
@@ -52,6 +53,7 @@
|
|
|
52
53
|
- **CLI 工具**:命令树结构、子命令层级、全局选项
|
|
53
54
|
- **AI Skills**:Skill 触发关系、对话步骤编排、产出物依赖链
|
|
54
55
|
- **库 / SDK**:模块结构、公开 API 分组
|
|
56
|
+
- **桌面应用**:窗口结构、菜单 / 快捷键体系、IPC 设计(主进程↔渲染进程 / 各 native 层)、本地存储与文件系统
|
|
55
57
|
|
|
56
58
|
### Step 3: 逐场景细化交互规格
|
|
57
59
|
|
|
@@ -63,7 +65,30 @@
|
|
|
63
65
|
|
|
64
66
|
### Step 5: 生成原型
|
|
65
67
|
|
|
66
|
-
|
|
68
|
+
#### Step 5a(仅 GUI 类产品):调用 ui-ux-pro-max 获取设计系统
|
|
69
|
+
|
|
70
|
+
**适用条件**:凡产品交付物中包含图形用户界面(GUI)的产品类型——
|
|
71
|
+
- ✅ 触发:Web 应用 / 移动应用 / 桌面应用(Electron / Tauri / SwiftUI / Jetpack Compose / Qt / WPF / GTK 等)/ 混合型中含 GUI 交付物的部分
|
|
72
|
+
- ❌ 不触发:纯 CLI 工具 / Library / AI Skills / 纯 API 服务 等无 GUI 交付物的产品
|
|
73
|
+
|
|
74
|
+
**执行步骤**:
|
|
75
|
+
|
|
76
|
+
1. 从 Phase 1 需求文档提取关键词:产品类型(SaaS / e-commerce / dashboard / portfolio 等)+ 行业 + 风格倾向
|
|
77
|
+
2. 调用 `ui-ux-pro-max`:
|
|
78
|
+
```bash
|
|
79
|
+
python3 logos/skills/ui-ux-pro-max/scripts/search.py "<product_type> <industry> <style_keywords>" --design-system -p "<项目名>"
|
|
80
|
+
```
|
|
81
|
+
3. 消费输出:风格 + 调色板 + 字体配对 + 登陆页模式 + 反模式清单作为 Step 5 生成原型的视觉基础
|
|
82
|
+
- Web 应用:用 HTML 实现风格指南
|
|
83
|
+
- 桌面 / 移动应用:按对应技术栈输出风格指南(Electron / Tauri 直接复用 react / shadcn / html-tailwind 数据;SwiftUI / Jetpack Compose / Flutter 直接命中对应 stack 数据;其余 native 栈使用 stack 无关的风格/配色/字体推荐)
|
|
84
|
+
|
|
85
|
+
**降级路径**:
|
|
86
|
+
|
|
87
|
+
检测不到 `python3` 时跳过本步并提示用户「检测到 ui-ux-pro-max 依赖的 Python 3 不可用。原型将使用通用风格生成。如需专业级设计系统建议,请安装 Python 3 后重试。」原型用通用风格继续生成,不阻塞 Step 5。
|
|
88
|
+
|
|
89
|
+
#### Step 5b:根据产品类型生成对应形式的原型
|
|
90
|
+
|
|
91
|
+
根据产品类型生成对应形式的原型(见示例)。GUI 类产品在 Step 5a 已获取设计系统的基础上落地视觉/交互;非 GUI 类产品直接按产品类型选择对应原型形式。
|
|
67
92
|
|
|
68
93
|
### Step 6: 输出产品设计文档
|
|
69
94
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Next Level Builder
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|