@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/rules/README.md CHANGED
@@ -1,403 +1,476 @@
1
- # Rules Module Báo cáo hoạt động
1
+ # RULE: QUY TRÌNH TẠO, SỬA ẢNH VÀ TẠO ANIMATION
2
2
 
3
- ## Tổng quan
3
+ ## 1. Nguyên tắc chung
4
4
 
5
- Module `rules/` **bộ não điều khiển** của MCP Firebase Bridge. đảm bảo agent AI **không thể làm bậy** mọi thao tác vẽ đều phải tuân theo quy trình đã định sẵn.
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ự, trạng thái ràng.
6
6
 
7
- ---
7
+ AI không được tự ý:
8
8
 
9
- ## Cấu trúc thư mục
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
- rules/
13
- ├── index.js # Module aggregator — import tất cả và export registerAll()
14
- ├── rules.js # Định nghĩa rules: naming, workflow steps, constraints
15
- ├── workflow.js # Workflow engine — quản lý trạng thái từng bước
16
- └── prerequisites.js # 7 MCP Tools để agent tương tác với workflow
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
- ## Luồng hoạt động (Workflow)
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
- ### 1. Agent bắt đầu bằng `workflow_start`
37
+ Các trạng thái thể sử dụng:
24
38
 
25
- ```
26
- Agent → workflow_start()
27
-
28
- Workflow Engine khởi tạo 9 bước:
29
- [create_canvas → name_canvas → resize_canvas → enable_animation →
30
- setup_layers → prepare_colors → draw → review → finalize]
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
- ### 2. Agent thực hiện từng bước
48
+ ---
36
49
 
37
- Mỗi bước **3 tool** liên quan:
50
+ # 2. TẠO ẢNH MỚI
38
51
 
39
- | Tool | Mục đích | Khi nào dùng |
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
- **Ví dụ thực tế Bước "Đặt tên canvas":**
54
+ Khi người dùng yêu cầu tạo ảnh:
46
55
 
47
- ```
48
- Agent workflow_validate(stepId: "name_canvas")
49
-
50
- Workflow Engine kiểm tra:
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
- ### 3. Nếu agent làm sai thứ tự → BỊ CHẶN
61
+ dụ:
74
62
 
63
+ ```text
64
+ Canvas:
65
+ width: [user_input]
66
+ height: [user_input]
75
67
  ```
76
- Agent → draw_pixel(x: 10, y: 10, color: "#ff0000") # ❌ Vẽ trước khi tạo canvas!
77
-
78
- (Nếu có middleware kiểm tra workflow)
79
-
80
- Trả về: "⛔ Bạn chưa thể thực hiện 'draw'.
81
- Trước hết hãy hoàn thành: Tạo canvas"
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
- ## 7 Workflow Tools (trong `prerequisites.js`)
80
+ ## Bước 2: Phân tích yêu cầu
87
81
 
