@qingflow-tech/qingflow-cli 1.1.33 → 1.1.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/docs/local-agent-install.md +10 -0
- package/npm/lib/runtime.mjs +100 -18
- package/package.json +1 -1
- package/pyproject.toml +1 -1
- package/skills/qingflow-cli/SKILL.md +5 -5
- package/skills/qingflow-cli/reference/builder/90-workflow.md +6 -12
- package/skills/qingflow-cli/reference/builder/README.md +1 -1
- package/skills/qingflow-cli/reference/builder/reference/app-delivery-sop.md +3 -6
- package/skills/qingflow-cli/reference/builder/workflow/01-overview.md +6 -5
- package/skills/qingflow-cli/reference/builder/workflow/03-flow-patterns.md +1 -1
- package/skills/qingflow-cli/reference/builder/workflow/06-stage3-build-spec.md +33 -39
- package/skills/qingflow-cli/reference/builder/workflow/07-stage4-validate-spec.md +4 -10
- package/skills/qingflow-cli/reference/builder/workflow/08-stage5-apply-verify.md +2 -3
- package/skills/qingflow-cli/reference/builder/workflow/11-troubleshooting.md +2 -1
- package/skills/qingflow-cli/reference/builder/workflow/README.md +3 -3
- package/skills/qingflow-cli/scripts/workflow/validate_flow_spec.py +24 -2
- package/src/qingflow_mcp/builder_facade/service.py +41 -4
- package/src/qingflow_mcp/cli/commands/builder.py +15 -17
- package/src/qingflow_mcp/server_app_builder.py +1 -7
- package/src/qingflow_mcp/tools/ai_builder_tools.py +32 -51
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/README.md +0 -308
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/build-complete-system.md +0 -819
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/build-single-app.md +0 -836
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/complete-system-development-guide.md +0 -137
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/create-app.md +0 -203
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/environments.md +0 -63
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/flow-actors-and-permissions.md +0 -142
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/gotchas.md +0 -116
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/match-rules.md +0 -114
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/public-surface-sync.md +0 -75
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/single-app-development-guide.md +0 -69
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/solution-playbooks.md +0 -52
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/tool-selection.md +0 -113
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/update-flow.md +0 -7
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/update-layout.md +0 -7
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/update-schema.md +0 -7
- package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/update-views.md +0 -7
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
# Builder Match Rules
|
|
2
|
-
|
|
3
|
-
Use this reference for builder-side field matching rules in custom buttons and associated view/report filters.
|
|
4
|
-
|
|
5
|
-
This is not the same thing as `record_access` analysis filters or normal view `filters`.
|
|
6
|
-
|
|
7
|
-
## Where These Rules Apply
|
|
8
|
-
|
|
9
|
-
- `app_custom_buttons_apply.upsert_buttons[].trigger_add_data_config.field_mappings`
|
|
10
|
-
- `app_custom_buttons_apply.patch_buttons[].set.trigger_add_data_config.field_mappings`
|
|
11
|
-
- `app_associated_resources_apply.upsert_resources[].match_mappings`
|
|
12
|
-
- `app_associated_resources_apply.patch_resources[].set.match_mappings`
|
|
13
|
-
|
|
14
|
-
Prefer semantic mappings. Do not handwrite raw `que_relation` or `match_rules` unless you are preserving an existing backend config.
|
|
15
|
-
|
|
16
|
-
## System Fields
|
|
17
|
-
|
|
18
|
-
System fields can participate in mappings:
|
|
19
|
-
|
|
20
|
-
- `数据ID`, `row_record_id`, `apply_id`, `_id` -> `field_id=-17`
|
|
21
|
-
This is the current record's real apply/record ID.
|
|
22
|
-
- `编号`, `数据编号`, `record_number` -> `field_id=0`
|
|
23
|
-
This is the frontend-visible record number. It may be custom formatted and is not the same as `数据ID`.
|
|
24
|
-
|
|
25
|
-
Explicit selectors such as `{"field_id": -17}` and `{"field_id": 0}` are allowed and remove ambiguity.
|
|
26
|
-
|
|
27
|
-
## Custom Buttons
|
|
28
|
-
|
|
29
|
-
Use `field_mappings` for dynamic values copied from the current source record:
|
|
30
|
-
|
|
31
|
-
```json
|
|
32
|
-
{
|
|
33
|
-
"target_app_key": "WORKLOG_APP",
|
|
34
|
-
"field_mappings": [
|
|
35
|
-
{"source_field": "数据ID", "target_field": "关联员工"},
|
|
36
|
-
{"source_field": "员工名称", "target_field": "员工姓名"}
|
|
37
|
-
],
|
|
38
|
-
"default_values": {
|
|
39
|
-
"状态": "待提交"
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Use `default_values` only for static constants. Do not use `default_values` as the preferred way to pass the current record.
|
|
45
|
-
|
|
46
|
-
For an existing button, put the same semantic config under `patch_buttons[].set`:
|
|
47
|
-
|
|
48
|
-
```json
|
|
49
|
-
{
|
|
50
|
-
"button_id": 3858041,
|
|
51
|
-
"set": {
|
|
52
|
-
"trigger_add_data_config": {
|
|
53
|
-
"target_app_key": "WORKLOG_APP",
|
|
54
|
-
"field_mappings": [
|
|
55
|
-
{"source_field": "数据ID", "target_field": "关联员工"}
|
|
56
|
-
],
|
|
57
|
-
"default_values": {
|
|
58
|
-
"状态": "待提交"
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## Associated Resources
|
|
66
|
-
|
|
67
|
-
Use `match_mappings` for associated view/report filters:
|
|
68
|
-
|
|
69
|
-
```json
|
|
70
|
-
{
|
|
71
|
-
"graph_type": "view",
|
|
72
|
-
"target_app_key": "WORKLOG_APP",
|
|
73
|
-
"view_key": "WORKLOG_VIEW",
|
|
74
|
-
"match_mappings": [
|
|
75
|
-
{"target_field": "关联员工", "source_field": "数据ID"},
|
|
76
|
-
{"target_field": "状态", "value": "待提交"}
|
|
77
|
-
]
|
|
78
|
-
}
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Dynamic conditions use `source_field`; static conditions use `value`.
|
|
82
|
-
|
|
83
|
-
For an existing associated resource, put the same filter mapping under `patch_resources[].set`:
|
|
84
|
-
|
|
85
|
-
```json
|
|
86
|
-
{
|
|
87
|
-
"associated_item_id": 3497587,
|
|
88
|
-
"set": {
|
|
89
|
-
"match_mappings": [
|
|
90
|
-
{"target_field": "关联员工", "source_field": "数据ID"}
|
|
91
|
-
]
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
## Type Compatibility
|
|
97
|
-
|
|
98
|
-
- Relation fields: match another relation field with the same target app, or match `数据ID(-17)` when the target relation points to the current source app.
|
|
99
|
-
- Record ID `数据ID(-17)`: can match relation fields that point to the current source app, or ID-compatible text/number fields.
|
|
100
|
-
- Record number `编号(0)`: can match text, long text, number, amount, or another record-number field.
|
|
101
|
-
- Member fields: only match member fields.
|
|
102
|
-
- Department fields: only match department fields.
|
|
103
|
-
- Option fields: single select, multi select, and boolean can match option-family fields or static option values.
|
|
104
|
-
- Date fields: date and datetime can match each other.
|
|
105
|
-
- Text fields: text, long text, phone, and email can match each other.
|
|
106
|
-
- Number fields: number and amount can match each other.
|
|
107
|
-
- Attachment, subtable, code block, Q-Linker, and address fields are not default match fields.
|
|
108
|
-
|
|
109
|
-
## Error Interpretation
|
|
110
|
-
|
|
111
|
-
- Field not found: re-read `app_get` or `app_get_fields` and retry with an exact title or `field_id`.
|
|
112
|
-
- Type mismatch: choose a compatible source/target pair from the matrix above.
|
|
113
|
-
- Reference source mismatch: the target relation field points to a different app; choose a relation field that points back to the current source app, or match a non-relation field.
|
|
114
|
-
- Mixed raw and semantic modes: use either semantic `field_mappings/match_mappings` or raw `que_relation/match_rules`, never both in the same item.
|
package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/public-surface-sync.md
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# Qingflow Core Public Surface Sync
|
|
2
|
-
|
|
3
|
-
Use this file as the maintenance baseline for the core Qingflow skills.
|
|
4
|
-
It is not a user-facing product spec. It exists to prevent skill drift.
|
|
5
|
-
|
|
6
|
-
## Current Public Defaults
|
|
7
|
-
|
|
8
|
-
### User data
|
|
9
|
-
|
|
10
|
-
- Read range first with `app_get`, then `record_browse_schema_get(view_id=...)`
|
|
11
|
-
- Treat `record_browse_schema_get.fields` as the selected Qingflow table view header schema; `record_access.fields` and `record_list` field selectors must stay aligned with it.
|
|
12
|
-
- Standard flows:
|
|
13
|
-
- analyze: `app_get -> record_browse_schema_get -> record_access -> Python`
|
|
14
|
-
- browse detail: `app_get -> record_browse_schema_get -> record_list / record_get`
|
|
15
|
-
- explicit export/download/Excel: `app_get -> choose view_id -> view_get -> record_export_*` or `record_export_direct`; export tools require explicit `view_id`
|
|
16
|
-
- insert: `record_insert_schema_get -> record_insert(items)`
|
|
17
|
-
- update: `record_get -> record_update`; use `record_update_schema_get` only for failure diagnosis or ambiguous writable-field routing
|
|
18
|
-
|
|
19
|
-
### Tasks
|
|
20
|
-
|
|
21
|
-
- Discovery stays on `task_list`
|
|
22
|
-
- `task_list --query` uses backend search first and only applies local fallback when backend returns zero rows
|
|
23
|
-
- Public actions are:
|
|
24
|
-
- `approve`
|
|
25
|
-
- `reject`
|
|
26
|
-
- `rollback`
|
|
27
|
-
- `transfer`
|
|
28
|
-
- `urge`
|
|
29
|
-
- `save_only`
|
|
30
|
-
- `reject` requires `payload.audit_feedback`
|
|
31
|
-
- `save_only` requires non-empty `fields`
|
|
32
|
-
- `TASK_RUNTIME_CONSUMED_AFTER_ACTION` is a normal post-success warning when the current node runtime is consumed and `46001` appears on re-read
|
|
33
|
-
|
|
34
|
-
### Builder
|
|
35
|
-
|
|
36
|
-
- Official package entry: `package_get`, `package_apply`
|
|
37
|
-
- Official builder writes:
|
|
38
|
-
- `app_schema_apply`
|
|
39
|
-
- `app_layout_apply`
|
|
40
|
-
- `app_flow_apply`
|
|
41
|
-
- `app_views_apply`
|
|
42
|
-
- `app_custom_buttons_apply`
|
|
43
|
-
- `app_associated_resources_apply`
|
|
44
|
-
- `app_charts_apply`
|
|
45
|
-
- `portal_apply`
|
|
46
|
-
- `app_publish_verify`
|
|
47
|
-
- `portal_apply` edit mode may omit `sections` for base-info-only updates
|
|
48
|
-
- `app_charts_apply.visibility` is a public capability and should be treated as a base-only visibility update
|
|
49
|
-
- Existing object parameter replacement should use `patch_views`, `patch_buttons`, `patch_resources`, and `patch_charts`; `upsert_*` is for creation or full target config
|
|
50
|
-
- `app_get.editability` uses:
|
|
51
|
-
- `can_edit_app_base`
|
|
52
|
-
- `can_edit_form`
|
|
53
|
-
- `can_edit_flow`
|
|
54
|
-
- `can_edit_views`
|
|
55
|
-
- `can_edit_charts`
|
|
56
|
-
|
|
57
|
-
## Known High-Drift Areas
|
|
58
|
-
|
|
59
|
-
- Task actions, especially `save_only`, reject payload requirements, and `46001` post-action interpretation
|
|
60
|
-
- Package public tools: do not regress to `package_create` / `package_attach_app` as the public default story
|
|
61
|
-
- App editability: do not let `can_edit_form` imply app base-info writes
|
|
62
|
-
- Portal and chart visibility: keep the public story on `portal_apply` / `app_charts_apply`, not low-level internal writes
|
|
63
|
-
- Analysis path: standard path stays `record_access -> Python`
|
|
64
|
-
|
|
65
|
-
## Release Checklist For Skill Maintenance
|
|
66
|
-
|
|
67
|
-
After each beta that changes public behavior, re-check:
|
|
68
|
-
|
|
69
|
-
1. `public_surface.py`
|
|
70
|
-
2. `README.md`
|
|
71
|
-
3. `server_app_builder.py` and `server.py` top-level guidance
|
|
72
|
-
4. CLI help for `task`, `builder package`, `builder portal`, `builder charts`
|
|
73
|
-
5. Whether new warnings or verification fields need to be explained in skills
|
|
74
|
-
|
|
75
|
-
If a tool behavior changed but the public surface did not, prefer updating the relevant skill section instead of expanding this file.
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# Single App Development Guide
|
|
2
|
-
|
|
3
|
-
Use this when the user asks for one app/form, or gives one `app_key`.
|
|
4
|
-
If the user asks for a package, system, or several related modules, use `complete-system-development-guide.md` instead.
|
|
5
|
-
|
|
6
|
-
## Recommended Completeness
|
|
7
|
-
|
|
8
|
-
Required:
|
|
9
|
-
|
|
10
|
-
- target package/app resolved by `package_get`, `app_resolve`, or `app_get`
|
|
11
|
-
- business fields created or updated through `app_schema_apply`
|
|
12
|
-
- exactly one readable top-level `as_data_title: true`
|
|
13
|
-
- no platform system fields in `add_fields`
|
|
14
|
-
- layout places the important fields
|
|
15
|
-
- at least one business view beyond platform default views when the task includes user-facing list work
|
|
16
|
-
|
|
17
|
-
Strongly recommended:
|
|
18
|
-
|
|
19
|
-
- saved filters and query panel fields for the main operating views
|
|
20
|
-
- 1-3 concrete business buttons on core operating views through `app_views_apply.action_buttons`, when the view has real actions
|
|
21
|
-
- simple charts when the app has status, amount, date, or owner fields worth tracking
|
|
22
|
-
- associated resources or advanced standalone buttons only when they support a concrete workflow
|
|
23
|
-
|
|
24
|
-
Optional:
|
|
25
|
-
|
|
26
|
-
- workflow, portal entry, sample data, roles, or visibility changes when requested by the user or clearly needed by the app's job
|
|
27
|
-
|
|
28
|
-
Workflow schema prerequisites:
|
|
29
|
-
|
|
30
|
-
- If the app will have approval/fill/copy workflow nodes, add one explicit business status `select` field first, such as `状态`, `处理状态`, `审批状态`, `工单状态`, or `流程阶段`.
|
|
31
|
-
- Do not create platform workflow system fields: `当前流程状态`, `当前处理人`, `当前处理节点`, or `流程标题`.
|
|
32
|
-
|
|
33
|
-
## Standard Path
|
|
34
|
-
|
|
35
|
-
1. Read current target: `app_resolve` or `app_get`.
|
|
36
|
-
2. Read current fields: `app_get_fields`.
|
|
37
|
-
3. Apply fields with `app_schema_apply`.
|
|
38
|
-
4. Apply layout with `app_layout_apply`.
|
|
39
|
-
5. Apply views with `app_views_apply` when list/table/card/gantt behavior is part of the request; declare ordinary business buttons in `action_buttons` while designing the view.
|
|
40
|
-
6. Apply charts/associated resources/advanced standalone buttons only if they are part of the app's actual workflow.
|
|
41
|
-
7. Use `app_publish_verify` only when explicit live verification is required.
|
|
42
|
-
|
|
43
|
-
## Field Rules
|
|
44
|
-
|
|
45
|
-
- Use agent-friendly field types where possible: `text`, `multiline`, `select`, `multi_select`, `number`, `amount`, `date`, `datetime`, `member`, `department`, `attachment`, `relation`.
|
|
46
|
-
- Do not create `数据ID`, `编号`, `申请人`, `申请时间`, `创建人`, `创建时间`, `提交人`, `提交时间`, `更新时间`, `更新人`, `当前流程状态`, `当前处理人`, `当前处理节点`, or `流程标题`.
|
|
47
|
-
- Do not create built-in default views such as `全部数据` or `我的数据`; Qingflow provides system views.
|
|
48
|
-
|
|
49
|
-
## View Query Rules
|
|
50
|
-
|
|
51
|
-
- `filters` are fixed saved filters; `query_conditions` only configures frontend query-panel fields.
|
|
52
|
-
- Put only query-panel fields in `query_conditions.rows`: text, long text, number, amount, date/datetime, select, member, department, phone, email, or boolean.
|
|
53
|
-
- Do not put relation, attachment, subtable/subfield, address, Q-Linker, or code-block fields in `query_conditions`; use fixed `filters` or associated-resource `match_mappings` instead.
|
|
54
|
-
|
|
55
|
-
## Button Rules
|
|
56
|
-
|
|
57
|
-
- Use `action_buttons` for ordinary buttons tied to one view.
|
|
58
|
-
- Use `app_custom_buttons_apply` only for style/icon changes, cross-view reuse, deleting button bodies, bulk binding reorder, or exact qRobot/wings configs.
|
|
59
|
-
- Use `add_data` when a current record creates a downstream/child record; configure `target_app_key + field_mappings`, usually mapping `source_field: "数据ID"` to the target relation/reference field.
|
|
60
|
-
- Use `link` only for SOP, help, external system, or fixed URL navigation. Do not use it to fake approval, status transition, or data writeback.
|
|
61
|
-
- Use `qRobot`/`wings` only when the user provides exact existing automation config.
|
|
62
|
-
- Prefer `detail` for current-record add-data actions, `list` for row actions, and `header` for global actions with no current-row context. Do not use current-record `field_mappings` on `header`.
|
|
63
|
-
- Approval, rejection, close-task, and status transition should be workflow/task behavior or existing automation; they are not generic custom-button types.
|
|
64
|
-
|
|
65
|
-
## Stop Conditions
|
|
66
|
-
|
|
67
|
-
- If the task actually needs multiple business objects, stop and switch to the complete-system guide.
|
|
68
|
-
- If a write returns `partial_success`, `write_executed=true`, or `safe_to_retry=false`, read back before retrying.
|
|
69
|
-
- If the same validation error repeats twice, re-read `qingflow --json builder contract` instead of guessing.
|
package/skills/qingflow-cli/reference/builder/reference/legacy-playbooks/solution-playbooks.md
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# Builder Playbooks
|
|
2
|
-
|
|
3
|
-
Use these when you need a quick reminder of the standard v2 builder sequences.
|
|
4
|
-
|
|
5
|
-
## Create a new app in an existing package
|
|
6
|
-
|
|
7
|
-
1. `package_get`
|
|
8
|
-
2. `app_resolve`
|
|
9
|
-
3. `app_schema_apply`
|
|
10
|
-
5. `app_publish_verify` only if the user asks for explicit live verification
|
|
11
|
-
|
|
12
|
-
## Update fields on an existing app
|
|
13
|
-
|
|
14
|
-
1. `app_resolve`
|
|
15
|
-
2. `app_get_fields`
|
|
16
|
-
3. `app_schema_apply`
|
|
17
|
-
|
|
18
|
-
## Rework layout
|
|
19
|
-
|
|
20
|
-
1. `app_get_layout`
|
|
21
|
-
2. `app_layout_apply`
|
|
22
|
-
|
|
23
|
-
Prefer `mode=merge`. Use `mode=replace` only when every field placement is intentional.
|
|
24
|
-
|
|
25
|
-
## Add or update workflow
|
|
26
|
-
|
|
27
|
-
1. `app_get_fields`
|
|
28
|
-
2. `app_get_flow`
|
|
29
|
-
3. `role_search` or `member_search`
|
|
30
|
-
4. `role_create` if the business wants a reusable role and no good exact role exists
|
|
31
|
-
5. `app_flow_apply`
|
|
32
|
-
|
|
33
|
-
If `app_flow_apply` reports `FLOW_DEPENDENCY_MISSING`, fix schema first.
|
|
34
|
-
If it reports `FLOW_ASSIGNEE_REQUIRED`, resolve roles or members first and retry with canonical `assignees.*`.
|
|
35
|
-
|
|
36
|
-
## Add or update views
|
|
37
|
-
|
|
38
|
-
1. `app_get_fields`
|
|
39
|
-
2. `app_get_views`
|
|
40
|
-
3. `app_views_apply`
|
|
41
|
-
|
|
42
|
-
For both workflow and view work, prefer `suggested_next_call` over re-guessing arguments after a validation failure.
|
|
43
|
-
|
|
44
|
-
## Final readback
|
|
45
|
-
|
|
46
|
-
Prefer these fields after writes:
|
|
47
|
-
|
|
48
|
-
- `app_get.tag_ids`
|
|
49
|
-
- `app_get.publish_status`
|
|
50
|
-
- `app_get_layout.unplaced_fields`
|
|
51
|
-
- `app_get_views.views`
|
|
52
|
-
- `app_get_flow.nodes`
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
# Tool Selection
|
|
2
|
-
|
|
3
|
-
Legacy reference only. For current single-app and complete-system builds, use
|
|
4
|
-
`../../10-build-single-app.md` and `../../20-build-complete-system.md` first.
|
|
5
|
-
Do not copy legacy `create_if_missing`, explicit `*_plan`, or preflight-first
|
|
6
|
-
examples into the main path.
|
|
7
|
-
|
|
8
|
-
## Default path
|
|
9
|
-
|
|
10
|
-
`summary read -> apply -> publish_verify`
|
|
11
|
-
|
|
12
|
-
Public builder `apply` tools submit after local contract normalization. Reuse,
|
|
13
|
-
same-name handling, whether to ask the user, and other business decisions belong
|
|
14
|
-
in the skills before apply. Do not route normal public builder work through
|
|
15
|
-
explicit `*_plan` tools.
|
|
16
|
-
|
|
17
|
-
## Hierarchy first
|
|
18
|
-
|
|
19
|
-
Before picking tools, decide which layer the request targets:
|
|
20
|
-
|
|
21
|
-
- `package`: a solution/app bundle like “研发项目管理” or “费控管理系统”
|
|
22
|
-
- `app`: one form/app inside that package
|
|
23
|
-
- `field`: one field inside one app
|
|
24
|
-
- `relation`: a field that links two apps
|
|
25
|
-
|
|
26
|
-
If the user asks for multiple forms/modules that relate to each other, this is a package-level multi-app task, not a single-app create.
|
|
27
|
-
|
|
28
|
-
## Resolve
|
|
29
|
-
|
|
30
|
-
- `package_get`: read one known package by `package_id`
|
|
31
|
-
- `package_apply`: create or update one package by direct create/update intent; do not add `create_if_missing`
|
|
32
|
-
- `member_search`: resolve named people from the directory
|
|
33
|
-
- `role_search`: resolve reusable roles from the directory
|
|
34
|
-
- `role_create`: create a reusable role when the business owner wants role-based routing
|
|
35
|
-
- `app_resolve`: locate an existing app by exactly one selector mode: `app_key`, or `app_name + package_id`
|
|
36
|
-
|
|
37
|
-
## Summary reads
|
|
38
|
-
|
|
39
|
-
All `app_get_*` tools accept either `app_key` (single) or `app_keys[]` (batch). Batch returns `{status, apps[], errors[]}` — prefer batch when reading multiple apps in one step.
|
|
40
|
-
|
|
41
|
-
- `app_get`: overall app config health, publish state, counts, and builder editability
|
|
42
|
-
- `app_get_fields`: field names, types, required flags, section ids
|
|
43
|
-
- `app_get_layout`: sections, rows, unplaced fields
|
|
44
|
-
- `app_get_views`: current view names, types, columns, group-by
|
|
45
|
-
- `app_get_flow`: workflow enabled state, full spec (nodes + transitions)
|
|
46
|
-
- `app_get_charts`: current chart ids, names, types, order
|
|
47
|
-
- `app_get_buttons`: current custom button list (draft state)
|
|
48
|
-
- `app_get_associated_resources`: current associated resource pool (draft state)
|
|
49
|
-
- `app_publish_verify`: publish state and package tag verification — accepts `app_keys[]` for multi-app batch
|
|
50
|
-
- `portal_get`: current portal config detail and component inventory
|
|
51
|
-
|
|
52
|
-
## Apply tools
|
|
53
|
-
|
|
54
|
-
These execute normalized patches. Some app apply tools publish by default and still accept `publish=false`; custom button and associated-resource apply publish after at least one write succeeds and do not expose that switch.
|
|
55
|
-
|
|
56
|
-
- `app_schema_apply`: create app shell or change fields
|
|
57
|
-
- `app_layout_apply`: merge or replace layout; use `apps[]` (each item `{app_key, mode?, sections}`) for multi-app batch
|
|
58
|
-
- `app_flow_apply`: replace full workflow spec; use `patch_nodes[]` (`{id, set, unset}`) to update specific nodes without rewriting the full spec
|
|
59
|
-
- `app_views_apply`: use `patch_views` for existing-view parameter replacement; use `upsert_views` for creation or full target config; remove views by key; for normal view-specific business buttons, declare `action_buttons` in the view object or `patch_views[].set`; new views default associated report/view display to visible with `limit_type="all"`; use `apps[]` for multi-app batch
|
|
60
|
-
- `app_custom_buttons_apply`: advanced custom-button maintenance only: style/icon changes, cross-view reuse, deleting button bodies, bulk reordering bindings, or exact qRobot/wings configs. Use `patch_buttons` for existing-button parameter replacement; use `upsert_buttons` for creation or full target config; bind buttons to header/detail/list view positions; `placement=list` maps to the backend `INSIDE` row/list button position; merge-mode view configs require `buttons`; use `view_configs[].mode="replace"` or `buttons=[]` to clear a view's custom button bindings. For child-record creation linked to the current source record, map `source_field: "数据ID"` to the target relation field; do not put current-record `field_mappings` on `header`. Approval/status transition/close task is not a generic custom-button action; use workflow/task behavior or exact user-provided automation config. Use `apps[]` for multi-app batch.
|
|
61
|
-
- `app_associated_resources_apply`: attach existing BI reports/views to the Qingflow app associated-resource pool and per-view display area; it does not create or edit QingBI report bodies/configs. Use `patch_resources` for existing associated-resource parameter replacement; use `upsert_resources` for creation or full target config; `view_configs`, remove, and reorder may reference existing resources by internal `associated_item_id` or by `chart_id`/`chart_key`/`view_key`; use `match_mappings` for associated view/report filters; publishes after successful writes; omit raw `sourceType`, and use `report_source="dataset"` only to attach an existing BI dataset report. Before `upsert_resources`, read `app_get.associated_resources` and reuse an existing matching `target_app_key + view_key/chart_key`; repeated upsert can create duplicates because `client_key` is only valid inside one apply call. Use `apps[]` for multi-app batch.
|
|
62
|
-
- `app_charts_apply`: create/edit/remove/reorder app-source QingBI report bodies/configs with `dataSourceType=qingflow`; it does not create/edit dataset BI reports and does not attach reports to Qingflow app associated-resource display. Use semantic `metric`, `metrics`, `group_by`, and `where`: `target/indicator` for one KPI, `bar/columnar/pie` for distribution, `line/area` for trend, `table/detail/summary` for tabular summaries, and `dualaxes` for two-metric comparison. Use `patch_charts` for existing-chart parameter replacement; use `upsert_charts` for creation or full target config; avoid raw `indicator_field_ids`, `selectedMetrics`, and QingBI filter matrices on the main path; charts are immediate-live and do not publish; use `chart_id` when names are not unique; use `apps[]` for multi-app batch
|
|
63
|
-
- `portal_apply`: create or replace-update portal pages; use `dash_key` for update mode or `package_id + dash_name` for create mode; edit mode may omit `sections` for base-info-only updates; when sections are supplied they still use replace semantics; sections use a 24-column PC grid — all components in the same row (same `y`) must share the same `rows` value and their `cols` must sum to exactly 24; mismatched `rows` causes height misalignment, `cols` under 24 leaves trailing blank space; standard workbench heights are metric cards `rows=5`, BI charts `rows=7`, data views `rows=11`; business-entry grids must include real `config.items[]`; use `patch_sections[]` (`{chart_ref/view_ref/order, set, unset}`) to update individual sections without replacing all
|
|
64
|
-
|
|
65
|
-
For object-level updates, the safe partial syntax is `patch_*` with the object's real selector field plus `set` and optional `unset`. `selector` is only a concept, not a literal key. Examples: `patch_views: [{"view_key": "VIEW_KEY", "set": {...}}]`, `patch_buttons: [{"button_id": 1001, "set": {...}}]`, `patch_resources: [{"associated_item_id": 123, "set": {...}}]`, `patch_charts: [{"chart_id": 456, "set": {...}}]`, `patch_nodes: [{"id": "approve_1", "set": {...}}]`, `patch_sections: [{"chart_ref": {"chart_key": "ck_001"}, "set": {"title": "新标题"}}]`. The tool reads the current backend config, merges the patch, then submits the full backend payload internally. Do not send a partial `upsert_*` and expect missing required fields to be preserved.
|
|
66
|
-
|
|
67
|
-
## Explicit post-apply tools
|
|
68
|
-
|
|
69
|
-
- `app_publish_verify`: explicit final publish verification when the user asks for live confirmation
|
|
70
|
-
|
|
71
|
-
## Decision shortcuts
|
|
72
|
-
|
|
73
|
-
- Create one app inside an existing package:
|
|
74
|
-
`package_get -> app_resolve -> app_schema_apply`
|
|
75
|
-
- Create a brand new package, then create one app in it:
|
|
76
|
-
`package_apply(package_name + icon + color) -> app_schema_apply`
|
|
77
|
-
- Create a brand new multi-app system/package:
|
|
78
|
-
`package_apply(package_name + icon + color) -> app_schema_apply(apps[])`
|
|
79
|
-
- Update fields on an existing app:
|
|
80
|
-
`app_resolve -> app_get_fields -> app_schema_apply`
|
|
81
|
-
- Tidy layout:
|
|
82
|
-
`app_get_fields -> app_get_layout -> qingflow --json builder contract (if shape is unclear) -> app_layout_apply`
|
|
83
|
-
- Add workflow:
|
|
84
|
-
`qingflow --json builder contract -> app_get_fields -> app_get_flow -> role_search/member_search -> app_flow_apply -> app_get_flow`
|
|
85
|
-
- Update specific flow nodes:
|
|
86
|
-
`app_get_flow -> app_flow_apply.patch_nodes[]`
|
|
87
|
-
- Add views:
|
|
88
|
-
`qingflow --json builder contract -> app_get_fields -> app_get_views -> app_views_apply.patch_views/upsert_views -> app_get_views`
|
|
89
|
-
- Add QingBI charts:
|
|
90
|
-
`qingflow --json builder contract -> app_get_fields -> app_get_charts -> app_charts_apply.patch_charts/upsert_charts -> app_get_charts`
|
|
91
|
-
- Show an existing QingBI chart inside a Qingflow app/view:
|
|
92
|
-
`app_get -> app_associated_resources_apply.upsert_resources/patch_resources + view_configs -> app_get`
|
|
93
|
-
- Create or update a portal:
|
|
94
|
-
`qingflow --json builder contract -> portal_get -> portal_apply -> portal_get`
|
|
95
|
-
- Update portal section(s) without replacing all:
|
|
96
|
-
`portal_get -> portal_apply.patch_sections[]`
|
|
97
|
-
|
|
98
|
-
## Avoid
|
|
99
|
-
|
|
100
|
-
- Do not handcraft raw Qingflow schema payloads
|
|
101
|
-
- Do not rely on internal `solution_*` tools in public builder flows
|
|
102
|
-
- Do not create a new package without first asking the user to confirm package creation
|
|
103
|
-
- Do not regress to `package_create` or `package_attach_app` as the public default story
|
|
104
|
-
- Do not treat a package/system name as `app_name` when the user clearly wants multiple apps inside it
|
|
105
|
-
- Do not compress multiple business objects into one app with several text fields
|
|
106
|
-
- Do not skip summary reads before flow or view work
|
|
107
|
-
- Do not emit `column_names`; always use `columns`
|
|
108
|
-
- Do not model layout shape with `fields`, `field_ids`, or top-level `columns`; custom layout sections should be `title + rows`
|
|
109
|
-
- Do not reuse internal flow keys such as `role_entries` or `editable_que_ids` in public builder calls
|
|
110
|
-
- Do not pass natural-language preset guesses such as `default_approval`; map them to canonical preset values first
|
|
111
|
-
- Do not omit assignees on approval/fill/copy nodes
|
|
112
|
-
- Do not patch preset flows with brand new approval/fill node ids unless you are intentionally replacing the skeleton; reuse preset ids like `approve_1` and `fill_1`
|
|
113
|
-
- Do not guess role ids, member ids, or editable field ids; resolve names first
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# Legacy Redirect: Update Flow
|
|
2
|
-
|
|
3
|
-
This historical playbook is no longer a main entry point.
|
|
4
|
-
|
|
5
|
-
For current workflow creation, patching, and verification, read [../../90-workflow.md](../../90-workflow.md).
|
|
6
|
-
|
|
7
|
-
Reason: update behavior belongs inside the resource document. Route by target resource first, not by the generic word "update".
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# Legacy Redirect: Update Layout
|
|
2
|
-
|
|
3
|
-
This historical playbook is no longer a main entry point.
|
|
4
|
-
|
|
5
|
-
For current form layout creation and update work, read [../../40-layout.md](../../40-layout.md).
|
|
6
|
-
|
|
7
|
-
Reason: update behavior belongs inside the resource document. Route by target resource first, not by the generic word "update".
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# Legacy Redirect: Update Schema
|
|
2
|
-
|
|
3
|
-
This historical playbook is no longer a main entry point.
|
|
4
|
-
|
|
5
|
-
For current field creation and update work, read [../../30-schema-fields.md](../../30-schema-fields.md).
|
|
6
|
-
|
|
7
|
-
Reason: update behavior belongs inside the resource document. Route by target resource first, not by the generic word "update".
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# Legacy Redirect: Update Views
|
|
2
|
-
|
|
3
|
-
This historical playbook is no longer a main entry point.
|
|
4
|
-
|
|
5
|
-
For current view creation, filtering, query panels, and patching, read [../../50-views.md](../../50-views.md).
|
|
6
|
-
|
|
7
|
-
Reason: update behavior belongs inside the resource document. Route by target resource first, not by the generic word "update".
|