@zeyue0329/xiaoma-cli 1.0.36 → 1.0.38

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 (89) hide show
  1. package/.idea/workspace.xml +27 -26
  2. package/JAVA-BACKEND-COMMANDS-REFERENCE.md +62 -52
  3. package/JAVA-BACKEND-ITERATION-GUIDE.md +125 -18
  4. package/README.md +1 -1
  5. package/common/utils/bmad-doc-template.md +5 -5
  6. package/dist/agents/analyst.txt +35 -5
  7. package/dist/agents/architect.txt +217 -31
  8. package/dist/agents/automation-orchestrator.txt +4 -4
  9. package/dist/agents/dev.txt +3 -3
  10. package/dist/agents/full-requirement-orchestrator.txt +11 -11
  11. package/dist/agents/qa.txt +102 -102
  12. package/dist/agents/sm.txt +6 -6
  13. package/dist/agents/ux-expert.txt +6 -1
  14. package/dist/agents/workflow-executor.txt +879 -0
  15. package/dist/agents/xiaoma-master.txt +258 -37
  16. package/dist/teams/team-all.txt +1223 -445
  17. package/dist/teams/team-fullstack-with-database.txt +384 -446
  18. package/dist/teams/team-fullstack.txt +258 -37
  19. package/dist/teams/team-ide-minimal.txt +111 -111
  20. package/dist/teams/team-no-ui.txt +252 -36
  21. package/docs/architecture-sharding-modification.md +623 -0
  22. package/docs/automated-requirements-analysis-outputs.md +896 -0
  23. package/package.json +1 -1
  24. package/tools/builders/web-builder.js +292 -142
  25. package/tools/bump-all-versions.js +50 -32
  26. package/tools/cli.js +52 -47
  27. package/tools/flattener/aggregate.js +30 -12
  28. package/tools/flattener/binary.js +46 -43
  29. package/tools/flattener/discovery.js +23 -15
  30. package/tools/flattener/files.js +6 -6
  31. package/tools/flattener/ignoreRules.js +122 -121
  32. package/tools/flattener/main.js +249 -144
  33. package/tools/flattener/projectRoot.js +74 -69
  34. package/tools/flattener/prompts.js +12 -10
  35. package/tools/flattener/stats.helpers.js +90 -61
  36. package/tools/flattener/stats.js +1 -1
  37. package/tools/flattener/test-matrix.js +225 -170
  38. package/tools/flattener/xml.js +31 -23
  39. package/tools/installer/bin/xiaoma.js +199 -153
  40. package/tools/installer/lib/config-loader.js +76 -47
  41. package/tools/installer/lib/file-manager.js +101 -44
  42. package/tools/installer/lib/ide-base-setup.js +49 -39
  43. package/tools/installer/lib/ide-setup.js +694 -380
  44. package/tools/installer/lib/installer.js +802 -469
  45. package/tools/installer/lib/memory-profiler.js +22 -12
  46. package/tools/installer/lib/module-manager.js +16 -14
  47. package/tools/installer/lib/resource-locator.js +61 -35
  48. package/tools/lib/dependency-resolver.js +34 -23
  49. package/tools/lib/yaml-utils.js +7 -2
  50. package/tools/preview-release-notes.js +33 -25
  51. package/tools/shared/bannerArt.js +3 -3
  52. package/tools/sync-installer-version.js +16 -7
  53. package/tools/upgraders/v3-to-v4-upgrader.js +244 -163
  54. package/tools/version-bump.js +24 -18
  55. package/tools/xiaoma-npx-wrapper.js +15 -10
  56. package/tools/yaml-format.js +60 -36
  57. package/xiaoma-core/agent-teams/team-fullstack-with-database.yaml +0 -1
  58. package/xiaoma-core/agents/automated-fix-validator.yaml +2 -1
  59. package/xiaoma-core/agents/automated-quality-validator.yaml +10 -5
  60. package/xiaoma-core/agents/automation-orchestrator.md +4 -4
  61. package/xiaoma-core/agents/dev.md +4 -4
  62. package/xiaoma-core/agents/enhanced-workflow-orchestrator.yaml +2 -1
  63. package/xiaoma-core/agents/full-requirement-orchestrator.md +11 -11
  64. package/xiaoma-core/agents/global-requirements-auditor.yaml +11 -3
  65. package/xiaoma-core/agents/intelligent-template-adapter.yaml +19 -5
  66. package/xiaoma-core/agents/master-execution-engine.yaml +19 -5
  67. package/xiaoma-core/agents/workflow-executor.md +126 -18
  68. package/xiaoma-core/agents/xiaoma-master.md +1 -1
  69. package/xiaoma-core/data/test-levels-framework.md +12 -12
  70. package/xiaoma-core/tasks/analyze-existing-database.md +1 -1
  71. package/xiaoma-core/tasks/apply-qa-fixes.md +3 -3
  72. package/xiaoma-core/tasks/batch-story-generation.md +22 -22
  73. package/xiaoma-core/tasks/create-enhanced-story-with-database.md +6 -6
  74. package/xiaoma-core/tasks/nfr-assess.md +6 -6
  75. package/xiaoma-core/tasks/project-integration-testing.md +42 -42
  76. package/xiaoma-core/tasks/qa-gate.md +23 -23
  77. package/xiaoma-core/tasks/review-story.md +18 -18
  78. package/xiaoma-core/tasks/risk-profile.md +25 -25
  79. package/xiaoma-core/tasks/serial-development-orchestration.md +51 -51
  80. package/xiaoma-core/tasks/test-design.md +9 -9
  81. package/xiaoma-core/tasks/trace-requirements.md +21 -21
  82. package/xiaoma-core/templates/competitor-analysis-tmpl.yaml +35 -5
  83. package/xiaoma-core/templates/front-end-architecture-tmpl.yaml +77 -11
  84. package/xiaoma-core/templates/front-end-spec-tmpl.yaml +6 -1
  85. package/xiaoma-core/templates/fullstack-architecture-tmpl.yaml +140 -20
  86. package/xiaoma-core/templates/global-qa-monitoring-tmpl.yaml +2 -1
  87. package/xiaoma-core/templates/requirements-coverage-audit.yaml +2 -1
  88. package/xiaoma-core/workflows/automated-requirements-analysis.yaml +4 -4
  89. package/dist/agents/database-architect.txt +0 -322
