dwf-platform-cli 0.2.0__tar.gz → 0.3.0__tar.gz

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 (161) hide show
  1. dwf_platform_cli-0.3.0/.claude/settings.local.json +67 -0
  2. dwf_platform_cli-0.3.0/.mcp.json +8 -0
  3. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/PKG-INFO +1 -1
  4. dwf_platform_cli-0.3.0/app_ext.json +10 -0
  5. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/commands/funcmodel.md +110 -46
  6. dwf_platform_cli-0.3.0/gs.txt +324 -0
  7. dwf_platform_cli-0.3.0/kq.png +0 -0
  8. dwf_platform_cli-0.3.0/mb.png +0 -0
  9. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/pyproject.toml +1 -1
  10. dwf_platform_cli-0.3.0/scripts/build_widget_schema.py +98 -0
  11. dwf_platform_cli-0.3.0/scripts/build_widget_schema_from_vue.py +299 -0
  12. dwf_platform_cli-0.3.0/scripts/scrape_widget_docs.py +143 -0
  13. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/api/funcmodel.py +23 -0
  14. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/__init__.py +1 -1
  15. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/funcmodel.py +695 -78
  16. dwf_platform_cli-0.3.0/src/dwf_cli/mcp/server.py +2374 -0
  17. dwf_platform_cli-0.3.0/src/dwf_cli/mcp/widget_defaults.json +717 -0
  18. dwf_platform_cli-0.3.0/src/dwf_cli/mcp/widget_schema.json +13820 -0
  19. dwf_platform_cli-0.3.0/src/dwf_cli/oprCol.json +436 -0
  20. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/funcmodel/app_update.schema.json +3 -3
  21. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/funcmodel/operations_create.schema.json +6 -6
  22. dwf_platform_cli-0.3.0/tem_create_opr.json +18 -0
  23. dwf_platform_cli-0.3.0/tem_form.json +1264 -0
  24. dwf_platform_cli-0.3.0/tem_form_basic.json +1042 -0
  25. dwf_platform_cli-0.3.0/template_app.html +1046 -0
  26. dwf_platform_cli-0.2.0/.claude/settings.local.json +0 -19
  27. dwf_platform_cli-0.2.0/src/dwf_cli/mcp/server.py +0 -411
  28. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/.gitignore +0 -0
  29. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/.python-version +0 -0
  30. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/CLAUDE.md +0 -0
  31. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/Enrollment.xlsx +0 -0
  32. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/Jenkinsfile +0 -0
  33. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/LICENSE +0 -0
  34. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/README.md +0 -0
  35. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api/API/351/205/215/347/275/256.md" +0 -0
  36. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api/Actuator.md +0 -0
  37. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api/IoTDB.md +0 -0
  38. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api/Omf/344/272/213/344/273/266/350/256/242/351/230/205.md" +0 -0
  39. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api/SchemaN/346/225/260/346/215/256/346/234/215/345/212/241.md" +0 -0
  40. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api/WebSocket.md +0 -0
  41. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api/WebSocketViewConnect.md +0 -0
  42. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api/index.md +0 -0
  43. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//344/273/216Excel/345/210/233/345/273/272/345/256/236/344/275/223/347/261/273.md" +0 -0
  44. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/215/225/347/202/271/347/231/273/345/275/225/351/205/215/347/275/256.md" +0 -0
  45. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/217/257/350/247/206/345/214/226/345/210/206/347/261/273/346/216/245/345/217/243.md" +0 -0
  46. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/217/257/350/247/206/345/214/226/345/234/260/345/233/276/351/205/215/347/275/256/346/216/245/345/217/243.md" +0 -0
  47. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/217/257/350/247/206/345/214/226/346/225/260/346/215/256/346/216/245/345/217/243.md" +0 -0
  48. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/217/257/350/247/206/345/214/226/346/225/260/346/215/256/346/272/220/351/205/215/347/275/256/346/216/245/345/217/243.md" +0 -0
  49. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/244/226/351/203/250/345/256/236/344/275/223/347/261/273/350/247/206/345/233/276.md" +0 -0
  50. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/256/232/346/227/266/344/273/273/345/212/241.md" +0 -0
  51. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/257/271/350/261/241-/345/205/263/350/201/224/345/257/271/350/261/241.md" +0 -0
  52. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/257/271/350/261/241-/345/256/236/344/275/223/345/257/271/350/261/241.md" +0 -0
  53. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/257/271/350/261/241-/345/256/236/344/275/223/347/261/273_/345/205/263/350/201/224/347/261/273/345/257/271/350/261/241/351/200/232/347/224/250/346/216/245/345/217/243.md" +0 -0
  54. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/257/271/350/261/241-/350/216/267/345/217/226/345/257/271/350/261/241/347/232/204/345/215/225/344/270/252/345/261/236/346/200/247/345/200/274.md" +0 -0
  55. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/257/271/350/261/241/347/272/247/345/210/253/346/216/210/346/235/203.md" +0 -0
  56. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/257/274/345/205/245/346/225/260/346/215/256.md" +0 -0
  57. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/257/274/345/207/272/346/225/260/346/215/256.md" +0 -0
  58. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/260/217/345/233/276/346/240/207.md" +0 -0
  59. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/261/236/346/200/247/345/205/203/344/277/241/346/201/257.md" +0 -0
  60. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//345/272/224/347/224/250/345/256/236/344/276/213.md" +0 -0
  61. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/200/247/350/203/275/346/216/242/346/265/213.md" +0 -0
  62. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/216/210/346/235/203/345/210/244/346/226/255.md" +0 -0
  63. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/216/210/346/235/203/346/235/241/344/273/266.md" +0 -0
  64. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/216/210/346/235/203/347/273/204.md" +0 -0
  65. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/216/210/346/235/203/350/247/204/345/210/231.md" +0 -0
  66. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/216/210/346/235/203/351/241/271.md" +0 -0
  67. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/223/215/344/275/234/346/211/247/350/241/214.md" +0 -0
  68. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/225/260/346/215/256/345/255/227/345/205/270.md" +0 -0
  69. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/225/260/346/215/256/346/272/220/344/270/216/346/225/260/346/215/256/350/277/236/346/216/245.md" +0 -0
  70. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/225/260/346/215/256/346/272/220/345/205/203/344/277/241/346/201/257.md" +0 -0
  71. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/226/207/344/273/266_/345/244/232/346/226/207/344/273/266_/351/235/231/346/200/201/350/265/204/346/272/220/346/226/207/344/273/266.md" +0 -0
  72. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/226/207/344/273/266/350/265/204/346/226/231/345/272/223.md" +0 -0
  73. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/237/245/350/257/242/347/273/223/346/236/234/350/256/242/351/230/205.md" +0 -0
  74. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/250/241/345/236/213-/345/205/263/350/201/224/347/261/273/345/205/203/344/277/241/346/201/257.md" +0 -0
  75. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/250/241/345/236/213-/345/256/236/344/275/223/347/261/273_/345/205/263/350/201/224/347/261/273_/346/250/241/345/235/227/347/261/273/351/200/232/347/224/250/346/216/245/345/217/243.md" +0 -0
  76. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/250/241/345/236/213-/345/256/236/344/275/223/347/261/273/345/205/203/344/277/241/346/201/257.md" +0 -0
  77. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/250/241/345/236/213-/346/250/241/345/235/227/347/261/273/345/205/203/344/277/241/346/201/257.md" +0 -0
  78. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//346/250/241/345/236/213/345/214/205/347/256/241/347/220/206.md" +0 -0
  79. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//347/211/210/346/234/254/344/277/241/346/201/257/347/256/241/347/220/206.md" +0 -0
  80. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//347/247/237/346/210/267/347/256/241/347/220/206.md" +0 -0
  81. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//347/261/273/344/272/213/344/273/266/350/204/232/346/234/254.md" +0 -0
  82. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//347/263/273/347/273/237/346/223/215/344/275/234/344/270/216/345/277/253/351/200/237/346/237/245/350/257/242/346/223/215/344/275/234.md" +0 -0
  83. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//347/263/273/347/273/237/346/227/245/345/277/227.md" +0 -0
  84. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//347/263/273/347/273/237/346/266/210/346/201/257.md" +0 -0
  85. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//347/273/204/344/273/266/346/250/241/345/236/213/345/205/203/344/277/241/346/201/257.md" +0 -0
  86. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//347/273/204/347/273/207/346/250/241/345/236/213.md" +0 -0
  87. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//347/273/274/345/220/210/344/277/241/346/201/257/346/250/241/345/236/213.md" +0 -0
  88. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//350/204/232/346/234/254/346/250/241/346/235/277/346/250/241/345/236/213.md" +0 -0
  89. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//350/207/252/345/256/232/344/271/211SQL.md" +0 -0
  90. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//350/241/250/345/215/225/346/216/247/344/273/266/346/250/241/345/236/213.md" +0 -0
  91. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//350/247/206/345/233/276_/346/223/215/344/275/234/347/211/210/346/234/254/344/277/241/346/201/257.md" +0 -0
  92. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//350/247/206/345/233/276/346/250/241/345/236/213/345/205/203/344/277/241/346/201/257.md" +0 -0
  93. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//350/247/206/345/233/276/346/250/241/346/235/277/346/250/241/345/236/213.md" +0 -0
  94. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//350/266/205/347/272/247/346/216/247/344/273/266.md" +0 -0
  95. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//350/272/253/344/273/275/351/252/214/350/257/201.md" +0 -0
  96. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//351/205/215/347/275/256/344/277/241/346/201/257.md" +0 -0
  97. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api//351/246/226/351/241/265/347/234/213/346/235/277/346/216/245/345/217/243.md" +0 -0
  98. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/commands/auth.md +0 -0
  99. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/commands/config.md +0 -0
  100. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/commands/datamodel.md +0 -0
  101. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/commands/formmodel.md +0 -0
  102. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/index.md +0 -0
  103. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/installation.md +0 -0
  104. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/quickstart.md +0 -0
  105. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/special.md +0 -0
  106. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/hooks/nav.py +0 -0
  107. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/knowledge/CHECKLIST.md +0 -0
  108. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/knowledge/GUIDE.md +0 -0
  109. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/knowledge/TODO.md +0 -0
  110. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/main.py +0 -0
  111. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/mkdocs.yml +0 -0
  112. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/schema_output.json +0 -0
  113. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/__init__.py +0 -0
  114. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/__main__.py +0 -0
  115. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/api/__init__.py +0 -0
  116. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/api/auth.py +0 -0
  117. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/api/client.py +0 -0
  118. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/api/datamodel.py +0 -0
  119. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/api/formmodel.py +0 -0
  120. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/_common.py +0 -0
  121. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/auth.py +0 -0
  122. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/config.py +0 -0
  123. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/datamodel.py +0 -0
  124. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/formmodel.py +0 -0
  125. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/schema.py +0 -0
  126. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/core/__init__.py +0 -0
  127. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/core/config.py +0 -0
  128. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/core/crypto.py +0 -0
  129. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/core/errors.py +0 -0
  130. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/core/output.py +0 -0
  131. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/core/validator.py +0 -0
  132. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/mcp/__init__.py +0 -0
  133. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/__init__.py +0 -0
  134. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/attribute_bind.schema.json +0 -0
  135. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/attribute_create.schema.json +0 -0
  136. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/attribute_update.schema.json +0 -0
  137. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/create.schema.json +0 -0
  138. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/excel_confirm.schema.json +0 -0
  139. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/external_create.schema.json +0 -0
  140. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/external_update.schema.json +0 -0
  141. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/object_create.schema.json +0 -0
  142. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/object_update.schema.json +0 -0
  143. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/relation_create.schema.json +0 -0
  144. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/relation_update.schema.json +0 -0
  145. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/update.schema.json +0 -0
  146. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/funcmodel/app_create.schema.json +0 -0
  147. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/funcmodel/language-package_create.schema.json +0 -0
  148. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/funcmodel/operations_update.schema.json +0 -0
  149. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/__init__.py +0 -0
  150. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_api/__init__.py +0 -0
  151. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_api/test_client.py +0 -0
  152. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_api/test_crypto.py +0 -0
  153. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_api/test_datamodel.py +0 -0
  154. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_cli/__init__.py +0 -0
  155. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_cli/test_config.py +0 -0
  156. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_cli/test_datamodel_cli.py +0 -0
  157. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_cli/test_funcmodel_formmodel.py +0 -0
  158. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_cli/test_main.py +0 -0
  159. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_cli/test_schema_cli.py +0 -0
  160. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_core/__init__.py +0 -0
  161. {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_core/test_validator.py +0 -0
@@ -0,0 +1,67 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(uv run:*)",
5
+ "WebFetch(domain:172.21.11.113)",
6
+ "Bash(curl -s \"http://172.21.11.113:6060/v3/api-docs\")",
7
+ "Bash(curl -s \"http://172.21.11.113:6060/swagger-ui/index.html\")",
8
+ "Bash(curl -s -H \"Authorization: eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJDMDAzRDYzQTM3NUQyMDQ1ODgxRTIxNzVGOTk1QURFOCIsImV4cCI6MTc4MDAyMTIwMn0.zt324-FvCyOiNcUGoVuYDTdB2Hul3a5_KRwhb5VBZygPqcdPU3cP-OlthZabX990d1oI5OmrOkDP44ttfQXX2g\" \"http://172.21.11.113:6060/v3/api-docs\")",
9
+ "Bash(python3 -c ':*)",
10
+ "Bash(curl -s -H \"Authorization: eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIyQTE0QzVCRDJERUQ0RDQ0ODZDNzY3NjE0ODhDRUZGMSIsImV4cCI6MTc4MDE5MzczM30.EDaB5U_5uZ115nFymngzDxpa5MqOFHMIq5lWNQGrOCUWo5VCJnSyRlL0hyGR-q442a_Cylt6Qg5omrdzbY-nbQ\" \"http://172.21.11.113:6060/v3/api-docs\")",
11
+ "Bash(dwf-cli --help)",
12
+ "mcp__context7__resolve-library-id",
13
+ "mcp__context7__query-docs",
14
+ "Bash(uv sync:*)",
15
+ "Bash(uv build:*)",
16
+ "Bash(uv publish:*)",
17
+ "mcp__dwf__dwf_auth_status",
18
+ "mcp__dwf__dwf_formmodel_view_list",
19
+ "mcp__dwf__dwf_datamodel_list",
20
+ "mcp__dwf__dwf_datamodel_create",
21
+ "mcp__dwf__dwf_datamodel_show",
22
+ "mcp__dwf__dwf_object_create",
23
+ "mcp__dwf__dwf_attribute_create",
24
+ "mcp__dwf__dwf_relation_create",
25
+ "mcp__dwf__dwf_formmodel_view_create",
26
+ "mcp__dwf__dwf_operation_create",
27
+ "mcp__dwf__dwf_module_list",
28
+ "mcp__dwf__dwf_app_create",
29
+ "mcp__dwf__dwf_app_publish",
30
+ "mcp__dwf__dwf_operation_get",
31
+ "mcp__dwf__dwf_operation_update",
32
+ "mcp__dwf__dwf_operation_delete",
33
+ "mcp__dwf__dwf_module_operations_tree",
34
+ "Bash(curl -s 'http://172.21.11.113:9090/app-web/docs/module-Attachments.html')",
35
+ "Bash(curl -s 'http://172.21.11.113:9090/app-web/docs/index.html')",
36
+ "Bash(curl -s 'http://172.21.11.113:9090/app-web/docs/module-TextInput.html')",
37
+ "Bash(curl -s 'http://172.21.11.113:9090/app-web/docs/module-Grid.html')",
38
+ "mcp__dwf__dwf_app_get",
39
+ "mcp__dwf__dwf_view_template",
40
+ "mcp__dwf__dwf_widget_schema",
41
+ "mcp__dwf__dwf_formmodel_view_update",
42
+ "mcp__dwf__dwf_funcmodel_app_list",
43
+ "mcp__dwf__dwf_attribute_list",
44
+ "mcp__dwf__dwf_attribute_get",
45
+ "Bash(python:*)",
46
+ "mcp__dwf__dwf_attribute_bind",
47
+ "mcp__dwf__dwf_funcmodel_operation_list",
48
+ "mcp__dwf__dwf_app_scaffold",
49
+ "mcp__dwf__dwf_app_delete",
50
+ "mcp__dwf__dwf_config_list",
51
+ "Bash(python3:*)",
52
+ "Bash(pip show:*)",
53
+ "mcp__dwf__dwf_app_scaffold_plan",
54
+ "Bash(cd *)",
55
+ "Bash(.venv/bin/python -)",
56
+ "mcp__dwf__dwf_object_count",
57
+ "Bash(.venv/bin/python -c \"import json;d=json.load\\(open\\('src/dwf_cli/mcp/widget_defaults.json'\\)\\);print\\({w:\\(w in d\\) for w in ['TextInput','NumberInput','DateInput','Switch','Attachments','TimeSeriesSelect']}\\)\")",
58
+ "Bash(.venv/bin/python -c \"import ast; ast.parse\\(open\\('src/dwf_cli/mcp/server.py'\\).read\\(\\)\\); print\\('syntax OK'\\)\")",
59
+ "Bash(pip index *)",
60
+ "Bash(curl -s https://pypi.org/pypi/dwf-platform-cli/json)",
61
+ "Bash(uv --version)"
62
+ ]
63
+ },
64
+ "enabledMcpjsonServers": [
65
+ "dwf"
66
+ ]
67
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "dwf": {
4
+ "command": "uv",
5
+ "args": ["--directory", "/Users/siyu/Desktop/dwf-cli", "run", "dwf-platform-mcp"]
6
+ }
7
+ }
8
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dwf-platform-cli
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: DWF platform CLI and MCP server for AI agents and developers
5
5
  Project-URL: Repository, https://gitee.com/tsinghua-nercbds/dwf-cli
