codymaster 4.6.0 → 4.8.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.
Files changed (127) hide show
  1. package/CHANGELOG.md +19 -1
  2. package/README.md +80 -30
  3. package/dist/browse-server.js +251 -0
  4. package/dist/cli/command-registry.js +26 -0
  5. package/dist/cli/commands/agent.js +120 -0
  6. package/dist/cli/commands/dashboard.js +93 -0
  7. package/dist/cli/commands/design-studio.js +111 -0
  8. package/dist/cli/commands/distro.js +25 -0
  9. package/dist/cli/commands/engineering.js +488 -0
  10. package/dist/cli/commands/project.js +324 -0
  11. package/dist/cli/commands/skill-chain.js +269 -0
  12. package/dist/cli/commands/system.js +89 -0
  13. package/dist/cli/commands/task.js +254 -0
  14. package/dist/cli/update-check.js +83 -0
  15. package/dist/cm-config.js +110 -0
  16. package/dist/cm-suggest.js +77 -0
  17. package/dist/distro-validate.js +54 -0
  18. package/dist/guardian-core.js +74 -0
  19. package/dist/index.js +36 -2759
  20. package/dist/mcp-context-server.js +60 -1
  21. package/dist/mcp-skills-tools.js +81 -0
  22. package/dist/retro-summary.js +70 -0
  23. package/dist/second-opinion-providers.js +79 -0
  24. package/dist/sprint-pipeline.js +228 -0
  25. package/dist/storage-backend.js +5 -60
  26. package/dist/utils/cli-utils.js +76 -0
  27. package/dist/utils/skill-utils.js +32 -0
  28. package/install.sh +274 -50
  29. package/package.json +16 -5
  30. package/scripts/build-skills.mjs +51 -0
  31. package/scripts/gate-0-repo-hygiene.js +75 -0
  32. package/scripts/postinstall.js +55 -0
  33. package/scripts/security-scan.js +1 -1
  34. package/scripts/validate-skills.mjs +42 -0
  35. package/scripts/viking-demo.ts +105 -0
  36. package/skills/CLAUDE.md +2 -2
  37. package/skills/cm-ads-tracker/SKILL.md +3 -6
  38. package/skills/cm-browse/SKILL.md +28 -0
  39. package/skills/cm-conductor-worktrees/SKILL.md +24 -0
  40. package/skills/cm-content-factory/SKILL.md +1 -1
  41. package/skills/cm-content-factory/landing/docs/content/changelog.md +36 -0
  42. package/skills/cm-content-factory/landing/docs/content/deployment.md +46 -0
  43. package/skills/cm-content-factory/landing/docs/content/execution-flow.md +67 -0
  44. package/skills/cm-content-factory/landing/docs/content/openspace.md +27 -0
  45. package/skills/cm-content-factory/landing/docs/content/openviking.md +33 -0
  46. package/skills/cm-content-factory/landing/docs/content/use-cases.md +26 -0
  47. package/skills/cm-content-factory/landing/docs/content/v5-intro.md +28 -0
  48. package/skills/cm-content-factory/landing/docs/index.html +240 -0
  49. package/skills/cm-content-factory/landing/index.html +99 -99
  50. package/skills/cm-content-factory/landing/script.js +42 -0
  51. package/skills/cm-content-factory/landing/translations.js +400 -400
  52. package/skills/cm-design-studio/SKILL.md +30 -0
  53. package/skills/cm-ecosystem-roadmap/SKILL.md +11 -0
  54. package/skills/cm-engineering-meta/SKILL.md +69 -0
  55. package/skills/cm-growth-hacking/SKILL.md +1 -12
  56. package/skills/cm-guardian-runtime/SKILL.md +22 -0
  57. package/skills/cm-mcp-engineering/SKILL.md +18 -0
  58. package/skills/cm-notebooklm/SKILL.md +1 -17
  59. package/skills/cm-post-deploy-canary/SKILL.md +18 -0
  60. package/skills/cm-qa-visual-cli/SKILL.md +18 -0
  61. package/skills/cm-retro-cli/SKILL.md +19 -0
  62. package/skills/cm-second-opinion-cli/SKILL.md +19 -0
  63. package/skills/cm-secret-shield/SKILL.md +2 -2
  64. package/skills/cm-sprint-bus/SKILL.md +29 -0
  65. package/skills/cm-tdd/SKILL.md +61 -74
  66. package/skills/profiles/README.md +21 -0
  67. package/skills/profiles/core.txt +23 -0
  68. package/skills/profiles/design.txt +6 -0
  69. package/skills/profiles/full.txt +58 -0
  70. package/skills/profiles/growth.txt +10 -0
  71. package/skills/profiles/knowledge.txt +7 -0
  72. package/scripts/test-gemini.js +0 -13
  73. package/skills/cm-frappe-agent/SKILL.md +0 -134
  74. package/skills/cm-frappe-agent/agents/doctype-architect.md +0 -596
  75. package/skills/cm-frappe-agent/agents/erpnext-customizer.md +0 -643
  76. package/skills/cm-frappe-agent/agents/frappe-backend.md +0 -814
  77. package/skills/cm-frappe-agent/agents/frappe-custom-frontend.md +0 -557
  78. package/skills/cm-frappe-agent/agents/frappe-debugger.md +0 -625
  79. package/skills/cm-frappe-agent/agents/frappe-fixer.md +0 -275
  80. package/skills/cm-frappe-agent/agents/frappe-frontend.md +0 -660
  81. package/skills/cm-frappe-agent/agents/frappe-installer.md +0 -158
  82. package/skills/cm-frappe-agent/agents/frappe-performance.md +0 -307
  83. package/skills/cm-frappe-agent/agents/frappe-planner.md +0 -419
  84. package/skills/cm-frappe-agent/agents/frappe-remote-ops.md +0 -153
  85. package/skills/cm-frappe-agent/agents/github-workflow.md +0 -286
  86. package/skills/cm-frappe-agent/commands/frappe-app.md +0 -351
  87. package/skills/cm-frappe-agent/commands/frappe-backend.md +0 -162
  88. package/skills/cm-frappe-agent/commands/frappe-bench.md +0 -254
  89. package/skills/cm-frappe-agent/commands/frappe-debug.md +0 -263
  90. package/skills/cm-frappe-agent/commands/frappe-doctype-create.md +0 -272
  91. package/skills/cm-frappe-agent/commands/frappe-doctype-field.md +0 -310
  92. package/skills/cm-frappe-agent/commands/frappe-erpnext.md +0 -210
  93. package/skills/cm-frappe-agent/commands/frappe-fix.md +0 -59
  94. package/skills/cm-frappe-agent/commands/frappe-frontend.md +0 -210
  95. package/skills/cm-frappe-agent/commands/frappe-fullstack.md +0 -243
  96. package/skills/cm-frappe-agent/commands/frappe-github.md +0 -57
  97. package/skills/cm-frappe-agent/commands/frappe-install.md +0 -52
  98. package/skills/cm-frappe-agent/commands/frappe-plan.md +0 -442
  99. package/skills/cm-frappe-agent/commands/frappe-remote.md +0 -58
  100. package/skills/cm-frappe-agent/commands/frappe-test.md +0 -356
  101. package/skills/cm-frappe-agent/docs/README.md +0 -51
  102. package/skills/cm-frappe-agent/docs/agents-catalog.md +0 -113
  103. package/skills/cm-frappe-agent/docs/architecture.md +0 -149
  104. package/skills/cm-frappe-agent/docs/commands-catalog.md +0 -82
  105. package/skills/cm-frappe-agent/docs/resources-catalog.md +0 -66
  106. package/skills/cm-frappe-agent/docs/sitemap-urls.txt +0 -52
  107. package/skills/cm-frappe-agent/docs/sitemap.md +0 -81
  108. package/skills/cm-frappe-agent/docs/sop/user-guide.md +0 -178
  109. package/skills/cm-frappe-agent/docs/sop/vibe-coding-guide.md +0 -122
  110. package/skills/cm-frappe-agent/resources/7-layer-architecture.md +0 -985
  111. package/skills/cm-frappe-agent/resources/bench_commands.md +0 -73
  112. package/skills/cm-frappe-agent/resources/code-patterns-guide.md +0 -948
  113. package/skills/cm-frappe-agent/resources/common_pitfalls.md +0 -266
  114. package/skills/cm-frappe-agent/resources/doctype-registry.md +0 -158
  115. package/skills/cm-frappe-agent/resources/installation-guide.md +0 -289
  116. package/skills/cm-frappe-agent/resources/rest-api-patterns.md +0 -182
  117. package/skills/cm-frappe-agent/resources/scaffold_checklist.md +0 -82
  118. package/skills/cm-frappe-agent/resources/upgrade_patterns.md +0 -113
  119. package/skills/cm-frappe-agent/resources/web-form-patterns.md +0 -252
  120. package/skills/cm-frappe-agent/skills/bench-commands/SKILL.md +0 -621
  121. package/skills/cm-frappe-agent/skills/client-scripts/SKILL.md +0 -642
  122. package/skills/cm-frappe-agent/skills/doctype-patterns/SKILL.md +0 -576
  123. package/skills/cm-frappe-agent/skills/frappe-api/SKILL.md +0 -740
  124. package/skills/cm-frappe-agent/skills/remote-operations/SKILL.md +0 -47
  125. package/skills/cm-frappe-agent/skills/server-scripts/SKILL.md +0 -608
  126. package/skills/cm-frappe-agent/skills/web-forms/SKILL.md +0 -46
  127. package/skills/frappe-app-builder.zip +0 -0