@@ -206,16 +206,16 @@ nfr_validation:
206
206
  _assessed: [security, performance, reliability, maintainability]
207
207
  security:
208
208
  status: CONCERNS
209
- notes: 'No rate limiting on auth endpoints'
209
+ notes: "No rate limiting on auth endpoints"
210
210
  performance:
211
211
  status: PASS
212
- notes: 'Response times < 200ms verified'
212
+ notes: "Response times < 200ms verified"
213
213
  reliability:
214
214
  status: PASS
215
- notes: 'Error handling and retries implemented'
215
+ notes: "Error handling and retries implemented"
216
216
  maintainability:
217
217
  status: CONCERNS
218
- notes: 'Test coverage at 65%, target is 80%'
218
+ notes: "Test coverage at 65%, target is 80%"
219
219
  ```
220
220
 
221
221
  ## Deterministic Status Rules
@@ -445,10 +445,10 @@ performance_deep_dive:
445
445
  p99: 350ms
446
446
  database:
447
447
  slow_queries: 2
448
- missing_indexes: ['users.email', 'orders.user_id']
448
+ missing_indexes: ["users.email", "orders.user_id"]
449
449
  caching:
450
450
  hit_rate: 0%
451
- recommendation: 'Add Redis for session data'
451
+ recommendation: "Add Redis for session data"
452
452
  load_test:
453
453
  max_rps: 150
454
454
  breaking_point: 200 rps
@@ -489,11 +489,11 @@ Slug rules:
489
489
 
490
490
  ```yaml
491
491
  schema: 1
492
- story: '{epic}.{story}'
492
+ story: "{epic}.{story}"
493
493
  gate: PASS|CONCERNS|FAIL|WAIVED
494
- status_reason: '1-2 sentence explanation of gate decision'
495
- reviewer: 'Quinn'
496
- updated: '{ISO-8601 timestamp}'
494
+ status_reason: "1-2 sentence explanation of gate decision"
495
+ reviewer: "Quinn"
496
+ updated: "{ISO-8601 timestamp}"
497
497
  top_issues: [] # Empty array if no issues
498
498
  waiver: { active: false } # Only set active: true if WAIVED
499
499
  ```
@@ -502,20 +502,20 @@ waiver: { active: false } # Only set active: true if WAIVED
502
502
 
503
503
  ```yaml
504
504
  schema: 1
