@pixel-normal-edit/mcp 2.0.10 → 2.1.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/core/command-bus.js +6 -3
- package/core/server.js +98 -3
- package/package.json +1 -1
- package/rules/README.md +358 -285
- package/rules/index.js +9 -9
- package/rules/prerequisites.js +118 -61
- package/rules/rules.js +75 -34
- package/rules/workflow.js +262 -56
package/rules/README.md
CHANGED
|
@@ -1,403 +1,476 @@
|
|
|
1
|
-
#
|
|
1
|
+
# RULE: QUY TRÌNH TẠO, SỬA ẢNH VÀ TẠO ANIMATION
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 1. Nguyên tắc chung
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Mọi thao tác vẽ, sửa ảnh hoặc tạo animation phải được thực hiện theo quy trình tuần tự, có trạng thái rõ ràng.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
AI không được tự ý:
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
* Bỏ qua bước.
|
|
10
|
+
* Nhảy sang bước tiếp theo khi bước hiện tại chưa hoàn tất.
|
|
11
|
+
* Tự ý tạo ảnh mới trong quy trình sửa ảnh.
|
|
12
|
+
* Thay đổi các thành phần không nằm trong phạm vi yêu cầu.
|
|
13
|
+
* Ghi đè trạng thái của bước trước nếu chưa hoàn tất hoặc chưa được xác nhận.
|
|
10
14
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
Mỗi bước phải được lưu vào trạng thái, ví dụ:
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
current_mode
|
|
19
|
+
current_step
|
|
20
|
+
current_layer
|
|
21
|
+
current_frame
|
|
22
|
+
user_approval_required
|
|
23
|
+
step_status
|
|
17
24
|
```
|
|
18
25
|
|
|
19
|
-
|
|
26
|
+
Trạng thái mẫu:
|
|
20
27
|
|
|
21
|
-
|
|
28
|
+
```text
|
|
29
|
+
current_mode: CREATE_IMAGE
|
|
30
|
+
current_step: ANALYZE_REQUEST
|
|
31
|
+
current_layer: 0
|
|
32
|
+
current_frame: null
|
|
33
|
+
step_status: IN_PROGRESS
|
|
34
|
+
user_approval_required: false
|
|
35
|
+
```
|
|
22
36
|
|
|
23
|
-
|
|
37
|
+
Các trạng thái có thể sử dụng:
|
|
24
38
|
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
Trả về: "Bước hiện tại: Tạo canvas"
|
|
39
|
+
```text
|
|
40
|
+
PENDING
|
|
41
|
+
IN_PROGRESS
|
|
42
|
+
WAITING_FOR_USER
|
|
43
|
+
COMPLETED
|
|
44
|
+
FAILED
|
|
45
|
+
CANCELLED
|
|
33
46
|
```
|
|
34
47
|
|
|
35
|
-
|
|
48
|
+
---
|
|
36
49
|
|
|
37
|
-
|
|
50
|
+
# 2. TẠO ẢNH MỚI
|
|
38
51
|
|
|
39
|
-
|
|
40
|
-
|------|----------|--------------|
|
|
41
|
-
| `workflow_validate` | Kiểm tra có được phép làm bước này không | **TRƯỚC** mỗi thao tác |
|
|
42
|
-
| `*_tools` (vd: `canvas_resize`) | Thực hiện thao tác thật | Sau khi validate OK |
|
|
43
|
-
| `workflow_advance` | Đánh dấu hoàn thành, chuyển bước tiếp theo | **SAU** khi thao tác thành công |
|
|
52
|
+
## Bước 1: Khởi tạo Canvas
|
|
44
53
|
|
|
45
|
-
|
|
54
|
+
Khi người dùng yêu cầu tạo ảnh:
|
|
46
55
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
- Đang ở bước 2? ✓
|
|
52
|
-
- Bước 1 đã hoàn thành? ✓
|
|
53
|
-
↓
|
|
54
|
-
Trả về: "✅ Bạn có thể thực hiện name_canvas"
|
|
55
|
-
↓
|
|
56
|
-
Agent → validate_canvas_name(name: "Bức tranh 1")
|
|
57
|
-
↓
|
|
58
|
-
Trả về: "✅ Tên hợp lệ!"
|
|
59
|
-
↓
|
|
60
|
-
Agent → workspace_rename_tab(tabId: "...", name: "Bức tranh 1")
|
|
61
|
-
↓
|
|
62
|
-
Thực hiện đổi tên thành công
|
|
63
|
-
↓
|
|
64
|
-
Agent → workflow_advance()
|
|
65
|
-
↓
|
|
66
|
-
Workflow Engine:
|
|
67
|
-
- Đánh dấu "name_canvas" = completed
|
|
68
|
-
- Chuyển sang bước 3: "Resize canvas"
|
|
69
|
-
↓
|
|
70
|
-
Trả về: "✅ Hoàn thành: Đặt tên canvas. Bước tiếp theo: Resize canvas"
|
|
71
|
-
```
|
|
56
|
+
1. Kiểm tra kích thước canvas.
|
|
57
|
+
2. Kích thước pixel bắt buộc phải do người dùng cung cấp.
|
|
58
|
+
3. Nếu người dùng chưa cung cấp kích thước, phải hỏi lại.
|
|
59
|
+
4. Không tự động sử dụng kích thước mặc định 32×32 nếu chưa được người dùng xác nhận.
|
|
72
60
|
|
|
73
|
-
|
|
61
|
+
Ví dụ:
|
|
74
62
|
|
|
63
|
+
```text
|
|
64
|
+
Canvas:
|
|
65
|
+
width: [user_input]
|
|
66
|
+
height: [user_input]
|
|
75
67
|
```
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
68
|
+
|
|
69
|
+
Sau khi nhận được kích thước, tạo canvas mới.
|
|
70
|
+
|
|
71
|
+
Trạng thái:
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
current_step: INITIALIZE_CANVAS
|
|
75
|
+
step_status: COMPLETED
|
|
82
76
|
```
|
|
83
77
|
|
|
84
78
|
---
|
|
85
79
|
|
|
86
|
-
##
|
|
80
|
+
## Bước 2: Phân tích yêu cầu
|
|
87
81
|
|
|
88
|
-
|
|
89
|
-
**Mục đích:** Khởi tạo workflow mới
|
|
90
|
-
**Tham số:** Không có
|
|
91
|
-
**Trả về:** Trạng thái workflow ban đầu + bước đầu tiên cần làm
|
|
82
|
+
Phân tích yêu cầu của người dùng thành các thành phần có cấu trúc.
|
|
92
83
|
|
|
93
|
-
|
|
94
|
-
{
|
|
95
|
-
"content": [{
|
|
96
|
-
"type": "text",
|
|
97
|
-
"text": "🚀 Workflow đã bắt đầu!\n📋 Tiến trình vẽ:\n⬜ Tạo canvas\n🔄 Đặt tên canvas ← ĐANG LÀM\n..."
|
|
98
|
-
}]
|
|
99
|
-
}
|
|
100
|
-
```
|
|
84
|
+
Ví dụ:
|
|
101
85
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
**Trả về:** Danh sách các bước với trạng thái (✅/🔄/⬜)
|
|
86
|
+
```text
|
|
87
|
+
Subject:
|
|
88
|
+
- Cây
|
|
106
89
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
90
|
+
Components:
|
|
91
|
+
- Thân cây
|
|
92
|
+
- Cành cây
|
|
93
|
+
- Lá cây
|
|
94
|
+
- Hoa/quả
|
|
111
95
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
-
|
|
96
|
+
Environment:
|
|
97
|
+
- Mặt đất
|
|
98
|
+
- Bầu trời
|
|
99
|
+
- Vật thể xung quanh
|
|
116
100
|
|
|
117
|
-
|
|
118
|
-
-
|
|
119
|
-
-
|
|
101
|
+
Style:
|
|
102
|
+
- Pixel art
|
|
103
|
+
- Anime
|
|
104
|
+
- Realistic
|
|
105
|
+
- ...
|
|
120
106
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
107
|
+
Lighting:
|
|
108
|
+
- Direction
|
|
109
|
+
- Intensity
|
|
110
|
+
- Shadow
|
|
125
111
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
-
|
|
112
|
+
Composition:
|
|
113
|
+
- Position
|
|
114
|
+
- Scale
|
|
115
|
+
- Perspective
|
|
116
|
+
```
|
|
130
117
|
|
|
131
|
-
|
|
132
|
-
- 3-64 ký tự
|
|
133
|
-
- Chỉ gồm chữ, số, `_`, `-`, khoảng trắng
|
|
134
|
-
- Ví dụ hợp lệ: "Bức_tranh_1", "My Canvas 2024"
|
|
118
|
+
Cấu trúc này phải có khả năng mở rộng tùy theo yêu cầu.
|
|
135
119
|
|
|
136
|
-
|
|
137
|
-
**Mục đích:** Kiểm tra kích thước canvas có nằm trong giới hạn không
|
|
138
|
-
**Tham số:**
|
|
139
|
-
- `width` (int): Chiều rộng
|
|
140
|
-
- `height` (int): Chiều cao
|
|
120
|
+
Trạng thái:
|
|
141
121
|
|
|
142
|
-
|
|
122
|
+
```text
|
|
123
|
+
current_step: ANALYZE_REQUEST
|
|
124
|
+
step_status: COMPLETED
|
|
125
|
+
```
|
|
143
126
|
|
|
144
127
|
---
|
|
145
128
|
|
|
146
|
-
##
|
|
129
|
+
## Bước 3: Lập kế hoạch vẽ
|
|
130
|
+
|
|
131
|
+
AI phải tạo kế hoạch vẽ theo thứ tự từ tổng thể đến chi tiết.
|
|
147
132
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
133
|
+
Ví dụ:
|
|
134
|
+
|
|
135
|
+
```text
|
|
136
|
+
1. Phác thảo bố cục tổng thể.
|
|
137
|
+
2. Vẽ background.
|
|
138
|
+
3. Vẽ các hình khối chính.
|
|
139
|
+
4. Vẽ line hoặc silhouette.
|
|
140
|
+
5. Vẽ từng thành phần chính.
|
|
141
|
+
6. Thêm màu cơ bản.
|
|
142
|
+
7. Thêm ánh sáng và bóng.
|
|
143
|
+
8. Thêm chi tiết nhỏ.
|
|
144
|
+
9. Kiểm tra tổng thể.
|
|
145
|
+
10. Tinh chỉnh.
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
AI phải trả kế hoạch cho người dùng trước khi bắt đầu thực hiện.
|
|
149
|
+
|
|
150
|
+
Nếu quy trình yêu cầu xác nhận, chuyển sang:
|
|
151
|
+
|
|
152
|
+
```text
|
|
153
|
+
step_status: WAITING_FOR_USER
|
|
154
|
+
user_approval_required: true
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
AI chỉ được tiếp tục sau khi người dùng xác nhận.
|
|
159
158
|
|
|
160
159
|
---
|
|
161
160
|
|
|
162
|
-
|
|
161
|
+
# 3. QUY TẮC VẼ THEO TỪNG GIAI ĐOẠN
|
|
162
|
+
|
|
163
|
+
AI phải vẽ theo từng giai đoạn, không thực hiện toàn bộ ảnh trong một bước duy nhất.
|
|
163
164
|
|
|
164
|
-
|
|
165
|
+
Thứ tự tổng quát:
|
|
165
166
|
|
|
166
|
-
|
|
167
|
+
```text
|
|
168
|
+
PHASE_0: SKETCH / BLOCKING
|
|
169
|
+
PHASE_1: BACKGROUND
|
|
170
|
+
PHASE_2: MAIN_SHAPES
|
|
171
|
+
PHASE_3: LINE / SILHOUETTE
|
|
172
|
+
PHASE_4: BASE_COLORS
|
|
173
|
+
PHASE_5: SHADING
|
|
174
|
+
PHASE_6: LIGHTING
|
|
175
|
+
PHASE_7: DETAILS
|
|
176
|
+
PHASE_8: FINAL_REVIEW
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Sau mỗi giai đoạn:
|
|
180
|
+
|
|
181
|
+
1. Lưu trạng thái.
|
|
182
|
+
2. Kiểm tra kết quả.
|
|
183
|
+
3. Nếu cần, cung cấp ảnh xem trước hoặc cho phép người dùng sử dụng lệnh xem ảnh.
|
|
184
|
+
4. Nếu chưa đạt, tiếp tục chỉnh sửa ở đúng giai đoạn hiện tại.
|
|
185
|
+
5. Không được chuyển sang giai đoạn tiếp theo nếu giai đoạn hiện tại chưa hoàn tất.
|
|
186
|
+
|
|
187
|
+
Ví dụ:
|
|
167
188
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
| Anchor | `^[a-z][a-z0-9_]{2,32}$` | "head_top" |
|
|
189
|
+
```text
|
|
190
|
+
current_step: DRAW_BACKGROUND
|
|
191
|
+
step_status: IN_PROGRESS
|
|
192
|
+
```
|
|
173
193
|
|
|
174
|
-
|
|
194
|
+
Sau khi hoàn tất:
|
|
175
195
|
|
|
176
|
-
|
|
196
|
+
```text
|
|
197
|
+
current_step: DRAW_BACKGROUND
|
|
198
|
+
step_status: COMPLETED
|
|
199
|
+
```
|
|
177
200
|
|
|
178
|
-
|
|
201
|
+
Sau đó mới được chuyển sang:
|
|
179
202
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
| Allowed colors | Tất cả hex colors |
|
|
185
|
-
| Max stamp name length | 32 ký tự |
|
|
186
|
-
| Max anchor name length | 32 ký tự |
|
|
203
|
+
```text
|
|
204
|
+
current_step: DRAW_MAIN_SHAPES
|
|
205
|
+
step_status: IN_PROGRESS
|
|
206
|
+
```
|
|
187
207
|
|
|
188
208
|
---
|
|
189
209
|
|
|
190
|
-
|
|
210
|
+
# 4. QUẢN LÝ LAYER
|
|
191
211
|
|
|
192
|
-
|
|
212
|
+
Layer được sử dụng xuyên suốt toàn bộ quy trình.
|
|
193
213
|
|
|
194
|
-
|
|
214
|
+
Cấu trúc cơ bản:
|
|
195
215
|
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
{ id: "name_canvas", label: "Đặt tên canvas", status: "completed" },
|
|
203
|
-
{ id: "resize_canvas", label: "Resize canvas", status: "in_progress" },
|
|
204
|
-
// ...
|
|
205
|
-
],
|
|
206
|
-
completedSteps: ["create_canvas", "name_canvas"],
|
|
207
|
-
startedAt: 1234567890
|
|
208
|
-
}
|
|
209
|
-
])
|
|
216
|
+
```text
|
|
217
|
+
Layer 0: Background
|
|
218
|
+
Layer 1: Main subject
|
|
219
|
+
Layer 2: Secondary subject
|
|
220
|
+
Layer 3: Details
|
|
221
|
+
Layer n: Additional elements
|
|
210
222
|
```
|
|
211
223
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
| Hàm | Mục đích |
|
|
215
|
-
|------|----------|
|
|
216
|
-
| `start(sessionId)` | Khởi tạo workflow mới |
|
|
217
|
-
| `getState(sessionId)` | Lấy toàn bộ trạng thái |
|
|
218
|
-
| `getCurrentStep(sessionId)` | Lấy bước hiện tại |
|
|
219
|
-
| `validateStep(sessionId, stepId)` | Kiểm tra có được phép làm bước này không |
|
|
220
|
-
| `advance(sessionId)` | Hoàn thành bước hiện tại, chuyển sang bước tiếp |
|
|
221
|
-
| `reset(sessionId)` | Reset workflow về đầu |
|
|
222
|
-
| `getProgressReport(sessionId)` | Lấy báo cáo tiến trình dạng text |
|
|
224
|
+
Tuy nhiên, layer phải được phân chia theo thành phần cần chỉnh sửa độc lập.
|
|
223
225
|
|
|
224
|
-
|
|
226
|
+
Ví dụ với một cái cây:
|
|
225
227
|
|
|
228
|
+
```text
|
|
229
|
+
Layer 0: Background
|
|
230
|
+
Layer 1: Trunk
|
|
231
|
+
Layer 2: Branches
|
|
232
|
+
Layer 3: Leaves
|
|
233
|
+
Layer 4: Fruits
|
|
234
|
+
Layer 5: Shadows
|
|
235
|
+
Layer 6: Highlights
|
|
226
236
|
```
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
237
|
+
|
|
238
|
+
Nguyên tắc:
|
|
239
|
+
|
|
240
|
+
* Mỗi thành phần có thể chỉnh sửa độc lập nên được đặt trên layer riêng.
|
|
241
|
+
* Không gộp nhiều thành phần khác nhau vào cùng một layer nếu việc đó làm mất khả năng chỉnh sửa riêng.
|
|
242
|
+
* Khi thêm một thành phần mới, phải xác định layer phù hợp trước khi vẽ.
|
|
243
|
+
* Mọi thay đổi phải được ghi nhận vào trạng thái.
|
|
244
|
+
|
|
245
|
+
Ví dụ:
|
|
246
|
+
|
|
247
|
+
```text
|
|
248
|
+
current_layer: 3
|
|
249
|
+
layer_name: Leaves
|
|
250
|
+
layer_status: IN_PROGRESS
|
|
233
251
|
```
|
|
234
252
|
|
|
235
253
|
---
|
|
236
254
|
|
|
237
|
-
|
|
255
|
+
# 5. KIỂM TRA VÀ XÁC NHẬN
|
|
238
256
|
|
|
239
|
-
|
|
257
|
+
Sau mỗi giai đoạn, AI phải kiểm tra:
|
|
240
258
|
|
|
259
|
+
```text
|
|
260
|
+
- Đúng yêu cầu người dùng chưa?
|
|
261
|
+
- Bố cục có đúng không?
|
|
262
|
+
- Tỷ lệ có phù hợp không?
|
|
263
|
+
- Layer có đúng không?
|
|
264
|
+
- Thành phần có bị ảnh hưởng ngoài phạm vi không?
|
|
265
|
+
- Có lỗi phát sinh từ bước trước không?
|
|
241
266
|
```
|
|
242
|
-
1. workflow_start()
|
|
243
|
-
→ "Bước 1: Tạo canvas"
|
|
244
267
|
|
|
245
|
-
|
|
246
|
-
→ "✅ Kích thước 32x32 hợp lệ!"
|
|
268
|
+
Nếu cần người dùng xác nhận:
|
|
247
269
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
4. workflow_validate(stepId: "name_canvas")
|
|
252
|
-
→ "✅ Bạn có thể thực hiện name_canvas"
|
|
270
|
+
```text
|
|
271
|
+
step_status: WAITING_FOR_USER
|
|
272
|
+
```
|
|
253
273
|
|
|
254
|
-
|
|
255
|
-
→ "✅ Tên hợp lệ!"
|
|
274
|
+
AI phải dừng và chờ phản hồi.
|
|
256
275
|
|
|
257
|
-
|
|
258
|
-
→ Đổi tên thành công
|
|
276
|
+
Người dùng có thể:
|
|
259
277
|
|
|
260
|
-
|
|
261
|
-
|
|
278
|
+
```text
|
|
279
|
+
APPROVE
|
|
280
|
+
CONTINUE
|
|
281
|
+
REVIEW
|
|
282
|
+
EDIT
|
|
283
|
+
UNDO
|
|
284
|
+
REGENERATE_CURRENT_STEP
|
|
285
|
+
```
|
|
262
286
|
|
|
263
|
-
|
|
264
|
-
→ "✅ Bạn có thể thực hiện resize_canvas"
|
|
287
|
+
Nếu người dùng yêu cầu chỉnh sửa, chỉ chỉnh sửa bước hoặc layer liên quan, không tự động tạo lại toàn bộ ảnh.
|
|
265
288
|
|
|
266
|
-
|
|
267
|
-
→ Resize thành công
|
|
289
|
+
---
|
|
268
290
|
|
|
269
|
-
|
|
270
|
-
→ Chuyển sang bước "Bật animation"
|
|
291
|
+
# 6. SỬA ẢNH
|
|
271
292
|
|
|
272
|
-
|
|
273
|
-
→ "✅ Bạn có thể thực hiện enable_animation"
|
|
293
|
+
Quy trình sửa ảnh phải sử dụng ảnh hiện tại làm nguồn gốc.
|
|
274
294
|
|
|
275
|
-
|
|
276
|
-
→ OK
|
|
295
|
+
AI không được tự ý tạo một ảnh mới thay thế ảnh hiện tại.
|
|
277
296
|
|
|
278
|
-
|
|
279
|
-
→ Chuyển sang bước "Thiết lập layers"
|
|
297
|
+
Quy trình:
|
|
280
298
|
|
|
281
|
-
|
|
282
|
-
|
|
299
|
+
```text
|
|
300
|
+
1. Nhận yêu cầu sửa.
|
|
301
|
+
2. Phân tích chính xác nội dung cần sửa.
|
|
302
|
+
3. Lấy ảnh hiện tại.
|
|
303
|
+
4. So sánh yêu cầu với ảnh hiện tại.
|
|
304
|
+
5. Xác định vùng hoặc layer cần chỉnh sửa.
|
|
305
|
+
6. Khoanh vùng khu vực cần sửa.
|
|
306
|
+
7. Thực hiện chỉnh sửa trong phạm vi đó.
|
|
307
|
+
8. Kiểm tra sự tương thích với môi trường xung quanh.
|
|
308
|
+
9. Điều chỉnh phần chuyển tiếp nếu cần.
|
|
309
|
+
10. Cập nhật thay đổi vào ảnh hiện tại.
|
|
310
|
+
11. Kiểm tra kết quả.
|
|
311
|
+
```
|
|
283
312
|
|
|
284
|
-
|
|
285
|
-
→ Thêm layer mới
|
|
313
|
+
Ví dụ:
|
|
286
314
|
|
|
287
|
-
|
|
288
|
-
|
|
315
|
+
```text
|
|
316
|
+
current_mode: EDIT_IMAGE
|
|
317
|
+
target_area: Layer 3 / Leaves
|
|
318
|
+
edit_scope: Specific region
|
|
319
|
+
```
|
|
289
320
|
|
|
290
|
-
|
|
291
|
-
→ "✅ Bạn có thể thực hiện prepare_colors"
|
|
321
|
+
Nguyên tắc bắt buộc:
|
|
292
322
|
|
|
293
|
-
|
|
294
|
-
|
|
323
|
+
* Chỉ sửa phần được yêu cầu.
|
|
324
|
+
* Giữ nguyên các phần không liên quan.
|
|
325
|
+
* Không tạo lại toàn bộ ảnh.
|
|
326
|
+
* Không thay đổi bố cục, phong cách hoặc thành phần khác nếu người dùng không yêu cầu.
|
|
327
|
+
* Sau khi sửa phải kiểm tra sự hòa hợp với các vùng xung quanh.
|
|
295
328
|
|
|
296
|
-
|
|
297
|
-
→ Chuyển sang bước "Vẽ" ← ĐÂY LÀ BƯỚC QUAN TRỌNG
|
|
329
|
+
Nếu chỉnh sửa chưa đạt:
|
|
298
330
|
|
|
299
|
-
|
|
300
|
-
|
|
331
|
+
```text
|
|
332
|
+
current_step: EDIT_TARGET_AREA
|
|
333
|
+
step_status: IN_PROGRESS
|
|
334
|
+
```
|
|
301
335
|
|
|
302
|
-
|
|
303
|
-
→ Vẽ hình tròn thành công
|
|
336
|
+
Không được chuyển sang bước khác cho đến khi vùng chỉnh sửa hoàn tất.
|
|
304
337
|
|
|
305
|
-
|
|
306
|
-
→ Chuyển sang bước "Kiểm tra"
|
|
338
|
+
---
|
|
307
339
|
|
|
308
|
-
|
|
309
|
-
→ "✅ Bạn có thể thực hiện review"
|
|
340
|
+
# 7. TẠO ANIMATION MỚI
|
|
310
341
|
|
|
311
|
-
|
|
312
|
-
→ Xem kết quả vẽ
|
|
342
|
+
Quy trình tạo animation tương tự quy trình tạo ảnh nhưng bổ sung hệ thống frame.
|
|
313
343
|
|
|
314
|
-
|
|
315
|
-
→ Chuyển sang bước "Hoàn tất"
|
|
344
|
+
## Bước 1: Khởi tạo
|
|
316
345
|
|
|
317
|
-
|
|
318
|
-
→ "✅ Bạn có thể thực hiện finalize"
|
|
346
|
+
Xác định:
|
|
319
347
|
|
|
320
|
-
|
|
321
|
-
|
|
348
|
+
```text
|
|
349
|
+
Canvas:
|
|
350
|
+
width
|
|
351
|
+
height
|
|
322
352
|
|
|
323
|
-
|
|
324
|
-
|
|
353
|
+
Animation:
|
|
354
|
+
fps
|
|
355
|
+
total_frames
|
|
356
|
+
loop
|
|
325
357
|
```
|
|
326
358
|
|
|
327
|
-
|
|
359
|
+
Nếu người dùng chưa cung cấp thông tin cần thiết, phải hỏi lại.
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## Bước 2: Phân tích animation
|
|
364
|
+
|
|
365
|
+
Phân tích:
|
|
328
366
|
|
|
367
|
+
```text
|
|
368
|
+
- Đối tượng.
|
|
369
|
+
- Chuyển động.
|
|
370
|
+
- Hướng chuyển động.
|
|
371
|
+
- Frame bắt đầu.
|
|
372
|
+
- Frame kết thúc.
|
|
373
|
+
- Các keyframe.
|
|
374
|
+
- Các frame trung gian.
|
|
375
|
+
- Layer cần sử dụng.
|
|
329
376
|
```
|
|
330
|
-
1. workflow_start()
|
|
331
|
-
→ "Bước 1: Tạo canvas"
|
|
332
377
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
378
|
+
Ví dụ:
|
|
379
|
+
|
|
380
|
+
```text
|
|
381
|
+
Frame 0: Initial pose
|
|
382
|
+
Frame 1: Movement begins
|
|
383
|
+
Frame 2: Mid movement
|
|
384
|
+
Frame 3: Peak movement
|
|
385
|
+
Frame 4: Return
|
|
337
386
|
```
|
|
338
387
|
|
|
339
388
|
---
|
|
340
389
|
|
|
341
|
-
##
|
|
390
|
+
## Bước 3: Tạo và xử lý từng frame
|
|
342
391
|
|
|
343
|
-
|
|
344
|
-
2. **Có thể quay lại bước cũ:** Nếu agent đã hoàn thành bước 3 và muốn làm lại, `validateStep` sẽ cho phép nhưng có cảnh báo.
|
|
345
|
-
3. **Workflow không tự động chặn tool:** Tool `draw_pixel` vẫn chạy được nếu agent gọi trực tiếp. Tuy nhiên, agent được hướng dẫn **PHẢI** gọi `workflow_validate` trước mỗi thao tác.
|
|
346
|
-
4. **Có thể reset:** Dùng `workflow_reset` để bắt đầu lại từ đầu nếu cần.
|
|
392
|
+
Mỗi frame phải được xử lý riêng theo đúng thứ tự:
|
|
347
393
|
|
|
348
|
-
|
|
394
|
+
```text
|
|
395
|
+
1. Activate frame.
|
|
396
|
+
2. Xác định trạng thái của frame.
|
|
397
|
+
3. Xác định layer cần vẽ.
|
|
398
|
+
4. Vẽ hoặc chỉnh sửa layer.
|
|
399
|
+
5. Kiểm tra tính liên tục với frame trước và sau.
|
|
400
|
+
6. Lưu frame.
|
|
401
|
+
7. Chuyển sang frame tiếp theo.
|
|
402
|
+
```
|
|
349
403
|
|
|
350
|
-
|
|
404
|
+
Ví dụ:
|
|
351
405
|
|
|
352
|
-
|
|
406
|
+
```text
|
|
407
|
+
current_frame: 0
|
|
408
|
+
current_layer: 1
|
|
409
|
+
current_step: DRAW_FRAME
|
|
410
|
+
step_status: IN_PROGRESS
|
|
411
|
+
```
|
|
353
412
|
|
|
354
|
-
|
|
355
|
-
// rules.js
|
|
356
|
-
const NAMING_RULES = {
|
|
357
|
-
// ... existing rules
|
|
358
|
-
newObject: {
|
|
359
|
-
pattern: /^[a-z]{3,16}$/,
|
|
360
|
-
message: 'Tên phải 3-16 ký tự, chỉ chữ thường',
|
|
361
|
-
example: 'myobject',
|
|
362
|
-
},
|
|
363
|
-
};
|
|
413
|
+
Chỉ được chuyển sang:
|
|
364
414
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
if (!name || typeof name !== 'string') {
|
|
368
|
-
return { valid: false, message: 'Tên không được để trống' };
|
|
369
|
-
}
|
|
370
|
-
if (!NAMING_RULES.newObject.pattern.test(name)) {
|
|
371
|
-
return { valid: false, message: NAMING_RULES.newObject.message };
|
|
372
|
-
}
|
|
373
|
-
return { valid: true };
|
|
374
|
-
}
|
|
415
|
+
```text
|
|
416
|
+
current_frame: 1
|
|
375
417
|
```
|
|
376
418
|
|
|
377
|
-
|
|
419
|
+
sau khi frame 0 đã hoàn tất.
|
|
378
420
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
// ... existing steps
|
|
383
|
-
{ id: 'new_step', label: 'Bước mới', description: 'Mô tả bước mới' },
|
|
384
|
-
];
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
# 8. KIỂM TRA TÍNH LIÊN TỤC CỦA ANIMATION
|
|
385
424
|
|
|
386
|
-
|
|
387
|
-
|
|
425
|
+
Sau khi hoàn thành các frame, phải kiểm tra:
|
|
426
|
+
|
|
427
|
+
```text
|
|
428
|
+
- Vị trí đối tượng có chuyển động liên tục không?
|
|
429
|
+
- Layer có nhất quán giữa các frame không?
|
|
430
|
+
- Có hiện tượng nhảy hình không?
|
|
431
|
+
- Có thay đổi ngoài ý muốn không?
|
|
432
|
+
- Bố cục có bị lệch không?
|
|
433
|
+
- Chuyển động có đúng yêu cầu không?
|
|
388
434
|
```
|
|
389
435
|
|
|
436
|
+
Nếu phát hiện lỗi, chỉ quay lại frame hoặc layer bị lỗi để sửa.
|
|
437
|
+
|
|
438
|
+
Không được tạo lại toàn bộ animation nếu chỉ một frame hoặc một layer bị lỗi.
|
|
439
|
+
|
|
390
440
|
---
|
|
391
441
|
|
|
392
|
-
|
|
442
|
+
# 9. NGUYÊN TẮC TRẠNG THÁI BẮT BUỘC
|
|
443
|
+
|
|
444
|
+
Mọi thao tác phải tuân theo:
|
|
445
|
+
|
|
446
|
+
```text
|
|
447
|
+
CHECK_CURRENT_STATE
|
|
448
|
+
→ EXECUTE_CURRENT_STEP
|
|
449
|
+
→ SAVE_STATE
|
|
450
|
+
→ VALIDATE_RESULT
|
|
451
|
+
→ WAIT_FOR_USER_IF_REQUIRED
|
|
452
|
+
→ COMPLETE_CURRENT_STEP
|
|
453
|
+
→ MOVE_TO_NEXT_STEP
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
Không được:
|
|
457
|
+
|
|
458
|
+
```text
|
|
459
|
+
CURRENT_STEP
|
|
460
|
+
→ SKIP
|
|
461
|
+
→ NEXT_STEP
|
|
462
|
+
```
|
|
393
463
|
|
|
394
|
-
|
|
464
|
+
Mọi thao tác phải có trạng thái rõ ràng:
|
|
395
465
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
466
|
+
```text
|
|
467
|
+
mode
|
|
468
|
+
step
|
|
469
|
+
layer
|
|
470
|
+
frame
|
|
471
|
+
status
|
|
472
|
+
user_approval
|
|
473
|
+
history
|
|
474
|
+
```
|
|
402
475
|
|
|
403
|
-
|
|
476
|
+
Mục tiêu của hệ thống là đảm bảo toàn bộ quá trình tạo ảnh, sửa ảnh và tạo animation có thể kiểm soát, theo dõi, xem lại và tiếp tục chính xác từ bất kỳ bước nào mà không làm mất trạng thái trước đó.
|