@@ -1,356 +0,0 @@
1
- ---
2
- description: Run Frappe tests with various options including specific DocTypes, modules, apps, and coverage reporting
3
- allowed-tools: Bash, Read, Grep, Glob
4
- argument-hint: [app_name] [--doctype <name>] [--module <name>] [--coverage]
5
- ---
6
-
7
- # Run Frappe Tests
8
-
9
- Execute Frappe test suites with various filtering and reporting options.
10
-
11
- ## Arguments
12
-
13
- Parse the user's input: $ARGUMENTS
14
-
15
- - **app_name**: (Optional) App to test
16
- - **--doctype**: Test specific DocType
17
- - **--module**: Test specific module
18
- - **--coverage**: Generate coverage report
19
- - **--parallel**: Run tests in parallel
20
- - **--failfast**: Stop on first failure
21
-
22
- ## Process
23
-
24
- ### Step 1: Detect Environment
25
-
26
- ```bash
27
- # Find site
28
- cat sites/currentsite.txt 2>/dev/null || echo "No default site"
29
-
30
- # List available apps
31
- ls apps/
32
- ```
33
-
34
- ### Step 2: Determine Test Scope
35
-
36
- Based on arguments, determine what to test:
37
- - All tests (no arguments)
38
- - App tests (`--app erpnext`)
39
- - Module tests (`--module erpnext.accounts`)
40
- - DocType tests (`--doctype "Sales Invoice"`)
41
-
42
- ### Step 3: Run Tests
43
-
44
- #### All Tests
45
- ```bash
46
- bench --site <sitename> run-tests
47
- ```
48
-
49
- #### App Tests
50
- ```bash
51
- bench --site <sitename> run-tests --app my_app
52
- ```
53
-
54
- #### Module Tests
55
- ```bash
56
- bench --site <sitename> run-tests --module my_app.my_module.doctype.my_doctype
57
- ```
58
-
59
- #### DocType Tests
60
- ```bash
61
- bench --site <sitename> run-tests --doctype "My DocType"
62
- ```
63
-
64
- #### With Coverage
65
- ```bash
66
- bench --site <sitename> run-tests --app my_app --coverage
67
- ```
68
-
69
- #### Parallel Tests
70
- ```bash
71
- bench --site <sitename> run-tests --app my_app --parallel
72
- ```
73
-
74
- #### Skip Test Data Setup
75
- ```bash
76
- bench --site <sitename> run-tests --app my_app --skip-setup
77
- ```
78
-
79
- ### Step 4: Analyze Results
80
-
81
- Parse test output for:
82
- - Passed tests
83
- - Failed tests
84
- - Errors
85
- - Skipped tests
86
- - Coverage percentage (if enabled)
87
-
88
- ## Test File Structure
89
-
90
- ```
91
- my_app/
92
- └── my_module/
93
- └── doctype/
94
- └── my_doctype/
95
- └── test_my_doctype.py
96
- ```
97
-
98
- ## Writing Tests
99
-
100
- ### Basic Test
101
- ```python
102
- # test_my_doctype.py
103
- import frappe
104
- from frappe.tests.utils import FrappeTestCase
105
-
106
-
107
- class TestMyDocType(FrappeTestCase):
108
- def setUp(self):
109
- """Run before each test"""
110
- self.doc = make_test_doc()
111
-
112
- def tearDown(self):
113
- """Run after each test"""
114
- frappe.db.rollback()
115
-
116
- def test_create_document(self):
117
- """Test document creation"""
118
- doc = frappe.get_doc({
119
- "doctype": "My DocType",
120
- "field1": "value1"
121
- })
122
- doc.insert()
123
-
124
- self.assertTrue(doc.name)
125
- self.assertEqual(doc.field1, "value1")
126
-
127
- def test_validate_required_field(self):
128
- """Test that required field raises error"""
129
- doc = frappe.get_doc({
130
- "doctype": "My DocType"
131
- # Missing required field
132
- })
133
-
134
- with self.assertRaises(frappe.MandatoryError):
135
- doc.insert()
136
-
137
- def test_calculation(self):
138
- """Test amount calculation"""
139
- doc = frappe.get_doc({
140
- "doctype": "My DocType",
141
- "qty": 10,
142
- "rate": 100
143
- })
144
- doc.insert()
145
-
146
- self.assertEqual(doc.amount, 1000)
147
- ```
148
-
149
- ### Test with Fixtures
150
- ```python
151
- # test_records.json (in same directory)
152
- [
153
- {
154
- "doctype": "My DocType",
155
- "name": "TEST-001",
156
- "field1": "Test Value"
157
- }
158
- ]
159
- ```
160
-
161
- ```python
162
- # test_my_doctype.py
163
- class TestMyDocType(FrappeTestCase):
164
- def test_with_fixture(self):
165
- """Test using fixture data"""
166
- doc = frappe.get_doc("My DocType", "TEST-001")
167
- self.assertEqual(doc.field1, "Test Value")
168
- ```
169
-
170
- ### Test API Endpoints
171
- ```python
172
- class TestMyAPI(FrappeTestCase):
173
- def test_whitelisted_method(self):
174
- """Test API endpoint"""
175
- from my_app.api import get_data
176
-
177
- result = get_data("param1")
178
-
179
- self.assertIsNotNone(result)
180
- self.assertIn("key", result)
181
-
182
- def test_api_permissions(self):
183
- """Test API requires login"""
184
- frappe.set_user("Guest")
185
-
186
- with self.assertRaises(frappe.PermissionError):
187
- from my_app.api import protected_method
188
- protected_method()
189
-
190
- frappe.set_user("Administrator")
191
- ```
192
-
193
- ### Test Document Events
194
- ```python
195
- class TestMyDocTypeEvents(FrappeTestCase):
196
- def test_on_submit(self):
197
- """Test submit creates linked document"""
198
- doc = make_test_doc()
199
- doc.insert()
200
- doc.submit()
201
-
202
- # Check linked document was created
203
- linked = frappe.get_all("Linked DocType",
204
- filters={"reference": doc.name})
205
-
206
- self.assertEqual(len(linked), 1)
207
-
208
- def test_on_cancel_reverses(self):
209
- """Test cancel reverses changes"""
210
- doc = make_test_doc()
211
- doc.insert()
212
- doc.submit()
213
-
214
- original_value = get_related_value()
215
-
216
- doc.cancel()
217
-
218
- new_value = get_related_value()
219
- self.assertNotEqual(original_value, new_value)
220
- ```
221
-
222
- ## Test Utilities
223
-
224
- ### Create Test Records
225
- ```python
226
- def make_test_doc(**kwargs):
227
- """Helper to create test documents"""
228
- doc = frappe.get_doc({
229
- "doctype": "My DocType",
230
- "field1": kwargs.get("field1", "Default"),
231
- "field2": kwargs.get("field2", "Default")
232
- })
233
- return doc
234
-
235
-
236
- def make_test_customer():
237
- """Create test customer"""
238
- if not frappe.db.exists("Customer", "_Test Customer"):
239
- doc = frappe.get_doc({
240
- "doctype": "Customer",
241
- "customer_name": "_Test Customer",
242
- "customer_type": "Company"
243
- })
244
- doc.insert()
245
- return frappe.get_doc("Customer", "_Test Customer")
246
- ```
247
-
248
- ### Assertions
249
- ```python
250
- # Common assertions
251
- self.assertEqual(a, b)
252
- self.assertNotEqual(a, b)
253
- self.assertTrue(condition)
254
- self.assertFalse(condition)
255
- self.assertIsNone(value)
256
- self.assertIsNotNone(value)
257
- self.assertIn(item, container)
258
- self.assertNotIn(item, container)
259
- self.assertRaises(ExceptionType, callable, *args)
260
- self.assertAlmostEqual(a, b, places=2)
261
- ```
262
-
263
- ### Test Context Managers
264
- ```python
265
- from frappe.tests.utils import change_settings
266
-
267
- class TestWithSettings(FrappeTestCase):
268
- def test_with_changed_settings(self):
269
- with change_settings("Selling Settings", {
270
- "allow_negative_stock": 1
271
- }):
272
- # Test with changed settings
273
- pass
274
- # Settings restored after context
275
- ```
276
-
277
- ## Coverage Report
278
-
279
- ```bash
280
- # Generate coverage
281
- bench --site <sitename> run-tests --app my_app --coverage
282
-
283
- # View coverage report
284
- # HTML report in htmlcov/index.html
285
- ```
286
-
287
- ## Debugging Tests
288
-
289
- ### Run with Verbose Output
290
- ```bash
291
- bench --site <sitename> run-tests --app my_app -v
292
- ```
293
-
294
- ### Run Single Test
295
- ```bash
296
- bench --site <sitename> run-tests \
297
- --module my_app.my_module.doctype.my_doctype.test_my_doctype \
298
- --test test_create_document
299
- ```
300
-
301
- ### Debug in Console
302
- ```bash
303
- bench --site <sitename> console
304
- ```
305
-
306
- ```python
307
- # In console
308
- from my_app.my_module.doctype.my_doctype.test_my_doctype import TestMyDocType
309
-
310
- test = TestMyDocType()
311
- test.setUp()
312
- test.test_create_document() # Run specific test
313
- ```
314
-
315
- ## Common Test Patterns
316
-
317
- ### Test Permissions
318
- ```python
319
- def test_user_cannot_access(self):
320
- frappe.set_user("test_user@example.com")
321
-
322
- with self.assertRaises(frappe.PermissionError):
323
- frappe.get_doc("Restricted DocType", "DOC-001")
324
-
325
- frappe.set_user("Administrator")
326
- ```
327
-
328
- ### Test Validation
329
- ```python
330
- def test_date_validation(self):
331
- doc = make_test_doc()
332
- doc.start_date = "2024-01-15"
333
- doc.end_date = "2024-01-10" # Before start
334
-
335
- with self.assertRaises(frappe.ValidationError):
336
- doc.insert()
337
- ```
338
-
339
- ### Test Background Jobs
340
- ```python
341
- def test_enqueued_job(self):
342
- from my_app.tasks import my_task
343
-
344
- # Run synchronously for testing
345
- result = my_task(param="value")
346
-
347
- self.assertEqual(result, expected_value)
348
- ```
349
-
350
- ## Output
351
-
352
- After running tests, provide:
353
- 1. Summary: passed/failed/errors
354
- 2. Failed test details
355
- 3. Coverage percentage (if requested)
356
- 4. Suggestions for fixing failures
@@ -1,51 +0,0 @@
1
- ---
2
- title: "Frappe Dev Master — Tài liệu Toàn diện"
3
- description: "Trang chủ hệ thống tài liệu kỹ thuật, hướng dẫn sử dụng, và danh mục AI Agent của Frappe Dev Master — bộ công cụ AI phát triển Frappe/ERPNext toàn vòng đời."
4
- keywords: "frappe, erpnext, ai skill, vibe coding, documentation, cli, devtool"
5
- robots: "index, follow"
6
- ---
7
-
8
- # Frappe Dev Master — Tổng quan
9
-
10
- > **Bộ công cụ AI toàn diện cho phát triển Frappe/ERPNext** — từ cài đặt, thiết kế, lập trình, tới gỡ lỗi, tối ưu hiệu năng và vận hành từ xa. Hỗ trợ Vibe Coding qua CLI (`frappe-devtool`) và AI Skill (`frappe-dev-master`).
11
-
12
- ## Thành phần Hệ thống
13
-
14
- | Thành phần | Mô tả | Files |
15
- |---|---|---|
16
- | **SKILL.md** | Bộ não trung tâm — điều phối tất cả agents và skills | 1 file |
17
- | **Agents** | AI Agents chuyên biệt cho từng giai đoạn lifecycle | 12 agents |
18
- | **Commands** | CLI commands cho tương tác nhanh | 15 commands |
19
- | **Resources** | Tài liệu tham khảo kiến trúc và patterns | 8 files |
20
- | **Sub-Skills** | Cú pháp chi tiết cho từng lĩnh vực kỹ thuật | 7 skills |
21
-
22
- ## Vòng đời Phát triển (Development Lifecycle)
23
-
24
- ```
25
- INSTALL → PLAN → BUILD → TEST → DEBUG → FIX → OPTIMIZE → DEPLOY → OPERATE
26
- ```
27
-
28
- 1. **INSTALL** — Cài đặt bench, site, apps → [frappe-installer](../agents/frappe-installer.md)
29
- 2. **PLAN** — Thiết kế kiến trúc, DocType → [frappe-planner](../agents/frappe-planner.md)
30
- 3. **BUILD** — Lập trình Backend/Frontend → [frappe-backend](../agents/frappe-backend.md), [frappe-frontend](../agents/frappe-frontend.md)
31
- 4. **TEST** — Kiểm thử tự động → [commands/frappe-test](../commands/frappe-test.md)
32
- 5. **DEBUG** — Phân tích lỗi → [frappe-debugger](../agents/frappe-debugger.md)
33
- 6. **FIX** — Sửa lỗi có cấu trúc → [frappe-fixer](../agents/frappe-fixer.md)
34
- 7. **OPTIMIZE** — Tối ưu hiệu năng → [frappe-performance](../agents/frappe-performance.md)
35
- 8. **DEPLOY** — Triển khai production → [commands/frappe-bench](../commands/frappe-bench.md)
36
- 9. **OPERATE** — Vận hành từ xa qua REST API → [frappe-remote-ops](../agents/frappe-remote-ops.md)
37
-
38
- ## Nội dung Tài liệu
39
-
40
- | # | Tài liệu | Mô tả |
41
- |---|---|---|
42
- | 1 | [Kiến trúc Hệ thống](architecture.md) | 7-Layer Architecture, Data Flow, ADR |
43
- | 2 | [Danh mục AI Agents](agents-catalog.md) | 12 agents chuyên biệt với chức năng & workflow |
44
- | 3 | [Danh mục CLI Commands](commands-catalog.md) | 15 commands cho tương tác nhanh |
45
- | 4 | [Tài liệu Tham khảo](resources-catalog.md) | Resources và Sub-Skills kỹ thuật |
46
- | 5 | [Hướng dẫn Sử dụng (SOP)](sop/user-guide.md) | Step-by-step cho từng tác vụ |
47
- | 6 | [Hướng dẫn Vibe Coding](sop/vibe-coding-guide.md) | Tích hợp AI Agent (Cursor, OpenClaw, OpenFang) |
48
- | 7 | [Sitemap cho AI/LLM](sitemap.md) | Dành cho NotebookLM và Semantic Search |
49
-
50
- ---
51
- *Tài liệu tự động tạo bởi `cm-dockit` Workflow — 2026-03-25*
@@ -1,113 +0,0 @@
1
- ---
2
- title: "Danh mục AI Agents"
3
- description: "Catalogue chi tiết 12 AI Agents chuyên biệt trong Frappe Dev Master — chức năng, trigger conditions, và workflow."
4
- keywords: "frappe agents, ai agent, doctype architect, backend, frontend, debugger, fixer, performance"
5
- robots: "index, follow"
6
- ---
7
-
8
- # Danh mục AI Agents
9
-
10
- > **12 AI Agents** phân chia thành 2 nhóm: **Build** (phát triển) và **Operate** (vận hành). Mỗi agent có chuyên môn riêng, được SKILL.md điều phối tự động dựa trên ngữ cảnh yêu cầu.
11
-
12
- ---
13
-
14
- ## Nhóm 1: Build Agents (Phát triển)
15
-
16
- ### 1.1 DocType Architect
17
- - **File:** `agents/doctype-architect.md`
18
- - **Trigger:** "thiết kế DocType", "schema", "workflow states", "naming rule"
19
- - **Chức năng:** Thiết kế cấu trúc database (JSON schema), quan hệ DocType, workflow states, naming conventions
20
- - **Output:** DocType JSON files, Custom Field definitions, Property Setters
21
-
22
- ### 1.2 Frappe Backend
23
- - **File:** `agents/frappe-backend.md`
24
- - **Trigger:** "viết API", "controller", "background job", "engine"
25
- - **Chức năng:** Lập trình Python server-side — Controllers, Engines (Layer 2), API endpoints
26
- - **Quy tắc:** Luôn tách business logic ra `engines/`, dùng idempotent upsert
27
-
28
- ### 1.3 Frappe Frontend
29
- - **File:** `agents/frappe-frontend.md`
30
- - **Trigger:** "client script", "form script", "dialog", "list view"
31
- - **Chức năng:** JavaScript Frappe Forms, Dialogs, List View configurations
32
- - **Quy tắc:** Dùng `window.myapp` namespace, kiểm tra element tồn tại trước khi thao tác
33
-
34
- ### 1.4 Custom Frontend
35
- - **File:** `agents/frappe-custom-frontend.md`
36
- - **Trigger:** "trang custom", "standalone page", "custom frontend"
37
- - **Chức năng:** Standalone frontend pages ngoài Desk UI chuẩn của Frappe
38
-
39
- ### 1.5 ERPNext Customizer
40
- - **File:** `agents/erpnext-customizer.md`
41
- - **Trigger:** "mở rộng ERPNext", "custom field", "property setter"
42
- - **Chức năng:** Mở rộng an toàn các module core ERPNext qua Custom Fields/Property Setters
43
- - **Quy tắc:** KHÔNG BAO GIỜ sửa file core — luôn dùng hooks.py
44
-
45
- ---
46
-
47
- ## Nhóm 2: Lifecycle Agents (Vận hành)
48
-
49
- ### 2.1 Frappe Installer
50
- - **File:** `agents/frappe-installer.md`
51
- - **Trigger:** "cài đặt frappe", "install bench", "setup site", "production setup"
52
- - **Chức năng:** Cài đặt môi trường (Python, Node, MariaDB, Redis), bench init, site creation, production deployment (Nginx, Supervisor, SSL)
53
- - **Workflow:** Detect Environment → Install Prerequisites → Init Bench → Create Site → Install Apps
54
- - **Bảng lỗi thường gặp:** 8 common errors with quick fixes
55
-
56
- ### 2.2 Frappe Planner
57
- - **File:** `agents/frappe-planner.md`
58
- - **Trigger:** "lên kế hoạch", "feature planning", "technical design"
59
- - **Chức năng:** Lập kế hoạch feature mới, thiết kế kỹ thuật, ADR
60
-
61
- ### 2.3 Frappe Debugger
62
- - **File:** `agents/frappe-debugger.md`
63
- - **Trigger:** "phân tích lỗi", "debug", "check error", "log investigation"
64
- - **Chức năng:** Phân tích lỗi (chỉ read-only), log investigation, không sửa code
65
- - **Phân biệt:** Debugger chỉ **phân tích**, Fixer mới **sửa**
66
-
67
- ### 2.4 Frappe Fixer ⭐
68
- - **File:** `agents/frappe-fixer.md`
69
- - **Trigger:** "sửa lỗi", "fix bug", "fix error", "solve frappe error"
70
- - **Chức năng:** Sửa lỗi theo vòng lặp bắt buộc 6 bước
71
- - **Fix Loop (MANDATORY):**
72
- 1. **REPRODUCE** — Xác nhận lỗi tồn tại
73
- 2. **DIAGNOSE** — Tìm nguyên nhân gốc (không chỉ triệu chứng)
74
- 3. **HYPOTHESIZE** — Đề xuất fix tối thiểu
75
- 4. **FIX** — Áp dụng thay đổi (theo 7-Layer)
76
- 5. **VERIFY** — Kiểm tra fix hoạt động, không regression
77
- 6. **DOCUMENT** — Ghi chép lại lỗi và cách sửa
78
-
79
- ### 2.5 Frappe Performance ⭐
80
- - **File:** `agents/frappe-performance.md`
81
- - **Trigger:** "chậm", "slow query", "optimize", "performance", "caching"
82
- - **Chức năng:** Query optimization, profiling (cProfile, tracemalloc), caching strategy, N+1 detection
83
- - **Workflow:** Identify Bottleneck → Profile Code → Find Root Cause → Optimize
84
- - **Common Patterns:** N+1 queries, missing indexes, over-fetching, no caching
85
-
86
- ### 2.6 Frappe Remote Ops
87
- - **File:** `agents/frappe-remote-ops.md`
88
- - **Trigger:** "remote API", "REST API", "frappe cloud", "curl frappe"
89
- - **Chức năng:** CRUD qua REST API, report execution, Web Form management, DocType discovery
90
- - **Security:** KHÔNG tiết lộ API keys, LUÔN xác nhận trước thao tác xóa
91
-
92
- ### 2.7 GitHub Workflow
93
- - **File:** `agents/github-workflow.md`
94
- - **Trigger:** "git", "github", "ci/cd", "pull request"
95
- - **Chức năng:** Git operations, CI/CD configuration, GitHub Actions
96
-
97
- ---
98
-
99
- ## Ma trận Phối hợp Agent
100
-
101
- Khi một agent cần hỗ trợ từ agent khác:
102
-
103
- | Tình huống | Agent gốc | Chuyển tới |
104
- |---|---|---|
105
- | Fix cần thay đổi schema | Fixer | → DocType Architect |
106
- | Fix cần API mới | Fixer | → Backend |
107
- | Fix trên remote site | Fixer | → Remote Ops |
108
- | Cần phân tích sâu hơn | Fixer | → Debugger |
109
- | Performance cần index mới | Performance | → DocType Architect |
110
- | Build xong cần test | Backend/Frontend | → Commands/test |
111
-
112
- ---
113
- [← Kiến trúc](architecture.md) · [Danh mục Commands →](commands-catalog.md)
@@ -1,149 +0,0 @@
1
- ---
2
- title: "Kiến trúc Hệ thống Frappe Dev Master"
3
- description: "Tài liệu kỹ thuật mô tả Kiến trúc 7 Lớp, Hệ thống AI Agent, và Luồng Dữ liệu của Frappe Dev Master Skill."
4
- keywords: "frappe, 7-layer architecture, ai agent, data flow, adr"
5
- robots: "index, follow"
6
- ---
7
-
8
- # Kiến trúc Hệ thống
9
-
10
- > **Tham chiếu Nhanh:** `frappe-dev-master` xây dựng trên 2 trụ cột: **Kiến trúc App 7-Layer** (tách logic khỏi ORM) và **Hệ thống Điều phối AI Agent** (phân chia công việc rành mạch theo vòng đời).
11
-
12
- ## 1. Kiến trúc 7 Lớp (7-Layer Architecture)
13
-
14
- Mô hình phân lớp nghiêm ngặt đảm bảo code testable, maintainable và scalable.
15
-
16
- | Lớp | Tên | Vai trò | Ví dụ |
17
- |-----|-----|---------|-------|
18
- | 1 | **DocType Controllers** | Schema JSON + lifecycle hooks (`validate`, `on_submit`) | `my_app/my_module/doctype/my_dt/my_dt.py` |
19
- | 2 | **Engines** | Pure Python logic — side-effect-free, testable 100% | `my_app/engines/scoring_engine.py` |
20
- | 3 | **APIs** | `@frappe.whitelist` endpoints, idempotent upsert | `my_app/api/permissions.py` |
21
- | 4 | **Tasks** | Scheduler events (daily/weekly) wrapper quanh Engines | `hooks.py` → `scheduler_events` |
22
- | 5 | **Setup Hooks** | Idempotent install/migrate hooks | `after_install`, `after_migrate` |
23
- | 6 | **Tests** | Unit tests pure logic, không cần Frappe Server | `tests/test_scoring_engine.py` |
24
- | 7 | **Client JS** | Shared utility namespaces, form/list scripts | `my_app/public/js/my_app.js` |
25
-
26
- ### Luồng Dữ liệu (Data Flow)
27
-
28
- ```mermaid
29
- flowchart TD
30
- Client["Client UI / Browser"] --> API["Lớp 3: API Endpoint"]
31
- Webhook["External Webhook"] --> API
32
- Task["Lớp 4: Scheduler Tasks"] --> Engine["Lớp 2: Business Logic Engine"]
33
- API --> Engine
34
- Engine --> ORM["Lớp 1: DocType Controllers"]
35
- ORM --> DB[("MariaDB")]
36
- ```
37
-
38
- *Text fallback:* Request từ Client/Webhook → API Endpoint → Engine (Pure Python) → DocType Controller → Database. Scheduler Tasks cũng gọi trực tiếp Engine.
39
-
40
- ### Quy tắc Vàng
41
-
42
- 1. **KHÔNG** đặt business logic nặng trong DocType controller
43
- 2. **LUÔN** tách thuật toán phức tạp ra `engines/` để test độc lập
44
- 3. **LUÔN** dùng `@frappe.whitelist` cho API, KHÔNG trả về raw HTML
45
- 4. **LUÔN** dùng `frappe.log_error()`, KHÔNG dùng `frappe.logger`
46
-
47
- ---
48
-
49
- ## 2. Hệ thống AI Agent
50
-
51
- ```mermaid
52
- flowchart LR
53
- User["👤 Developer"] --> Orchestrator["🧠 SKILL.md\nĐiều phối"]
54
- Orchestrator --> Build["🔨 Build Agents"]
55
- Orchestrator --> Operate["⚙️ Lifecycle Agents"]
56
- Build --> DA["DocType Architect"]
57
- Build --> BE["Frappe Backend"]
58
- Build --> FE["Frappe Frontend"]
59
- Build --> CFE["Custom Frontend"]
60
- Build --> ERP["ERPNext Customizer"]
61
- Operate --> INS["Installer"]
62
- Operate --> PLN["Planner"]
63
- Operate --> DBG["Debugger"]
64
- Operate --> FIX["Fixer"]
65
- Operate --> PERF["Performance"]
66
- Operate --> RMT["Remote Ops"]
67
- Operate --> GH["GitHub Workflow"]
68
- ```
69
-
70
- *Text fallback:* SKILL.md là Orchestrator trung tâm. Nó điều phối 2 nhóm: Build Agents (5 agents cho phát triển) và Lifecycle Agents (7 agents cho vận hành).
71
-
72
- ### Nhóm Build Agents (Phát triển)
73
-
74
- | Agent | File | Chức năng |
75
- |-------|------|-----------|
76
- | DocType Architect | `agents/doctype-architect.md` | Thiết kế schema, relations, workflow states |
77
- | Frappe Backend | `agents/frappe-backend.md` | Python APIs, controllers, background jobs |
78
- | Frappe Frontend | `agents/frappe-frontend.md` | Client scripts, dialogs, custom formatters |
79
- | Custom Frontend | `agents/frappe-custom-frontend.md` | Standalone frontend pages |
80
- | ERPNext Customizer | `agents/erpnext-customizer.md` | Mở rộng ERPNext core an toàn |
81
-
82
- ### Nhóm Lifecycle Agents (Vận hành)
83
-
84
- | Agent | File | Chức năng |
85
- |-------|------|-----------|
86
- | Installer | `agents/frappe-installer.md` | Cài đặt bench, site, production |
87
- | Planner | `agents/frappe-planner.md` | Lập kế hoạch feature, ADR |
88
- | Debugger | `agents/frappe-debugger.md` | Phân tích lỗi, log investigation |
89
- | Fixer | `agents/frappe-fixer.md` | Sửa lỗi có cấu trúc 6-bước |
90
- | Performance | `agents/frappe-performance.md` | Query optimization, profiling, caching |
91
- | Remote Ops | `agents/frappe-remote-ops.md` | REST API operations cho remote sites |
92
- | GitHub Workflow | `agents/github-workflow.md` | Git operations, CI/CD |
93
-
94
- ---
95
-
96
- ## 3. Quyết Định Kiến Trúc (ADR)
97
-
98
- | Quyết định | Lý do |
99
- |------------|-------|
100
- | **Tách Engine ra khỏi Controller** | DocType controller đòi HTTP Context + DB. Engine thuần Python → test nhanh, CI tự động |
101
- | **Không dùng Raw SQL mặc định** | Bypass cơ chế Role Permission → rủi ro SQL Injection. Ưu tiên `frappe.get_doc`, `frappe.db.get_list` |
102
- | **Luôn dùng `frappe.log_error()`** | `frappe.logger` không ghi vào Error Log DocType → mất trace |
103
- | **Idempotent Upsert cho API** | Tránh duplicate entries khi retry, đảm bảo safe CI/CD |
104
-
105
- ---
106
-
107
- ## 4. Cấu trúc Thư mục
108
-
109
- ```
110
- frappe-dev-master/
111
- ├── SKILL.md # Bộ não điều phối trung tâm
112
- ├── agents/ # 12 AI Agents chuyên biệt
113
- │ ├── doctype-architect.md
114
- │ ├── frappe-backend.md
115
- │ ├── frappe-frontend.md
116
- │ ├── frappe-installer.md
117
- │ ├── frappe-fixer.md
118
- │ ├── frappe-debugger.md
119
- │ ├── frappe-performance.md
120
- │ ├── frappe-remote-ops.md
121
- │ └── ...
122
- ├── commands/ # 15 CLI Commands
123
- │ ├── frappe-app.md
124
- │ ├── frappe-backend.md
125
- │ ├── frappe-bench.md
126
- │ ├── frappe-install.md
127
- │ ├── frappe-fix.md
128
- │ ├── frappe-remote.md
129
- │ └── ...
130
- ├── resources/ # 8+ Tài liệu tham khảo
131
- │ ├── 7-layer-architecture.md
132
- │ ├── bench_commands.md
133
- │ ├── common_pitfalls.md
134
- │ ├── rest-api-patterns.md
135
- │ ├── installation-guide.md
136
- │ └── ...
137
- ├── skills/ # 7 Sub-Skills
138
- │ ├── doctype-patterns/
139
- │ ├── server-scripts/
140
- │ ├── client-scripts/
141
- │ ├── frappe-api/
142
- │ ├── bench-commands/
143
- │ ├── remote-operations/
144
- │ └── web-forms/
145
- └── docs/ # Tài liệu này
146
- ```
147
-
148
- ---
149
- [← Trang Chủ](README.md) · [Danh mục Agents →](agents-catalog.md)