505
- story: '1.3'
505
+ story: "1.3"
506
506
  gate: CONCERNS
507
- status_reason: 'Missing rate limiting on auth endpoints poses security risk.'
508
- reviewer: 'Quinn'
509
- updated: '2025-01-12T10:15:00Z'
507
+ status_reason: "Missing rate limiting on auth endpoints poses security risk."
508
+ reviewer: "Quinn"
509
+ updated: "2025-01-12T10:15:00Z"
510
510
  top_issues:
511
- - id: 'SEC-001'
511
+ - id: "SEC-001"
512
512
  severity: high # ONLY: low|medium|high
513
- finding: 'No rate limiting on login endpoint'
514
- suggested_action: 'Add rate limiting middleware before production'
515
- - id: 'TEST-001'
513
+ finding: "No rate limiting on login endpoint"
514
+ suggested_action: "Add rate limiting middleware before production"
515
+ - id: "TEST-001"
516
516
  severity: medium
517
- finding: 'No integration tests for auth flow'
518
- suggested_action: 'Add integration test coverage'
517
+ finding: "No integration tests for auth flow"
518
+ suggested_action: "Add integration test coverage"
519
519
  waiver: { active: false }
520
520
  ```
521
521
 
@@ -523,20 +523,20 @@ waiver: { active: false }
523
523
 
524
524
  ```yaml
525
525
  schema: 1
526
- story: '1.3'
526
+ story: "1.3"
527
527
  gate: WAIVED
528
- status_reason: 'Known issues accepted for MVP release.'
529
- reviewer: 'Quinn'
530
- updated: '2025-01-12T10:15:00Z'
528
+ status_reason: "Known issues accepted for MVP release."
529
+ reviewer: "Quinn"
530
+ updated: "2025-01-12T10:15:00Z"
531
531
  top_issues:
532
- - id: 'PERF-001'
532
+ - id: "PERF-001"
533
533
  severity: low
534
- finding: 'Dashboard loads slowly with 1000+ items'
535
- suggested_action: 'Implement pagination in next sprint'
534
+ finding: "Dashboard loads slowly with 1000+ items"
535
+ suggested_action: "Implement pagination in next sprint"
536
536
  waiver:
537
537
  active: true
538
- reason: 'MVP release - performance optimization deferred'
539
- approved_by: 'Product Owner'
538
+ reason: "MVP release - performance optimization deferred"
539
+ approved_by: "Product Owner"
540
540
  ```
541
541
 
542
542
  ## Gate Decision Criteria
@@ -634,10 +634,10 @@ Perform a comprehensive test architecture review with quality gate decision. Thi
634
634
 
635
635
  ```yaml
636
636
  required:
637
- - story_id: '{epic}.{story}' # e.g., "1.3"
638
- - story_path: '{devStoryLocation}/{epic}.{story}.*.md' # Path from core-config.yaml
639
- - story_title: '{title}' # If missing, derive from story file H1
640
- - story_slug: '{slug}' # If missing, derive from title (lowercase, hyphenated)
637
+ - story_id: "{epic}.{story}" # e.g., "1.3"
638
+ - story_path: "{devStoryLocation}/{epic}.{story}.*.md" # Path from core-config.yaml
639
+ - story_title: "{title}" # If missing, derive from story file H1
640
+ - story_slug: "{slug}" # If missing, derive from title (lowercase, hyphenated)
641
641
  ```
642
642
 
643
643
  ## Prerequisites
@@ -819,19 +819,19 @@ Gate file structure:
819
819
 
820
820
  ```yaml
821
821
  schema: 1
822
- story: '{epic}.{story}'
823
- story_title: '{story title}'
822
+ story: "{epic}.{story}"
823
+ story_title: "{story title}"
824
824
  gate: PASS|CONCERNS|FAIL|WAIVED
825
- status_reason: '1-2 sentence explanation of gate decision'
826
- reviewer: 'Quinn (Test Architect)'
827
- updated: '{ISO-8601 timestamp}'
825
+ status_reason: "1-2 sentence explanation of gate decision"
826
+ reviewer: "Quinn (Test Architect)"
827
+ updated: "{ISO-8601 timestamp}"
828
828
 
829
829
  top_issues: [] # Empty if no issues
830
830
  waiver: { active: false } # Set active: true only if WAIVED
831
831
 
832
832
  # Extended fields (optional but recommended):