6
6
  Project-URL: Documentation, https://gitee.com/tsinghua-nercbds/dwf-cli#readme
@@ -0,0 +1,10 @@
1
+ {
2
+ "appName": "PCtesss3Wd",
3
+ "title": "tesss",
4
+ "startPageURL": "login",
5
+ "note": "",
6
+ "languagePackageList": [],
7
+ "defaultLanguage": null,
8
+ "extConfig": "{\"indexPageUrl\":\"home\",\"indexPageOpr\":\"\",\"bgOrigin\":\"imgSelf\",\"selfLoginBg\":\"\",\"titleColor\":\"#757171\",\"titleFSize\":16,\"titleBold\":true,\"infoColor\":\"#646566\",\"infoFSize\":14,\"infoBold\":false,\"loginColor\":\"#fff\",\"loginFSize\":14,\"loginBold\":false,\"loginText\":\"登录\",\"loginBgColor\":\"#1989fa\",\"logoImg\":\"/modeler-web/static/jpg/dLogo-5f5b104c.jpg\",\"skinStyle\":\"light\",\"flexDeriction\":\"左右任务栏布局\",\"icoImg\":\"/modeler-web/static/jpg/dLogo-5f5b104c.jpg\",\"cssName\":\"\",\"extendCss\":\"\",\"extendJs\":\"\",\"language\":\"\",\"languageList\":[],\"showTabs\":\"show\",\"indexOprType\":\"menu\",\"editQuickForm\":{\"goal\":\"\",\"viewName\":\"\",\"action\":\"create\",\"beforeParams\":\"\"}}",
9
+ "type": "PC"
10
+ }
@@ -195,18 +195,20 @@ dwf-cli funcmodel app get-css 123 --output ./custom.css
195
195
 
