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.
- package/CHANGELOG.md +19 -1
- package/README.md +80 -30
- package/dist/browse-server.js +251 -0
- package/dist/cli/command-registry.js +26 -0
- package/dist/cli/commands/agent.js +120 -0
- package/dist/cli/commands/dashboard.js +93 -0
- package/dist/cli/commands/design-studio.js +111 -0
- package/dist/cli/commands/distro.js +25 -0
- package/dist/cli/commands/engineering.js +488 -0
- package/dist/cli/commands/project.js +324 -0
- package/dist/cli/commands/skill-chain.js +269 -0
- package/dist/cli/commands/system.js +89 -0
- package/dist/cli/commands/task.js +254 -0
- package/dist/cli/update-check.js +83 -0
- package/dist/cm-config.js +110 -0
- package/dist/cm-suggest.js +77 -0
- package/dist/distro-validate.js +54 -0
- package/dist/guardian-core.js +74 -0
- package/dist/index.js +36 -2759
- package/dist/mcp-context-server.js +60 -1
- package/dist/mcp-skills-tools.js +81 -0
- package/dist/retro-summary.js +70 -0
- package/dist/second-opinion-providers.js +79 -0
- package/dist/sprint-pipeline.js +228 -0
- package/dist/storage-backend.js +5 -60
- package/dist/utils/cli-utils.js +76 -0
- package/dist/utils/skill-utils.js +32 -0
- package/install.sh +274 -50
- package/package.json +16 -5
- package/scripts/build-skills.mjs +51 -0
- package/scripts/gate-0-repo-hygiene.js +75 -0
- package/scripts/postinstall.js +55 -0
- package/scripts/security-scan.js +1 -1
- package/scripts/validate-skills.mjs +42 -0
- package/scripts/viking-demo.ts +105 -0
- package/skills/CLAUDE.md +2 -2
- package/skills/cm-ads-tracker/SKILL.md +3 -6
- package/skills/cm-browse/SKILL.md +28 -0
- package/skills/cm-conductor-worktrees/SKILL.md +24 -0
- package/skills/cm-content-factory/SKILL.md +1 -1
- package/skills/cm-content-factory/landing/docs/content/changelog.md +36 -0
- package/skills/cm-content-factory/landing/docs/content/deployment.md +46 -0
- package/skills/cm-content-factory/landing/docs/content/execution-flow.md +67 -0
- package/skills/cm-content-factory/landing/docs/content/openspace.md +27 -0
- package/skills/cm-content-factory/landing/docs/content/openviking.md +33 -0
- package/skills/cm-content-factory/landing/docs/content/use-cases.md +26 -0
- package/skills/cm-content-factory/landing/docs/content/v5-intro.md +28 -0
- package/skills/cm-content-factory/landing/docs/index.html +240 -0
- package/skills/cm-content-factory/landing/index.html +99 -99
- package/skills/cm-content-factory/landing/script.js +42 -0
- package/skills/cm-content-factory/landing/translations.js +400 -400
- package/skills/cm-design-studio/SKILL.md +30 -0
- package/skills/cm-ecosystem-roadmap/SKILL.md +11 -0
- package/skills/cm-engineering-meta/SKILL.md +69 -0
- package/skills/cm-growth-hacking/SKILL.md +1 -12
- package/skills/cm-guardian-runtime/SKILL.md +22 -0
- package/skills/cm-mcp-engineering/SKILL.md +18 -0
- package/skills/cm-notebooklm/SKILL.md +1 -17
- package/skills/cm-post-deploy-canary/SKILL.md +18 -0
- package/skills/cm-qa-visual-cli/SKILL.md +18 -0
- package/skills/cm-retro-cli/SKILL.md +19 -0
- package/skills/cm-second-opinion-cli/SKILL.md +19 -0
- package/skills/cm-secret-shield/SKILL.md +2 -2
- package/skills/cm-sprint-bus/SKILL.md +29 -0
- package/skills/cm-tdd/SKILL.md +61 -74
- package/skills/profiles/README.md +21 -0
- package/skills/profiles/core.txt +23 -0
- package/skills/profiles/design.txt +6 -0
- package/skills/profiles/full.txt +58 -0
- package/skills/profiles/growth.txt +10 -0
- package/skills/profiles/knowledge.txt +7 -0
- package/scripts/test-gemini.js +0 -13
- package/skills/cm-frappe-agent/SKILL.md +0 -134
- package/skills/cm-frappe-agent/agents/doctype-architect.md +0 -596
- package/skills/cm-frappe-agent/agents/erpnext-customizer.md +0 -643
- package/skills/cm-frappe-agent/agents/frappe-backend.md +0 -814
- package/skills/cm-frappe-agent/agents/frappe-custom-frontend.md +0 -557
- package/skills/cm-frappe-agent/agents/frappe-debugger.md +0 -625
- package/skills/cm-frappe-agent/agents/frappe-fixer.md +0 -275
- package/skills/cm-frappe-agent/agents/frappe-frontend.md +0 -660
- package/skills/cm-frappe-agent/agents/frappe-installer.md +0 -158
- package/skills/cm-frappe-agent/agents/frappe-performance.md +0 -307
- package/skills/cm-frappe-agent/agents/frappe-planner.md +0 -419
- package/skills/cm-frappe-agent/agents/frappe-remote-ops.md +0 -153
- package/skills/cm-frappe-agent/agents/github-workflow.md +0 -286
- package/skills/cm-frappe-agent/commands/frappe-app.md +0 -351
- package/skills/cm-frappe-agent/commands/frappe-backend.md +0 -162
- package/skills/cm-frappe-agent/commands/frappe-bench.md +0 -254
- package/skills/cm-frappe-agent/commands/frappe-debug.md +0 -263
- package/skills/cm-frappe-agent/commands/frappe-doctype-create.md +0 -272
- package/skills/cm-frappe-agent/commands/frappe-doctype-field.md +0 -310
- package/skills/cm-frappe-agent/commands/frappe-erpnext.md +0 -210
- package/skills/cm-frappe-agent/commands/frappe-fix.md +0 -59
- package/skills/cm-frappe-agent/commands/frappe-frontend.md +0 -210
- package/skills/cm-frappe-agent/commands/frappe-fullstack.md +0 -243
- package/skills/cm-frappe-agent/commands/frappe-github.md +0 -57
- package/skills/cm-frappe-agent/commands/frappe-install.md +0 -52
- package/skills/cm-frappe-agent/commands/frappe-plan.md +0 -442
- package/skills/cm-frappe-agent/commands/frappe-remote.md +0 -58
- package/skills/cm-frappe-agent/commands/frappe-test.md +0 -356
- package/skills/cm-frappe-agent/docs/README.md +0 -51
- package/skills/cm-frappe-agent/docs/agents-catalog.md +0 -113
- package/skills/cm-frappe-agent/docs/architecture.md +0 -149
- package/skills/cm-frappe-agent/docs/commands-catalog.md +0 -82
- package/skills/cm-frappe-agent/docs/resources-catalog.md +0 -66
- package/skills/cm-frappe-agent/docs/sitemap-urls.txt +0 -52
- package/skills/cm-frappe-agent/docs/sitemap.md +0 -81
- package/skills/cm-frappe-agent/docs/sop/user-guide.md +0 -178
- package/skills/cm-frappe-agent/docs/sop/vibe-coding-guide.md +0 -122
- package/skills/cm-frappe-agent/resources/7-layer-architecture.md +0 -985
- package/skills/cm-frappe-agent/resources/bench_commands.md +0 -73
- package/skills/cm-frappe-agent/resources/code-patterns-guide.md +0 -948
- package/skills/cm-frappe-agent/resources/common_pitfalls.md +0 -266
- package/skills/cm-frappe-agent/resources/doctype-registry.md +0 -158
- package/skills/cm-frappe-agent/resources/installation-guide.md +0 -289
- package/skills/cm-frappe-agent/resources/rest-api-patterns.md +0 -182
- package/skills/cm-frappe-agent/resources/scaffold_checklist.md +0 -82
- package/skills/cm-frappe-agent/resources/upgrade_patterns.md +0 -113
- package/skills/cm-frappe-agent/resources/web-form-patterns.md +0 -252
- package/skills/cm-frappe-agent/skills/bench-commands/SKILL.md +0 -621
- package/skills/cm-frappe-agent/skills/client-scripts/SKILL.md +0 -642
- package/skills/cm-frappe-agent/skills/doctype-patterns/SKILL.md +0 -576
- package/skills/cm-frappe-agent/skills/frappe-api/SKILL.md +0 -740
- package/skills/cm-frappe-agent/skills/remote-operations/SKILL.md +0 -47
- package/skills/cm-frappe-agent/skills/server-scripts/SKILL.md +0 -608
- package/skills/cm-frappe-agent/skills/web-forms/SKILL.md +0 -46
- 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)
|