88
- ### 1. `workflow_start`
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
- ```json
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
- ### 2. `workflow_status`
103
- **Mục đích:** Xem tiến trình hiện tại
104
- **Tham số:** Không có
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
- ### 3. `workflow_advance`
108
- **Mục đích:** Đánh dấu hoàn thành bước hiện tại, chuyển sang bước tiếp theo
109
- **Tham số:** Không có
110
- **Trả về:** Thông báo bước vừa hoàn thành + bước tiếp theo
90
+ Components:
91
+ - Thân cây
92
+ - Cành cây
93
+ - cây
94
+ - Hoa/quả
111
95
 
112
- ### 4. `workflow_validate`
113
- **Mục đích:** Kiểm tra agent có được phép thực hiện hành động không
114
- **Tham số:**
115
- - `stepId` (string): ID bước muốn kiểm tra (vd: "draw", "resize_canvas")
96
+ Environment:
97
+ - Mặt đất
98
+ - Bầu trời
99
+ - Vật thể xung quanh
116
100
 
117
- **Trả về:**
118
- - Nếu OK: `"✅ Bạn có thể thực hiện 'draw'. Hãy tiếp tục!"`
119
- - Nếu sai thứ tự: `"⛔ Bạn chưa thể thực hiện 'draw'. Trước hết hãy hoàn thành: Tạo canvas"`
101
+ Style:
102
+ - Pixel art
103
+ - Anime
104
+ - Realistic
105
+ - ...
120
106
 
121
- ### 5. `workflow_reset`
122
- **Mục đích:** Reset workflow về đầu (xóa toàn bộ tiến trình)
123
- **Tham số:** Không có
124
- **Trả về:** `"🔄 Workflow đã được reset. Hãy bắt đầu lại từ đầu."`
107
+ Lighting:
108
+ - Direction
109
+ - Intensity
110
+ - Shadow
125
111
 
126
- ### 6. `validate_canvas_name`
127
- **Mục đích:** Kiểm tra tên canvas có hợp lệ không
128
- **Tham số:**
129
- - `name` (string): Tên canvas muốn kiểm tra
112
+ Composition:
113
+ - Position
114
+ - Scale
115
+ - Perspective
116
+ ```
130
117
 
131
- **Quy tắc:**
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
- ### 7. `validate_canvas_size`
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
- **Giới hạn:** 8x8 đến 1024x1024 pixels
122
+ ```text
123
+ current_step: ANALYZE_REQUEST
124
+ step_status: COMPLETED
125
+ ```
143
126
 
144
127
  ---
145
128
 
146
- ## 9 Workflow Steps (định nghĩa trong `rules.js`)
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
- | # | Step ID | Label | Description |
149
- |---|---------|-------|-------------|
150
- | 1 | `create_canvas` | Tạo canvas | Tạo tab mới với kích thước phù hợp |
151
- | 2 | `name_canvas` | Đặt tên canvas | Đặt tên cho canvas (3-64 ký tự) |
152
- | 3 | `resize_canvas` | Resize canvas | Điều chỉnh kích thước canvas nếu cần |
153
- | 4 | `enable_animation` | Bật animation | Bật chế độ animation nếu cần nhiều frame |
154
- | 5 | `setup_layers` | Thiết lập layers | Tạo/sắp xếp layers trước khi vẽ |
155
- | 6 | `prepare_colors` | Chuẩn bị màu sắc | Chọn màu chính/phụ trước khi vẽ |
156
- | 7 | `draw` | Vẽ | Thực hiện vẽ theo đúng kỹ thuật |
157
- | 8 | `review` | Kiểm tra | Xem lại kết quả sau khi vẽ |
158
- | 9 | `finalize` | Hoàn tất | Lưu và hoàn tất tác phẩm |
133
+ 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 bản.
142
+ 7. Thêm ánh sáng 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
- ## Các loại Rules (trong `rules.js`)
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
- ### 1. Naming Rules (`NAMING_RULES`)
165
+ Thứ tự tổng quát:
165
166
 
166
- Quy tắc đặt tên cho các đối tượng:
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
- | Object | Pattern | Example |
169
- |--------|---------|---------|
170
- | Canvas/Tab | `^[A-Za-z0-9_\-\sÀ-ỹ]{3,64}$` | "Bức_tranh_1" |
171
- | Stamp | `^[a-z][a-z0-9_]{2,32}$` | "my_tree_01" |
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
- ### 2. Workflow Steps (`WORKFLOW_STEPS`)
194
+ Sau khi hoàn tất:
175
195
 
176
- Danh sách 9 bước bắt buộc (xem bảng ở mục trên).
196
+ ```text
197
+ current_step: DRAW_BACKGROUND
198
+ step_status: COMPLETED
199
+ ```
177
200
 
178
- ### 3. Drawing Constraints (`DRAWING_CONSTRAINTS`)
201
+ Sau đó mới được chuyển sang:
179
202
 