833
833
  quality_score: 0-100 # 100 - (20*FAILs) - (10*CONCERNS) or use technical-preferences.md weights
834
- expires: '{ISO-8601 timestamp}' # Typically 2 weeks from review
834
+ expires: "{ISO-8601 timestamp}" # Typically 2 weeks from review
835
835
 
836
836
  evidence:
837
837
  tests_reviewed: { count }
@@ -843,24 +843,24 @@ evidence:
843
843
  nfr_validation:
844
844
  security:
845
845
  status: PASS|CONCERNS|FAIL
846
- notes: 'Specific findings'
846
+ notes: "Specific findings"
847
847
  performance:
848
848
  status: PASS|CONCERNS|FAIL
849
- notes: 'Specific findings'
849
+ notes: "Specific findings"
850
850
  reliability:
851
851
  status: PASS|CONCERNS|FAIL
852
- notes: 'Specific findings'
852
+ notes: "Specific findings"
853
853
  maintainability:
854
854
  status: PASS|CONCERNS|FAIL
855
- notes: 'Specific findings'
855
+ notes: "Specific findings"
856
856
 
857
857
  recommendations:
858
858
  immediate: # Must fix before production
859
- - action: 'Add rate limiting'
860
- refs: ['api/auth/login.ts']
859
+ - action: "Add rate limiting"
860
+ refs: ["api/auth/login.ts"]
861
861
  future: # Can be addressed later
862
- - action: 'Consider caching'
863
- refs: ['services/data.ts']
862
+ - action: "Consider caching"
863
+ refs: ["services/data.ts"]
864
864
  ```
865
865
 
866
866
  ### Gate Decision Criteria
@@ -953,10 +953,10 @@ Generate a comprehensive risk assessment matrix for a story implementation using
953
953
 
954
954
  ```yaml
955
955
  required:
956
- - story_id: '{epic}.{story}' # e.g., "1.3"
957
- - story_path: 'docs/stories/{epic}.{story}.*.md'
958
- - story_title: '{title}' # If missing, derive from story file H1
959
- - story_slug: '{slug}' # If missing, derive from title (lowercase, hyphenated)
956
+ - story_id: "{epic}.{story}" # e.g., "1.3"
957
+ - story_path: "docs/stories/{epic}.{story}.*.md"
958
+ - story_title: "{title}" # If missing, derive from story file H1
959
+ - story_slug: "{slug}" # If missing, derive from title (lowercase, hyphenated)
960
960
  ```
961
961
 
962
962
  ## Purpose
@@ -1026,14 +1026,14 @@ For each category, identify specific risks:
1026
1026
 
1027
1027
  ```yaml
1028
1028
  risk:
1029
- id: 'SEC-001' # Use prefixes: SEC, PERF, DATA, BUS, OPS, TECH
1029
+ id: "SEC-001" # Use prefixes: SEC, PERF, DATA, BUS, OPS, TECH
1030
1030
  category: security
1031
- title: 'Insufficient input validation on user forms'
1032
- description: 'Form inputs not properly sanitized could lead to XSS attacks'
1031
+ title: "Insufficient input validation on user forms"
1032
+ description: "Form inputs not properly sanitized could lead to XSS attacks"
1033
1033
  affected_components:
1034
- - 'UserRegistrationForm'
1035
- - 'ProfileUpdateForm'
1036
- detection_method: 'Code review revealed missing validation'
1034
+ - "UserRegistrationForm"
1035
+ - "ProfileUpdateForm"
1036
+ detection_method: "Code review revealed missing validation"
1037
1037
  ```
1038
1038
 
1039
1039
  ### 2. Risk Assessment
@@ -1080,20 +1080,20 @@ For each identified risk, provide mitigation:
1080
1080
 
1081
1081
  ```yaml
1082
1082
  mitigation:
1083
- risk_id: 'SEC-001'
1084
- strategy: 'preventive' # preventive|detective|corrective
1083
+ risk_id: "SEC-001"
1084
+ strategy: "preventive" # preventive|detective|corrective
1085
1085
  actions:
1086
- - 'Implement input validation library (e.g., validator.js)'
1087
- - 'Add CSP headers to prevent XSS execution'
1088
- - 'Sanitize all user inputs before storage'
1089
- - 'Escape all outputs in templates'
1086
+ - "Implement input validation library (e.g., validator.js)"
1087
+ - "Add CSP headers to prevent XSS execution"
1088
+ - "Sanitize all user inputs before storage"
1089
+ - "Escape all outputs in templates"
1090
1090
  testing_requirements:
