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.
- dwf_platform_cli-0.3.0/.claude/settings.local.json +67 -0
- dwf_platform_cli-0.3.0/.mcp.json +8 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/PKG-INFO +1 -1
- dwf_platform_cli-0.3.0/app_ext.json +10 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/commands/funcmodel.md +110 -46
- dwf_platform_cli-0.3.0/gs.txt +324 -0
- dwf_platform_cli-0.3.0/kq.png +0 -0
- dwf_platform_cli-0.3.0/mb.png +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/pyproject.toml +1 -1
- dwf_platform_cli-0.3.0/scripts/build_widget_schema.py +98 -0
- dwf_platform_cli-0.3.0/scripts/build_widget_schema_from_vue.py +299 -0
- dwf_platform_cli-0.3.0/scripts/scrape_widget_docs.py +143 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/api/funcmodel.py +23 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/__init__.py +1 -1
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/funcmodel.py +695 -78
- dwf_platform_cli-0.3.0/src/dwf_cli/mcp/server.py +2374 -0
- dwf_platform_cli-0.3.0/src/dwf_cli/mcp/widget_defaults.json +717 -0
- dwf_platform_cli-0.3.0/src/dwf_cli/mcp/widget_schema.json +13820 -0
- dwf_platform_cli-0.3.0/src/dwf_cli/oprCol.json +436 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/funcmodel/app_update.schema.json +3 -3
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/funcmodel/operations_create.schema.json +6 -6
- dwf_platform_cli-0.3.0/tem_create_opr.json +18 -0
- dwf_platform_cli-0.3.0/tem_form.json +1264 -0
- dwf_platform_cli-0.3.0/tem_form_basic.json +1042 -0
- dwf_platform_cli-0.3.0/template_app.html +1046 -0
- dwf_platform_cli-0.2.0/.claude/settings.local.json +0 -19
- dwf_platform_cli-0.2.0/src/dwf_cli/mcp/server.py +0 -411
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/.gitignore +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/.python-version +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/CLAUDE.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/Enrollment.xlsx +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/Jenkinsfile +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/LICENSE +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/README.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api/API/351/205/215/347/275/256.md" +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api/Actuator.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api/IoTDB.md +0 -0
- {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
- {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
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api/WebSocket.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api/WebSocketViewConnect.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/api/index.md +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/commands/auth.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/commands/config.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/commands/datamodel.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/commands/formmodel.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/index.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/installation.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/quickstart.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/docs/special.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/hooks/nav.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/knowledge/CHECKLIST.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/knowledge/GUIDE.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/knowledge/TODO.md +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/main.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/mkdocs.yml +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/schema_output.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/__init__.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/__main__.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/api/__init__.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/api/auth.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/api/client.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/api/datamodel.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/api/formmodel.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/_common.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/auth.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/config.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/datamodel.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/formmodel.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/cli/schema.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/core/__init__.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/core/config.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/core/crypto.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/core/errors.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/core/output.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/core/validator.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/mcp/__init__.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/__init__.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/attribute_bind.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/attribute_create.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/attribute_update.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/create.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/excel_confirm.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/external_create.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/external_update.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/object_create.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/object_update.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/relation_create.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/relation_update.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/datamodel/update.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/funcmodel/app_create.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/funcmodel/language-package_create.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/src/dwf_cli/schemas/funcmodel/operations_update.schema.json +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/__init__.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_api/__init__.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_api/test_client.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_api/test_crypto.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_api/test_datamodel.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_cli/__init__.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_cli/test_config.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_cli/test_datamodel_cli.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_cli/test_funcmodel_formmodel.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_cli/test_main.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_cli/test_schema_cli.py +0 -0
- {dwf_platform_cli-0.2.0 → dwf_platform_cli-0.3.0}/tests/test_core/__init__.py +0 -0
- {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
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dwf-platform-cli
|
|
3
|
-
Version: 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
|
-
#
|
|
202
|
-
dwf-cli funcmodel app create --
|
|
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
|
-
#
|
|
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
|
-
| `--
|
|
218
|
-
| `--
|
|
219
|
-
| `--
|
|
220
|
-
| `--
|
|
221
|
-
| `--
|
|
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
|
|
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
|
|
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
|
-
|
|
253
|
+
更新应用实例。先查询当前数据,再用选项参数覆盖指定字段后全量更新。
|
|
245
254
|
|
|
246
255
|
```bash
|
|
247
|
-
#
|
|
248
|
-
dwf-cli funcmodel app update --
|
|
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
|
|
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 --
|
|
263
|
+
dwf-cli funcmodel app update <APP_ID> --title '新名称' --dry-run
|
|
256
264
|
```
|
|
257
265
|
|
|
258
266
|
| 参数 | 默认值 | 说明 |
|
|
259
267
|
|------|--------|------|
|
|
260
|
-
|
|
|
261
|
-
| `--data-file` | `<required-if-no-data-no-options>` | JSON 文件路径,替代 `--data` |
|
|
268
|
+
| `APP_ID` | `<required>` | 应用 OID(位置参数) |
|
|
262
269
|
| `--title`, `-t` | 无 | 新应用标题 |
|
|
263
|
-
| `--
|
|
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
|
|
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
|
-
|
|
810
|
+
创建操作。支持结构化参数和完整 JSON 两种方式。
|
|
798
811
|
|
|
799
812
|
```bash
|
|
800
|
-
#
|
|
801
|
-
dwf-cli funcmodel operations create
|
|
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 --
|
|
830
|
+
# 预览
|
|
831
|
+
dwf-cli funcmodel operations create --display-name '创建用户' --module-name UserModule --dry-run
|
|
808
832
|
```
|
|
809
833
|
|
|
810
834
|
| 参数 | 默认值 | 说明 |
|
|
811
835
|
|------|--------|------|
|
|
812
|
-
| `--
|
|
813
|
-
| `--
|
|
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
|
|
860
|
+
| `--format`, `-f` | `table` | 输出格式 `<enum: table\|json>` |
|
|
817
861
|
|
|
818
862
|
---
|
|
819
863
|
|
|
820
864
|
### operations update
|
|
821
865
|
|
|
822
|
-
|
|
866
|
+
更新操作。先查询当前数据,再用选项参数覆盖指定字段后全量更新。
|
|
823
867
|
|
|
824
868
|
```bash
|
|
825
|
-
#
|
|
826
|
-
dwf-cli funcmodel operations update --
|
|
869
|
+
# 更新显示名称
|
|
870
|
+
dwf-cli funcmodel operations update <OPR_OID> --display-name '新名称'
|
|
827
871
|
|
|
828
|
-
#
|
|
829
|
-
dwf-cli funcmodel operations update
|
|
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 --
|
|
876
|
+
# 预览更新
|
|
877
|
+
dwf-cli funcmodel operations update <OPR_OID> --display-name '新名称' --dry-run
|
|
833
878
|
```
|
|
834
879
|
|
|
835
880
|
| 参数 | 默认值 | 说明 |
|
|
836
881
|
|------|--------|------|
|
|
837
|
-
|
|
|
838
|
-
| `--
|
|
839
|
-
| `--
|
|
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
|
|
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
|