196
196
  ### app create
197
197
 
198
- 创建应用实例。支持两种方式:使用 `--data`/`--data-file` 传入完整 JSON,或使用 `--title`/`--type`/`--app-name` 独立参数。
198
+ 创建应用实例。支持两种方式:使用 `--data`/`--data-file` 传入完整 JSON,或使用 `--title`/`--type`/`--app-name` 等结构化参数。
199
199
 
200
200
  ```bash
201
- # 方式一:完整 JSON(推荐,支持全部字段)
202
- dwf-cli funcmodel app create --data '{"appName":"MyApp","type":"PC","title":"我的应用"}'
203
- dwf-cli funcmodel app create --data-file ./app.json
204
-
205
- # 方式二:独立参数(PC 类型自动生成 appName)
206
- dwf-cli funcmodel app create --title '我的应用' --type PC
201
+ # 方式一:结构化参数(PC 类型自动生成 appName)
202
+ dwf-cli funcmodel app create --title '我的应用'
207
203
 
208
- # 方式三:独立参数,指定 appName
204
+ # 方式二:结构化参数,指定更多字段
209
205
  dwf-cli funcmodel app create --title '设备管理' --type Mobile --app-name DeviceApp
206
+ dwf-cli funcmodel app create --title '我的应用' --note '描述信息' --default-language zh_CN
207
+ dwf-cli funcmodel app create --title '我的应用' --logo-img ./logo.png --ico-img ./icon.png
208
+
209
+ # 方式三:完整 JSON
210
+ dwf-cli funcmodel app create --data '{"appName":"MyApp","type":"PC","title":"我的应用"}'
211
+ dwf-cli funcmodel app create --data-file ./app.json
210
212
 
211
213
  # 预览创建操作
212
214
  dwf-cli funcmodel app create --data '{"appName":"MyApp","type":"PC"}' --dry-run
@@ -214,13 +216,20 @@ dwf-cli funcmodel app create --data '{"appName":"MyApp","type":"PC"}' --dry-run
214
216
 
215
217
  | 参数 | 默认值 | 说明 |
216
218
  |------|--------|------|
217
- | `--data`, `-d` | `<required-if-no-data-file>` | 应用元数据 JSON 字符串(`--data-file` 未提供时必填) |
218
- | `--data-file` | `<required-if-no-data>` | JSON 文件路径,替代 `--data` |
219
- | `--title`, `-t` | | 应用中文标题(独立参数模式必填) |
220
- | `--type` | `PC` | 应用类型 `<enum: PC|Mobile>`(Mobile 时必须指定 `--app-name`) |
221
- | `--app-name`, `-n` | 无 | 应用英文名(PC 类型自动生成,Mobile 类型必填) |
219
+ | `--title`, `-t` | `<required>` | 应用中文标题 |
220
+ | `--type` | `PC` | 应用类型 `<enum: PC\|Mobile>`(Mobile 时必须指定 `--app-name`) |
221
+ | `--app-name`, `-n` | 自动生成 | 应用英文名(PC 类型自动生成,Mobile 类型必填) |
222
+ | `--start-page-url` | `login` | 登录页路由 |
223
+ | `--note` | 无 | 应用描述 |
224
+ | `--default-language` | 无 | 默认语言代码(如 `zh_CN`) |
225
+ | `--logo-img` | 无 | Logo 图片文件路径(自动转 Base64) |
226
+ | `--ico-img` | 无 | Icon 图片文件路径(自动转 Base64) |
227
+ | `--ext-config` | 无 | Ext config JSON 字符串 |
228
+ | `--ext-config-file` | 无 | Ext config JSON 文件路径 |
229
+ | `--data`, `-d` | 无 | 完整应用数据 JSON 字符串(与结构化参数可混用,后者覆盖前者同名字段) |
230
+ | `--data-file` | 无 | JSON 文件路径(替代 `--data`) |
222
231
  | `--dry-run` | `false` | 预览但不执行(退出码 10) |
223
- | `--format`, `-f` | `table` | 输出格式 `<enum: table|json>` |
232
+ | `--format`, `-f` | `table` | 输出格式 `<enum: table\|json>` |
224
233
 
225
234
  **data / data-file JSON 字段说明:**
226
235
 
@@ -228,7 +237,7 @@ dwf-cli funcmodel app create --data '{"appName":"MyApp","type":"PC"}' --dry-run
228
237
  |------|------|------|------|
229
238
  | `appName` | `string` | 是 | 应用英文名,会出现在 URL 中 |
230
239
  | `title` | `string` | 否 | Tab 标签标题 |
231
- | `type` | `string` | 是 | `<enum: PC|Mobile>` |
240
+ | `type` | `string` | 是 | `<enum: PC\|Mobile>` |
232
241
  | `startPageURL` | `string` | 否 | 起始页 URL |
233
242
  | `note` | `string` | 否 | 备注 |
234
243
  | `extConfig` | `string`/`object` | 否 | 扩展配置(支持 JSON 对象自动序列化,`logoImg`/`icoImg` 字段支持本地图片路径自动转 Base64) |
@@ -241,28 +250,32 @@ dwf-cli funcmodel app create --data '{"appName":"MyApp","type":"PC"}' --dry-run
241
250
 
242
251
  ### app update
243
252
 
244
- 更新应用实例信息。支持 `--data`/`--data-file` 完整更新,或 `--title`/`--app-name` 部分更新。
253
+ 更新应用实例。先查询当前数据,再用选项参数覆盖指定字段后全量更新。
245
254
 
246
255
  ```bash