180
- | Constraint | Value |
181
- |------------|-------|
182
- | Max canvas size | 1024x1024 |
183
- | Min canvas size | 8x8 |
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
- ## Workflow Engine (`workflow.js`)
210
+ # 4. QUẢN LÝ LAYER
191
211
 
192
- ### State Management
212
+ Layer được sử dụng xuyên suốt toàn bộ quy trình.
193
213
 
194
- Workflow engine lưu trạng thái **in-memory** theo session:
214
+ Cấu trúc bản:
195
215
 
196
- ```javascript
197
- sessions = new Map([
198
- "session-id-1": {
199
- currentStepIndex: 2,
200
- steps: [
201
- { id: "create_canvas", label: "Tạo canvas", status: "completed" },
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
- ### Các hàm chính
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
- ### Logic Validation
226
+ 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
- validateStep(sessionId, stepId):
228
- 1. Nếu chưa start workflow → TỪ CHỐI
229
- 2. Nếu workflow đã hoàn thành → TỪ CHỐI
230
- 3. Nếu stepId đã hoàn thành CHO PHÉP (với warning)
231
- 4. Nếu stepId đúng bước hiện tại CHO PHÉP
232
- 5. Nếu stepId nằm tương lai TỪ CHỐI (với hướng dẫn bước hiện tại)
237
+
238
+ Nguyên tắc:
239
+
240
+ * Mỗi thành phần 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
- ## Cách sử dụng cho Agent
255
+ # 5. KIỂM TRA XÁC NHẬN
238
256
 
239
- ### Scenario 1: Vẽ một hình tròn đơn giản
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
- 2. validate_canvas_size(width: 32, height: 32)
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
- 3. workspace_create_tab(width: 32, height: 32)
249
- Tạo canvas thành công
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
- 5. validate_canvas_name(name: "Hình tròn")
255
- → "✅ Tên hợp lệ!"
274
+ AI phải dừng và chờ phản hồi.
256
275
 
257
- 6. workspace_rename_tab(tabId: "...", name: "Hình tròn")
258
- → Đổi tên thành công
276
+ Người dùng thể:
259
277
 
260
- 7. workflow_advance()
261
- → "✅ Hoàn thành: Đặt tên canvas. Bước tiếp theo: Resize canvas"
278
+ ```text
279
+ APPROVE
280
+ CONTINUE
281
+ REVIEW
282
+ EDIT
283
+ UNDO
284
+ REGENERATE_CURRENT_STEP
285
+ ```
262
286
 
263
- 8. workflow_validate(stepId: "resize_canvas")
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
- 9. canvas_resize(width: 64, height: 64)
267
- → Resize thành công
289
+ ---
268
290
 
269
- 10. workflow_advance()
270
- → Chuyển sang bước "Bật animation"
291
+ # 6. SỬA ẢNH
271
292
 
272
- 11. workflow_validate(stepId: "enable_animation")
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
- 12. animation_enable(enabled: false) # Không cần animation
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
- 13. workflow_advance()
279
- → Chuyển sang bước "Thiết lập layers"
297
+ Quy trình:
280
298
 
281
- 14. workflow_validate(stepId: "setup_layers")
282
- "✅ Bạn thể thực hiện setup_layers"
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
- 15. layer_add()
285
- → Thêm layer mới
313
+ dụ:
286
314
 
287
- 16. workflow_advance()
288
- Chuyển sang bước "Chuẩn bị màu sắc"
315
+ ```text
316
+ current_mode: EDIT_IMAGE
317
+ target_area: Layer 3 / Leaves
318
+ edit_scope: Specific region
319
+ ```
289
320
 
290
- 17. workflow_validate(stepId: "prepare_colors")
291
- → "✅ Bạn có thể thực hiện prepare_colors"
321
+ Nguyên tắc bắt buộc:
292
322
 
293
- 18. color_set(primary: "#ff0000")
294
- Đặt màu đỏ
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
- 19. workflow_advance()
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
- 20. workflow_validate(stepId: "draw")
300
- "✅ Bạn có thể thực hiện draw"
331
+ ```text
332
+ current_step: EDIT_TARGET_AREA
333
+ step_status: IN_PROGRESS
334
+ ```
301
335
 
302
- 21. draw_circle(cx: 32, cy: 32, r: 20, color: "#ff0000")
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
- 22. workflow_advance()
306
- → Chuyển sang bước "Kiểm tra"
338
+ ---
307
339
 
308
- 23. workflow_validate(stepId: "review")
309
- → "✅ Bạn có thể thực hiện review"
340
+ # 7. TẠO ANIMATION MỚI
310
341
 
311
- 24. query_snapshot()
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
- 25. workflow_advance()
315
- → Chuyển sang bước "Hoàn tất"
344
+ ## Bước 1: Khởi tạo
316
345
 
317
- 26. workflow_validate(stepId: "finalize")
318
- → "✅ Bạn có thể thực hiện finalize"
346
+ Xác định:
319
347
 
320
- 27. workspace_save()
321
- → Lưu tác phẩm
348
+ ```text
349
+ Canvas:
350
+ width
351
+ height
322
352
 