1091
- - 'Security testing with OWASP ZAP'
1092
- - 'Manual penetration testing of forms'
1093
- - 'Unit tests for validation functions'
1094
- residual_risk: 'Low - Some zero-day vulnerabilities may remain'
1095
- owner: 'dev'
1096
- timeline: 'Before deployment'
1091
+ - "Security testing with OWASP ZAP"
1092
+ - "Manual penetration testing of forms"
1093
+ - "Unit tests for validation functions"
1094
+ residual_risk: "Low - Some zero-day vulnerabilities may remain"
1095
+ owner: "dev"
1096
+ timeline: "Before deployment"
1097
1097
  ```
1098
1098
 
1099
1099
  ## Outputs
@@ -1119,12 +1119,12 @@ risk_summary:
1119
1119
  highest:
1120
1120
  id: SEC-001
1121
1121
  score: 9
1122
- title: 'XSS on profile form'
1122
+ title: "XSS on profile form"
1123
1123
  recommendations:
1124
1124
  must_fix:
1125
- - 'Add input sanitization & CSP'
1125
+ - "Add input sanitization & CSP"
1126
1126
  monitor:
1127
- - 'Add security alerts for auth endpoints'
1127
+ - "Add security alerts for auth endpoints"
1128
1128
  ```
1129
1129
 
1130
1130
  ### Output 2: Markdown Report
@@ -1311,10 +1311,10 @@ Create comprehensive test scenarios with appropriate test level recommendations
1311
1311
 
1312
1312
  ```yaml
1313
1313
  required:
1314
- - story_id: '{epic}.{story}' # e.g., "1.3"
1315
- - story_path: '{devStoryLocation}/{epic}.{story}.*.md' # Path from core-config.yaml
1316
- - story_title: '{title}' # If missing, derive from story file H1
1317
- - story_slug: '{slug}' # If missing, derive from title (lowercase, hyphenated)
1314
+ - story_id: "{epic}.{story}" # e.g., "1.3"
1315
+ - story_path: "{devStoryLocation}/{epic}.{story}.*.md" # Path from core-config.yaml
1316
+ - story_title: "{title}" # If missing, derive from story file H1
1317
+ - story_slug: "{slug}" # If missing, derive from title (lowercase, hyphenated)
1318
1318
  ```
1319
1319
 
1320
1320
  ## Purpose
@@ -1367,13 +1367,13 @@ For each identified test need, create:
1367
1367
 
1368
1368
  ```yaml
1369
1369
  test_scenario:
1370
- id: '{epic}.{story}-{LEVEL}-{SEQ}'
1371
- requirement: 'AC reference'
1370
+ id: "{epic}.{story}-{LEVEL}-{SEQ}"
1371
+ requirement: "AC reference"
1372
1372
  priority: P0|P1|P2|P3
1373
1373
  level: unit|integration|e2e
1374
- description: 'What is being tested'
1375
- justification: 'Why this level was chosen'
1376
- mitigates_risks: ['RISK-001'] # If risk profile exists
1374
+ description: "What is being tested"
1375
+ justification: "Why this level was chosen"
1376
+ mitigates_risks: ["RISK-001"] # If risk profile exists
1377
1377
  ```
1378
1378
 
1379
1379
  ### 5. Validate Coverage