247
- # 方式一:完整 JSON 更新
248
- dwf-cli funcmodel app update --data '{"id":"123","title":"新标题","note":"备注信息"}'
249
- dwf-cli funcmodel app update --data-file ./patch.json
256
+ # 更新标题
257
+ dwf-cli funcmodel app update <APP_ID> --title '新名称'
250
258
 
251
- # 方式二:部分字段更新
252
- dwf-cli funcmodel app update --title '新名称' --app-name NewAppName
259
+ # 更新 Logo
260
+ dwf-cli funcmodel app update <APP_ID> --logo-img ./new-logo.png
253
261
 
254
262
  # 预览更新
255
- dwf-cli funcmodel app update --data '{"id":"123","title":"新标题"}' --dry-run
263
+ dwf-cli funcmodel app update <APP_ID> --title '新名称' --dry-run
256
264
  ```
257
265
 
258
266
  | 参数 | 默认值 | 说明 |
259
267
  |------|--------|------|
260
- | `--data`, `-d` | `<required-if-no-file-no-options>` | 应用元数据 JSON 字符串 |
261
- | `--data-file` | `<required-if-no-data-no-options>` | JSON 文件路径,替代 `--data` |
268
+ | `APP_ID` | `<required>` | 应用 OID(位置参数) |
262
269
  | `--title`, `-t` | 无 | 新应用标题 |
263
- | `--app-name`, `-n` | 无 | 新应用英文名 |
270
+ | `--start-page-url` | 无 | 登录页路由 |
271
+ | `--note` | 无 | 应用描述 |
272
+ | `--default-language` | 无 | 默认语言代码(如 `zh_CN`) |
273
+ | `--logo-img` | 无 | Logo 图片文件路径(自动转 Base64) |
274
+ | `--ico-img` | 无 | Icon 图片文件路径(自动转 Base64) |
275
+ | `--ext-config` | 无 | Ext config JSON 字符串 |
276
+ | `--ext-config-file` | 无 | Ext config JSON 文件路径 |
264
277
  | `--dry-run` | `false` | 预览但不执行(退出码 10) |
265
- | `--format`, `-f` | `table` | 输出格式 `<enum: table|json>` |
278
+ | `--format`, `-f` | `table` | 输出格式 `<enum: table\|json>` |
266
279
 
267
280
  ---
268
281
 
@@ -794,51 +807,102 @@ dwf-cli funcmodel operations get-by-ids --id OID1 --id OID2 --format json
794
807
 
795
808
  ### operations create
796
809
 
797
- 创建操作。通过 `--data` 或 `--data-file` 提供操作 JSON 数据。
810
+ 创建操作。支持结构化参数和完整 JSON 两种方式。
798
811
 
799
812
  ```bash