323
- 28. workflow_advance()
324
- → "🎉 Hoàn tất tất cả các bước!"
353
+ Animation:
354
+ fps
355
+ total_frames
356
+ loop
325
357
  ```
326
358
 
327
- ### Scenario 2: Agent cố gắng vẽ trước khi tạo canvas
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
- 2. draw_pixel(x: 10, y: 10, color: "#ff0000") # ❌ Sai thứ tự!
334
- → (Nếu có middleware kiểm tra)
335
- → "⛔ Bạn chưa thể thực hiện 'draw'.
336
- Trước hết hãy hoàn thành: Tạo canvas"
378
+ 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
- ## Lưu ý quan trọng
390
+ ## Bước 3: Tạo và xử lý từng frame
342
391
 
343
- 1. **Workflow per-session:** Mỗi session có workflow riêng, không ảnh hưởng lẫn nhau.
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ử 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
- ## Cách thêm Rule mới
404
+ dụ:
351
405
 
352
- ### Thêm Naming Rule mới
406
+ ```text
407
+ current_frame: 0
408
+ current_layer: 1
409
+ current_step: DRAW_FRAME
410
+ step_status: IN_PROGRESS
411
+ ```
353
412
 
354
- ```javascript
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
- // Thêm validator
366
- function validateNewObjectName(name) {
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
- ### Thêm Workflow Step mới
419
+ sau khi frame 0 đã hoàn tất.
378
420
 
379
- ```javascript
380
- // rules.js
381
- const WORKFLOW_STEPS = [
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
- // prerequisites.js Thêm tool validate nếu cần
387
- registerTool(server, 'validate_new_step', 'Kiểm tra...', {...}, (p) => {...});
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
- ## Tóm tắt
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
- Module `rules/` đảm bảo:
464
+ Mọi thao tác phải có trạng thái rõ ràng:
395
465
 
396
- ✅ Agent **bắt buộc** tuân theo thứ tự 9 bước
397
- ✅ Tất cả tên đều **hợp lệ** theo quy tắc
398
- ✅ Kích thước canvas **nằm trong giới hạn**
399
- ✅ Agent **không thể bỏ qua** bước nào
400
- ✅ Có thể **kiểm tra tiến trình** bất cứ lúc nào
401
- ✅ Có thể **reset** nếu cần làm lại
466
+ ```text
467
+ mode
468
+ step
469
+ layer
470
+ frame
471
+ status
472
+ user_approval
473
+ history
474
+ ```
402
475
 
403
- **Mục tiêu:** Không còn tình trạng "agent muốn làm nấy" mọi thao tác đều**rule engine** giám sát.
476
+ Mục tiêu của hệ thống đảm bảo toàn bộ quá trình tạo ảnh, sửa ảnh và tạo animation 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 đó.