@@ -1515,21 +1515,21 @@ Identify all testable requirements from:
1515
1515
  For each requirement, document which tests validate it. Use Given-When-Then to describe what the test validates (not how it's written):
1516
1516
 
1517
1517
  ```yaml
1518
- requirement: 'AC1: User can login with valid credentials'
1518
+ requirement: "AC1: User can login with valid credentials"
1519
1519
  test_mappings:
1520
- - test_file: 'auth/login.test.ts'
1521
- test_case: 'should successfully login with valid email and password'
1520
+ - test_file: "auth/login.test.ts"
1521
+ test_case: "should successfully login with valid email and password"
1522
1522
  # Given-When-Then describes WHAT the test validates, not HOW it's coded
1523
- given: 'A registered user with valid credentials'
1524
- when: 'They submit the login form'
1525
- then: 'They are redirected to dashboard and session is created'
1523
+ given: "A registered user with valid credentials"
1524
+ when: "They submit the login form"
1525
+ then: "They are redirected to dashboard and session is created"
1526
1526
  coverage: full
1527
1527
 
1528
- - test_file: 'e2e/auth-flow.test.ts'
1529
- test_case: 'complete login flow'
1530
- given: 'User on login page'
1531
- when: 'Entering valid credentials and submitting'
1532
- then: 'Dashboard loads with user data'
1528
+ - test_file: "e2e/auth-flow.test.ts"
1529
+ test_case: "complete login flow"
1530
+ given: "User on login page"
1531
+ when: "Entering valid credentials and submitting"
1532
+ then: "Dashboard loads with user data"
1533
1533
  coverage: integration
1534
1534
  ```
1535
1535
 
@@ -1551,19 +1551,19 @@ Document any gaps found:
1551
1551
 
1552
1552
  ```yaml
1553
1553
  coverage_gaps:
1554
- - requirement: 'AC3: Password reset email sent within 60 seconds'
1555
- gap: 'No test for email delivery timing'
1554
+ - requirement: "AC3: Password reset email sent within 60 seconds"
1555
+ gap: "No test for email delivery timing"
1556
1556
  severity: medium
1557
1557
  suggested_test:
1558
1558
  type: integration
1559
- description: 'Test email service SLA compliance'
1559
+ description: "Test email service SLA compliance"
1560
1560
 
1561
- - requirement: 'AC5: Support 1000 concurrent users'
1562
- gap: 'No load testing implemented'
1561
+ - requirement: "AC5: Support 1000 concurrent users"
1562
+ gap: "No load testing implemented"
1563
1563
  severity: high
1564
1564
  suggested_test:
1565
1565
  type: performance
1566
- description: 'Load test with 1000 concurrent connections'
1566
+ description: "Load test with 1000 concurrent connections"
1567
1567
  ```
1568
1568
 
1569
1569
  ## Outputs
@@ -1579,11 +1579,11 @@ trace:
1579
1579
  full: Y
1580
1580
  partial: Z
1581
1581
  none: W
1582
- planning_ref: 'qa.qaLocation/assessments/{epic}.{story}-test-design-{YYYYMMDD}.md'
1582
+ planning_ref: "qa.qaLocation/assessments/{epic}.{story}-test-design-{YYYYMMDD}.md"
1583
1583
  uncovered:
1584
- - ac: 'AC3'
1585
- reason: 'No test found for password reset timing'
1586
- notes: 'See qa.qaLocation/assessments/{epic}.{story}-trace-{YYYYMMDD}.md'
1584
+ - ac: "AC3"
1585
+ reason: "No test found for password reset timing"
1586
+ notes: "See qa.qaLocation/assessments/{epic}.{story}-trace-{YYYYMMDD}.md"
1587
1587
  ```
1588
1588
 
1589
1589
  ### Output 2: Traceability Report
@@ -332,12 +332,12 @@ ALWAYS cite source documents: `[Source: architecture/{filename}.md#{section}]`
332
332
  #### 2.1 基础信息填写
333
333
 
334
334
  ```yaml
335
- epic_num: '{{epic_number}}'
336
- story_num: '{{story_number}}'
337
- story_title_short: '{{story_title}}'
338
- role: '{{user_role}}'
339
- action: '{{user_action}}'
340
- benefit: '{{user_benefit}}'
335
+ epic_num: "{{epic_number}}"
336
+ story_num: "{{story_number}}"
337
+ story_title_short: "{{story_title}}"
338
+ role: "{{user_role}}"
339
+ action: "{{user_action}}"
340
+ benefit: "{{user_benefit}}"
341
341
  ```
342
342
 
343
343
  #### 2.2 数据库设计部分填写
@@ -623,7 +623,12 @@ sections:
623
623
  rows:
624
624
  - ["移动端", "{{mobile_min}}", "{{mobile_max}}", "{{mobile_devices}}"]
625
625
  - ["平板", "{{tablet_min}}", "{{tablet_max}}", "{{tablet_devices}}"]
626
- - ["桌面端", "{{desktop_min}}", "{{desktop_max}}", "{{desktop_devices}}"]
626
+ - [
627
+ "桌面端",
628
+ "{{desktop_min}}",
629
+ "{{desktop_max}}",
630
+ "{{desktop_devices}}",
631
+ ]
627
632
  - ["宽屏", "{{wide_min}}", "-", "{{wide_devices}}"]
628
633
  - id: adaptation-patterns
629
634
  title: 适配模式