800
- # 预览
801
- dwf-cli funcmodel operations create --data-file ./operation.json --dry-run
813
+ # 方式一:结构化参数(必填字段)
814
+ dwf-cli funcmodel operations create \
815
+ --display-name '创建用户' --module-name UserModule
802
816
 
803
- # 执行创建
817
+ # 方式二:结构化参数,更多字段
818
+ dwf-cli funcmodel operations create \
819
+ --display-name '创建用户' --module-name UserModule \
820
+ --target-class com.example.model.User --view-name userForm \
821
+ --icon ios-cube-outline --order 10
822
+
823
+ # 方式三:自动生成操作名
824
+ dwf-cli funcmodel operations create \
825
+ --display-name '创建用户' --module-name UserModule --auto-name
826
+
827
+ # 方式四:完整 JSON
804
828
  dwf-cli funcmodel operations create --data-file ./operation.json
805
829
 
806
- # 自动生成操作名
807
- dwf-cli funcmodel operations create --data-file ./operation.json --auto-name
830
+ # 预览
831
+ dwf-cli funcmodel operations create --display-name '创建用户' --module-name UserModule --dry-run
808
832
  ```
809
833
 
810
834
  | 参数 | 默认值 | 说明 |
811
835
  |------|--------|------|
812
- | `--data`, `-d` | `<required-if-no-data-file>` | 操作数据 JSON 字符串 |
813
- | `--data-file` | `<required-if-no-data>` | JSON 文件路径 |
836
+ | `--display-name`, `-n` | `<required>` | 操作显示名称(中文) |
837
+ | `--module-name`, `-m` | `<required>` | 所属模块类英文名(className) |
838
+ | `--action` | `create` | 操作类型 `<enum>` |
839
+ | `--con-type` | `dialog` | 容器类型 `<enum>` |
840
+ | `--target-class` | 无 | 目标类全名(goal) |
841
+ | `--view-oid` | 无 | 表单视图 OID |
842
+ | `--view-name` | 无 | 表单视图名称 |
843
+ | `--view-title` | 无 | 弹窗/视图标题 |
844
+ | `--icon` | 无 | 系统图标名称 |
845
+ | `--order` | 无 | 排序编号 |
846
+ | `--params` | 无 | 参数配置字符串 |
847
+ | `--condition-expre` | 无 | 条件表达式或 URL |
848
+ | `--parent-opr-id` | 无 | 父节点操作 ID |
849
+ | `--is-hidden/--not-hidden` | 无 | 是否在菜单中隐藏 |
850
+ | `--implement-type` | 无 | 实现方式类型 `<enum>` |
851
+ | `--opr-script-file` | 无 | 脚本配置 JSON 文件(不传则用默认结构) |
852
+ | `--ext-settings` | 无 | 扩展设置 JSON 字符串(不传则用默认配置) |
853
+ | `--ext-settings-file` | 无 | 扩展设置 JSON 文件 |
854
+ | `--view-type` | 无 | 弹窗参数 JSON 字符串(不传则用默认配置) |
855
+ | `--view-type-file` | 无 | 弹窗参数 JSON 文件 |
814
856
  | `--auto-name` | `false` | 自动生成操作名 |
857
+ | `--data`, `-d` | 无 | 完整操作数据 JSON 字符串(与结构化参数可混用) |
858
+ | `--data-file` | 无 | JSON 文件路径 |
815
859
  | `--dry-run` | `false` | 预览但不执行(退出码 10) |
816
- | `--format`, `-f` | `table` | 输出格式 `<enum: table|json>` |
860
+ | `--format`, `-f` | `table` | 输出格式 `<enum: table\|json>` |
817
861
 
818
862
  ---
819
863
 
820
864
  ### operations update
821
865
 
822
- 更新操作。通过 `--data` 或 `--data-file` 提供更新后的操作 JSON 数据。
866
+ 更新操作。先查询当前数据,再用选项参数覆盖指定字段后全量更新。
823
867
 
824
868
  ```bash
825
- # 预览
826
- dwf-cli funcmodel operations update --data-file ./operation_update.json --dry-run
869
+ # 更新显示名称
870
+ dwf-cli funcmodel operations update <OPR_OID> --display-name '新名称'
827
871
 
828
- # 执行更新
829
- dwf-cli funcmodel operations update --data-file ./operation_update.json
872
+ # 更新多个字段
873
+ dwf-cli funcmodel operations update <OPR_OID> \
874
+ --display-name '新名称' --order 5 --icon ios-cube-outline
830
875
 
831
- # 强制更新
832
- dwf-cli funcmodel operations update --data-file ./operation_update.json --force
876
+ # 预览更新
877
+ dwf-cli funcmodel operations update <OPR_OID> --display-name '新名称' --dry-run
833
878
  ```
834
879
 
835
880
  | 参数 | 默认值 | 说明 |
836
881
  |------|--------|------|
837
- | `--data`, `-d` | `<required-if-no-data-file>` | 操作数据 JSON 字符串 |
838
- | `--data-file` | `<required-if-no-data>` | JSON 文件路径 |
839
- | `--force` | `false` | 强制更新 |
882
+ | `OPR_OID` | `<required>` | 操作 OID(位置参数) |
883
+ | `--display-name`, `-n` | | 操作显示名称 |
884
+ | `--module-name`, `-m` | | 所属模块类英文名 |
885
+ | `--action` | 无 | 操作类型 `<enum>` |
886
+ | `--con-type` | 无 | 容器类型 `<enum>` |
887
+ | `--target-class` | 无 | 目标类全名 |
888
+ | `--view-oid` | 无 | 表单视图 OID |
889
+ | `--view-name` | 无 | 表单视图名称 |
890
+ | `--view-title` | 无 | 弹窗/视图标题 |
891
+ | `--icon` | 无 | 系统图标名称 |
892
+ | `--order` | 无 | 排序编号 |
893
+ | `--params` | 无 | 参数配置字符串 |
894
+ | `--condition-expre` | 无 | 条件表达式 |
895
+ | `--parent-opr-id` | 无 | 父节点操作 ID |
896
+ | `--is-hidden/--not-hidden` | 无 | 是否隐藏 |
897
+ | `--implement-type` | 无 | 实现方式类型 `<enum>` |
898
+ | `--opr-script-file` | 无 | 脚本配置 JSON 文件 |
899
+ | `--ext-settings` | 无 | 扩展设置 JSON 字符串 |
900
+ | `--ext-settings-file` | 无 | 扩展设置 JSON 文件 |
901
+ | `--view-type` | 无 | 弹窗参数 JSON 字符串 |
902
+ | `--view-type-file` | 无 | 弹窗参数 JSON 文件 |
903
+ | `--force-update` | `true` | 强制覆盖 |
840
904
  | `--dry-run` | `false` | 预览但不执行(退出码 10) |
841
- | `--format`, `-f` | `table` | 输出格式 `<enum: table|json>` |
905
+ | `--format`, `-f` | `table` | 输出格式 `<enum: table\|json>` |
842
906
 
843
907
  ---
844
908
 
@@ -0,0 +1,324 @@
1
+ 这是一个关键的升级——从“用户主动调用工具”到“用户通过自然语言描述意图,系统自动编排完成”。核心变化在于:**MCP/CLI 需要从“命令执行器”升级为“意图理解与任务规划系统”**。
2
+
3
+ ## 一、本质问题分析
4
+
5
+ 聊天搭建的难点:
6
+ 1. **意图歧义**:"做一个员工信息表" → 是数据表格?还是表单录入?还是两者兼具?
7
+ 2. **信息缺失**:用户不会一次性提供所有细节(校验规则、数据源、布局等)
8
+ 3. **上下文依赖**:后续需求依赖之前已创建的组件
9
+ 4. **纠错与迭代**:用户会说"不对,把那个下拉框改成单选按钮"
10
+
11
+ ## 二、核心架构调整:引入"意图-规划-执行"三层
12
+
13
+ ```mermaid
14
+ graph LR
15
+ A[用户聊天] --> B[意图理解层<br/>MCP + LLM]
16
+ B --> C[任务规划层<br/>CLI Planner]
17
+ C --> D[原子执行层<br/>CLI Executor]
18
+ D --> E[反馈生成器<br/>自然语言输出]
19
+ E --> A
20
+ ```
21
+
22
+ ### 关键设计变更
23
+
24
+ | 层级 | 传统设计 | 聊天式设计 |
25
+ |:---|:---|:---|
26
+ | MCP | 提供原子工具 | 额外提供**意图模板**和**上下文查询** |
27
+ | CLI | 执行单条命令 | 增加**规划器**和**对话状态管理** |
28
+ | 输出 | 结构化JSON | **自然语言 + 可操作按钮** |
29
+
30
+ ## 三、MCP 增强设计:意图理解的基础设施
31
+
32
+ ### 1. 新增 Resources:意图模板库
33
+
34
+ ```javascript
35
+ // mcp.resource("intent://form/create")
36
+ {
37
+ "intent": "创建表单",
38
+ "requiredSlots": ["表单名称"],
39
+ "optionalSlots": [
40
+ {"name": "字段列表", "default": ["名称", "提交时间"]},
41
+ {"name": "数据源", "suggestFrom": "business://api/list"},
42
+ {"name": "校验规则", "pattern": "常见规则集合"}
43
+ ],
44
+ "examples": [
45
+ "创建一个投诉表单",
46
+ "做一个员工入职登记表,包含姓名、部门、入职日期"
47
+ ],
48
+ "disambiguation": {
49
+ "员工表": ["数据表格(查看)", "录入表单(填写)", "混合视图"],
50
+ "下拉框": ["单选下拉", "多选下拉", "级联选择"]
51
+ }
52
+ }
53
+ ```
54
+
55
+ ### 2. 新增 Tools:主动澄清与增量修改
56
+
57
+ ```python
58
+ # Tool: clarify_intent
59
+ def clarify_intent(ambiguous_text: str) -> dict:
60
+ """当检测到歧义时,返回澄清问题"""
61
+ return {
62
+ "ambiguities": [
63
+ {"target": "员工表", "options": ["数据表格", "录入表单", "详情页"]}
64
+ ],
65
+ "clarifying_questions": [
66
+ "您想创建一个用于'查看员工列表'的表格,还是用于'填写信息'的表单?"
67
+ ]
68
+ }
69
+
70
+ # Tool: get_current_context
71
+ def get_current_context(resource_path: str) -> dict:
72
+ """获取当前应用状态,用于处理'把那个下拉框改成按钮'这类引用"""
73
+ return {
74
+ "recently_modified": ["form:employee_form", "field:department"],
75
+ "available_references": {
76
+ "那个表单": "employee_form",
77
+ "下拉框": "field:department.type=select"
78
+ }
79
+ }
80
+ ```
81
+
82
+ ## 四、CLI 核心升级:规划器(Planner)
83
+
84
+ ### 1. 新增命令模式:`plan` 与 `execute`
85
+
86
+ ```bash
87
+ # 用户:"帮我做一个产品订单系统"
88
+ lowcode plan --from-chat "产品订单系统" --save plan_001.json
89
+
90
+ # 规划器输出 plan_001.json
91
+ {
92
+ "original_intent": "产品订单系统",
93
+ "assumptions": [
94
+ "需要订单表单(产品选择、数量、收货地址)",
95
+ "需要订单列表查看页",
96
+ "数据存储使用平台默认API"
97
+ ],
98
+ "missing_info": [
99
+ {"slot": "产品列表数据源", "question": "产品列表从哪里获取?", "priority": "high"},
100
+ {"slot": "是否需要支付功能", "question": "是否需要集成支付?"}
101
+ ],
102
+ "execution_plan": [
103
+ {"step": 1, "action": "create_data_source", "params": {"type": "待确认"}},
104
+ {"step": 2, "action": "create_form", "depends_on": [1]},
105
+ {"step": 3, "action": "create_table_view", "depends_on": [2]}
106
+ ],
107
+ "estimated_commands": ["lowcode create ...", "lowcode add field ..."]
108
+ }
109
+
110
+ # 用户确认后执行
111
+ lowcode execute plan_001.json --interactive
112
+ ```
113
+
114
+ ### 2. 对话状态管理
115
+
116
+ CLI 需要维护一个**会话上下文**文件 `.lowcode/conversation.json`:
117
+
118
+ ```json
119
+ {
120
+ "session_id": "chat_20250609_001",
121
+ "current_app": "order_system",
122
+ "pending_clarifications": [
123
+ {"id": "q1", "question": "产品列表从哪来?", "status": "waiting"}
124
+ ],
125
+ "operation_history": [
126
+ {"user": "创建订单表单", "executed": ["create_form", "add_field x3"]},
127
+ {"user": "把价格改成只读", "executed": ["update_field_attr"]}
128
+ ],
129
+ "context_references": {
130
+ "那个表单": "order_form",
131
+ "价格字段": "order_form.fields.price"
132
+ }
133
+ }
134
+ ```
135
+
136
+ ### 3. 新增命令:智能修改
137
+
138
+ ```bash
139
+ # 处理"把那个下拉框改成单选按钮"
140
+ lowcode modify --from-context "那个下拉框" --change "type=radio"
141
+
142
+ # CLI 自动解析:
143
+ # 1. 读取 conversation.json,找到最近提及的下拉框
144
+ # 2. 定位到 field_id
145
+ # 3. 执行 lowcode set field --id xxx --type radio
146
+ # 4. 输出:"已将'部门选择'下拉框改为单选按钮 ✅"
147
+ ```
148
+
149
+ ## 五、用户体验流程设计(完整示例)
150
+
151
+ ### 场景:用户通过聊天创建"员工反馈系统"
152
+
153
+ #### 第1轮:初始意图
154
+ **用户**:帮我做一个员工反馈系统
155
+
156
+ **系统(MCP + CLI Planner)**:
157
+ ```
158
+ 好的,我来帮您创建员工反馈系统。
159
+
160
+ 📋 我的理解:
161
+ - 需要员工提交反馈的表单
162
+ - 需要查看反馈列表的管理页面
163
+
164
+ ❓ 需要您确认:
165
+ 1. 反馈包含哪些内容?(如:标题、内容、匿名选项)
166
+ 2. 是否需要员工登录验证?
167
+ 3. 反馈提交后是否需要审批流程?
168
+
169
+ 💡 您也可以直接说"做一个简单版",我会使用默认配置。
170
+ ```
171
+
172
+ #### 第2轮:补充信息
173
+ **用户**:简单版就行,包含标题、内容、匿名勾选,不需要登录
174
+
175
+ **系统(规划器生成计划)**:
176
+ ```
177
+ 明白!我将为您创建:
178
+
179
+ 📝 反馈表单
180
+ - 标题(文本输入,必填)
181
+ - 内容(多行文本,必填)
182
+ - 匿名(勾选框,默认否)
183
+
184
+ 📊 反馈列表
185
+ - 显示所有提交
186
+ - 按时间倒序
187
+
188
+ 是否继续?(回复"是"或直接提出修改)
189
+ ```
190
+
191
+ **用户**:是
192
+
193
+ **系统执行**:
194
+ ```bash
195
+ # 后台执行 CLI 命令
196
+ lowcode create app --name feedback_system --template minimal
197
+ lowcode add form --id feedback_form --title "提交反馈"
198
+ lowcode add field --form feedback_form --label "标题" --type input --required
199
+ lowcode add field --form feedback_form --label "内容" --type textarea --required
200
+ lowcode add field --form feedback_form --label "匿名" --type checkbox --default false
201
+ lowcode add table --data-source feedback_api --columns "标题,内容,匿名,提交时间"
202
+ ```
203
+
204
+ **系统输出**:
205
+ ```
206
+ ✅ 员工反馈系统已创建!
207
+
208
+ 📎 访问地址:https://your-platform/feedback_system
209
+ 🔧 后续可修改:
210
+ - "添加评分字段"(1-5星)
211
+ - "限制匿名用户每天最多提交3次"
212
+ - "导出反馈数据为Excel"
213
+
214
+ 需要调整什么吗?
215
+ ```
216
+
217
+ #### 第3轮:迭代修改
218
+ **用户**:把匿名改成默认勾选
219
+
220
+ **系统**:
221
+ ```bash
222
+ # CLI 解析上下文并执行
223
+ lowcode modify --target feedback_form.anonymous --set default=true
224
+ ```
225
+ ```
226
+ ✅ 已将"匿名"选项的默认状态改为"已勾选"
227
+
228
+ 当前表单效果:
229
+ - 标题 [________]
230
+ - 内容 [________]
231
+ - 匿名 [✓] 匿名提交
232
+ ```
233
+
234
+ ## 六、关键成功要素(聊天式专属)
235
+
236
+ ### 1. 主动澄清与建议
237
+ - 不仅被动执行,要主动询问缺失信息
238
+ - 提供**智能补全建议**(如检测到"邮箱",自动建议邮箱校验)
239
+ - 相似度匹配:用户说"做个打卡",系统关联到"考勤表单+日历视图"
240
+
241
+ ### 2. 可逆操作与版本控制
242
+ ```bash
243
+ # 用户:"不对,回到上一步"
244
+ lowcode undo --last-change
245
+
246
+ # 或使用自然语言
247
+ lowcode chat "撤销刚才添加的评分字段"
248
+ ```
249
+
250
+ ### 3. 多模态输出(聊天界面内)
251
+ ```
252
+ ✅ 表单已创建
253
+
254
+ [预览卡片]
255
+ ┌─────────────────────┐
256
+ │ 员工反馈表单 │
257
+ │ 标题:[ ] │
258
+ │ 内容:[ ] │
259
+ │ 匿名:[✓] │
260
+ │ [提交] │
261
+ └─────────────────────┘
262
+
263
+ [操作按钮] 📝编辑 👁预览 📤分享
264
+ ```
265
+
266
+ ### 4. 渐进式披露
267
+ 不要一次性输出所有信息,采用**摘要+展开**模式:
268
+ ```
269
+ ✅ 已创建"订单系统"(包含3个页面,12个组件)
270
+ 📊 详情: lowcode status --verbose
271
+ 🔄 修改: "在商品选择旁加个库存提示"
272
+ ```
273
+
274
+ ## 七、技术实现建议
275
+
276
+ ### MCP Server 增强接口
277
+ ```python
278
+ # 新增协议端点
279
+ @mcp.tool()
280
+ async def chat_plan(intent: str, context: dict) -> Plan:
281
+ """从自然语言意图生成执行计划"""
282
+
283
+ @mcp.tool()
284
+ async def chat_modify(reference: str, change: str) -> ChangeResult:
285
+ """处理自然语言修改请求"""
286
+
287
+ @mcp.resource()
288
+ async def get_intent_templates() -> List[IntentTemplate]:
289
+ """返回所有支持的意图模板"""
290
+ ```
291
+
292
+ ### CLI 新增子命令
293
+ ```bash
294
+ lowcode chat # 进入聊天模式
295
+ lowcode chat "创建登录表单" # 单轮对话
296
+ lowcode plan --interactive # 交互式规划
297
+ lowcode undo/redo # 对话级撤销
298
+ lowcode status --conversation # 查看对话上下文
299
+ ```
300
+
301
+ ### 对话状态持久化
302
+ ```yaml
303
+ # .lowcode/state.yaml
304
+ conversation:
305
+ mode: "chat"
306
+ turn: 3
307
+ pending_questions:
308
+ - "数据源从哪里获取?"
309
+ last_plan: plan_001.json
310
+ checkpoints:
311
+ - timestamp: "2025-06-09T10:00:00Z"
312
+ snapshot: "after_form_creation"
313
+ ```
314
+
315
+ ## 总结
316
+
317
+ 实现"聊天式搭建"的关键不再是工具本身的功能,而是**意图理解、任务规划、对话管理**三者的闭环:
318
+
319
+ 1. **MCP 提供意图模板库**:让系统知道用户可能想要什么
320
+ 2. **CLI Planner 负责拆解**:将自然语言转为可执行计划
321
+ 3. **对话状态管理**:维护上下文,支持"那个""上一步"等引用
322
+ 4. **主动澄清机制**:遇到歧义立即提问,避免错误执行
323
+
324
+ 最终效果:用户像和产品经理对话一样描述需求,系统在后台自动编排 MCP 和 CLI 完成搭建,并支持自然的迭代修改。
Binary file
Binary file
@@ -7,7 +7,7 @@ packages = ["src/dwf_cli"]
7
7
 
8
8
  [project]
9
9
  name = "dwf-platform-cli"
10
- version = "0.2.0"
10
+ version = "0.3.0"
11
11
  description = "DWF platform CLI and MCP server for AI agents and developers"
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.12"