@qingflow-tech/qingflow-app-user-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -0
- package/docs/local-agent-install.md +332 -0
- package/entry_point.py +13 -0
- package/npm/bin/qingflow-app-user-mcp.mjs +7 -0
- package/npm/lib/runtime.mjs +339 -0
- package/npm/scripts/postinstall.mjs +16 -0
- package/package.json +34 -0
- package/pyproject.toml +67 -0
- package/qingflow-app-user-mcp +15 -0
- package/skills/qingflow-app-user/SKILL.md +79 -0
- package/skills/qingflow-app-user/agents/openai.yaml +4 -0
- package/skills/qingflow-app-user/references/data-gotchas.md +29 -0
- package/skills/qingflow-app-user/references/environments.md +63 -0
- package/skills/qingflow-app-user/references/record-patterns.md +48 -0
- package/skills/qingflow-app-user/references/workflow-usage.md +26 -0
- package/skills/qingflow-record-analysis/SKILL.md +158 -0
- package/skills/qingflow-record-analysis/agents/openai.yaml +4 -0
- package/skills/qingflow-record-analysis/references/analysis-gotchas.md +145 -0
- package/skills/qingflow-record-analysis/references/analysis-patterns.md +125 -0
- package/skills/qingflow-record-analysis/references/confidence-reporting.md +92 -0
- package/skills/qingflow-record-analysis/references/dsl-templates.md +93 -0
- package/skills/qingflow-record-delete/SKILL.md +29 -0
- package/skills/qingflow-record-import/SKILL.md +31 -0
- package/skills/qingflow-record-insert/SKILL.md +58 -0
- package/skills/qingflow-record-update/SKILL.md +42 -0
- package/skills/qingflow-task-ops/SKILL.md +123 -0
- package/skills/qingflow-task-ops/agents/openai.yaml +4 -0
- package/skills/qingflow-task-ops/references/environments.md +44 -0
- package/skills/qingflow-task-ops/references/workflow-usage.md +27 -0
- package/src/qingflow_mcp/__init__.py +5 -0
- package/src/qingflow_mcp/__main__.py +5 -0
- package/src/qingflow_mcp/backend_client.py +649 -0
- package/src/qingflow_mcp/builder_facade/__init__.py +3 -0
- package/src/qingflow_mcp/builder_facade/models.py +1836 -0
- package/src/qingflow_mcp/builder_facade/service.py +15044 -0
- package/src/qingflow_mcp/cli/__init__.py +1 -0
- package/src/qingflow_mcp/cli/commands/__init__.py +18 -0
- package/src/qingflow_mcp/cli/commands/app.py +40 -0
- package/src/qingflow_mcp/cli/commands/auth.py +44 -0
- package/src/qingflow_mcp/cli/commands/builder.py +538 -0
- package/src/qingflow_mcp/cli/commands/chart.py +18 -0
- package/src/qingflow_mcp/cli/commands/common.py +62 -0
- package/src/qingflow_mcp/cli/commands/imports.py +96 -0
- package/src/qingflow_mcp/cli/commands/portal.py +25 -0
- package/src/qingflow_mcp/cli/commands/record.py +331 -0
- package/src/qingflow_mcp/cli/commands/repo.py +80 -0
- package/src/qingflow_mcp/cli/commands/task.py +89 -0
- package/src/qingflow_mcp/cli/commands/view.py +18 -0
- package/src/qingflow_mcp/cli/commands/workspace.py +25 -0
- package/src/qingflow_mcp/cli/context.py +60 -0
- package/src/qingflow_mcp/cli/formatters.py +334 -0
- package/src/qingflow_mcp/cli/json_io.py +50 -0
- package/src/qingflow_mcp/cli/main.py +178 -0
- package/src/qingflow_mcp/config.py +513 -0
- package/src/qingflow_mcp/errors.py +66 -0
- package/src/qingflow_mcp/import_store.py +121 -0
- package/src/qingflow_mcp/json_types.py +18 -0
- package/src/qingflow_mcp/list_type_labels.py +76 -0
- package/src/qingflow_mcp/public_surface.py +233 -0
- package/src/qingflow_mcp/repository_store.py +71 -0
- package/src/qingflow_mcp/response_trim.py +470 -0
- package/src/qingflow_mcp/server.py +212 -0
- package/src/qingflow_mcp/server_app_builder.py +533 -0
- package/src/qingflow_mcp/server_app_user.py +362 -0
- package/src/qingflow_mcp/session_store.py +302 -0
- package/src/qingflow_mcp/solution/__init__.py +6 -0
- package/src/qingflow_mcp/solution/build_assembly_store.py +181 -0
- package/src/qingflow_mcp/solution/compiler/__init__.py +282 -0
- package/src/qingflow_mcp/solution/compiler/chart_compiler.py +96 -0
- package/src/qingflow_mcp/solution/compiler/form_compiler.py +495 -0
- package/src/qingflow_mcp/solution/compiler/icon_utils.py +187 -0
- package/src/qingflow_mcp/solution/compiler/navigation_compiler.py +57 -0
- package/src/qingflow_mcp/solution/compiler/package_compiler.py +19 -0
- package/src/qingflow_mcp/solution/compiler/portal_compiler.py +60 -0
- package/src/qingflow_mcp/solution/compiler/view_compiler.py +51 -0
- package/src/qingflow_mcp/solution/compiler/workflow_compiler.py +173 -0
- package/src/qingflow_mcp/solution/design_session.py +222 -0
- package/src/qingflow_mcp/solution/design_store.py +100 -0
- package/src/qingflow_mcp/solution/executor.py +2398 -0
- package/src/qingflow_mcp/solution/normalizer.py +23 -0
- package/src/qingflow_mcp/solution/requirements_builder.py +536 -0
- package/src/qingflow_mcp/solution/run_store.py +244 -0
- package/src/qingflow_mcp/solution/spec_models.py +855 -0
- package/src/qingflow_mcp/tools/__init__.py +1 -0
- package/src/qingflow_mcp/tools/ai_builder_tools.py +3419 -0
- package/src/qingflow_mcp/tools/app_tools.py +925 -0
- package/src/qingflow_mcp/tools/approval_tools.py +1062 -0
- package/src/qingflow_mcp/tools/auth_tools.py +875 -0
- package/src/qingflow_mcp/tools/base.py +388 -0
- package/src/qingflow_mcp/tools/code_block_tools.py +777 -0
- package/src/qingflow_mcp/tools/custom_button_tools.py +202 -0
- package/src/qingflow_mcp/tools/directory_tools.py +675 -0
- package/src/qingflow_mcp/tools/feedback_tools.py +238 -0
- package/src/qingflow_mcp/tools/file_tools.py +409 -0
- package/src/qingflow_mcp/tools/import_tools.py +2189 -0
- package/src/qingflow_mcp/tools/navigation_tools.py +210 -0
- package/src/qingflow_mcp/tools/package_tools.py +326 -0
- package/src/qingflow_mcp/tools/portal_tools.py +158 -0
- package/src/qingflow_mcp/tools/qingbi_report_tools.py +374 -0
- package/src/qingflow_mcp/tools/record_tools.py +14037 -0
- package/src/qingflow_mcp/tools/repository_dev_tools.py +552 -0
- package/src/qingflow_mcp/tools/resource_read_tools.py +421 -0
- package/src/qingflow_mcp/tools/role_tools.py +112 -0
- package/src/qingflow_mcp/tools/solution_tools.py +4054 -0
- package/src/qingflow_mcp/tools/task_context_tools.py +2228 -0
- package/src/qingflow_mcp/tools/task_tools.py +890 -0
- package/src/qingflow_mcp/tools/view_tools.py +335 -0
- package/src/qingflow_mcp/tools/workflow_tools.py +376 -0
- package/src/qingflow_mcp/tools/workspace_tools.py +125 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qingflow-record-delete
|
|
3
|
+
description: Delete Qingflow records safely after the MCP is already connected and authenticated.
|
|
4
|
+
metadata:
|
|
5
|
+
short-description: Qingflow record delete
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Qingflow Record Delete
|
|
9
|
+
|
|
10
|
+
## Default Path
|
|
11
|
+
|
|
12
|
+
`record_list / record_get -> record_delete`
|
|
13
|
+
|
|
14
|
+
## Core Tools
|
|
15
|
+
|
|
16
|
+
- `record_list`
|
|
17
|
+
- `record_get`
|
|
18
|
+
- `record_delete`
|
|
19
|
+
|
|
20
|
+
## Working Rules
|
|
21
|
+
|
|
22
|
+
1. Resolve the exact target `record_id` first
|
|
23
|
+
2. Prefer reading the current state before delete when the request is high risk
|
|
24
|
+
3. Call `record_delete` with `record_id` or `record_ids`
|
|
25
|
+
|
|
26
|
+
## Do Not
|
|
27
|
+
|
|
28
|
+
- Do not pass any `view_*` selector
|
|
29
|
+
- Do not infer the target record id from a vague title if `record_list` can disambiguate it
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qingflow-record-import
|
|
3
|
+
description: Explain and operate Qingflow file-based bulk import after the MCP is already connected and authenticated.
|
|
4
|
+
metadata:
|
|
5
|
+
short-description: Qingflow bulk import workflow and troubleshooting
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Qingflow Record Import
|
|
9
|
+
|
|
10
|
+
## Default Path
|
|
11
|
+
|
|
12
|
+
`app_get -> record_import_schema_get -> record_import_template_get -> record_import_verify -> (optional authorized repair) -> record_import_start -> record_import_status_get`
|
|
13
|
+
|
|
14
|
+
## Core Tools
|
|
15
|
+
|
|
16
|
+
- `app_get`
|
|
17
|
+
- `record_import_schema_get`
|
|
18
|
+
- `record_import_template_get`
|
|
19
|
+
- `record_import_verify`
|
|
20
|
+
- `record_import_repair_local`
|
|
21
|
+
- `record_import_start`
|
|
22
|
+
- `record_import_status_get`
|
|
23
|
+
|
|
24
|
+
## Working Rules
|
|
25
|
+
|
|
26
|
+
1. Inspect `app_get.data.import_capability` first
|
|
27
|
+
2. Read `record_import_schema_get` before touching the file when column meaning is unclear
|
|
28
|
+
3. Keep official headers unchanged
|
|
29
|
+
4. Verify before start
|
|
30
|
+
5. Only repair a file after explicit user authorization
|
|
31
|
+
6. Read back one imported sample after success
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qingflow-record-insert
|
|
3
|
+
description: Create Qingflow records with a schema-first insert workflow after the MCP is already connected and authenticated.
|
|
4
|
+
metadata:
|
|
5
|
+
short-description: Schema-first Qingflow record insert
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Qingflow Record Insert
|
|
9
|
+
|
|
10
|
+
## Default Path
|
|
11
|
+
|
|
12
|
+
`record_insert_schema_get -> (optional candidate lookup / confirmation) -> record_insert`
|
|
13
|
+
|
|
14
|
+
## Core Tools
|
|
15
|
+
|
|
16
|
+
- `record_insert_schema_get`
|
|
17
|
+
- `record_insert`
|
|
18
|
+
- `record_member_candidates`
|
|
19
|
+
- `record_department_candidates`
|
|
20
|
+
- `file_upload_local`
|
|
21
|
+
|
|
22
|
+
## Working Rules
|
|
23
|
+
|
|
24
|
+
1. Start with `record_insert_schema_get`
|
|
25
|
+
2. Read `required_fields`, `optional_fields`, `runtime_linked_required_fields`, and `payload_template`
|
|
26
|
+
3. Inside every field bucket, read field-level `linkage` first when present; it is the canonical static hint for linked visibility, reference-driven auto fill, or formula-driven fields
|
|
27
|
+
4. Inside `optional_fields`, pay special attention to any field with `may_become_required=true`; these are writable fields that can become required when linked visibility or option-driven rules activate
|
|
28
|
+
5. Build `fields` from the manually-supplied required/optional fields in that schema
|
|
29
|
+
6. Treat `runtime_linked_required_fields` as required-but-not-directly-writable runtime/upstream dependencies, not as fields to hand-fill blindly
|
|
30
|
+
7. For `linkage.kind=logic_visibility`, read `sources` as upstream trigger fields and treat `role=manual_input_after_activation` as "fill this only after the upstream condition is satisfied"
|
|
31
|
+
8. For `linkage.kind=reference_fill`, prefer filling the source field first; treat target fields with `role=auto_fill_preferred` or `auto_fill_only` as reference-driven outputs rather than blind manual inputs
|
|
32
|
+
9. For `linkage.kind=formula_fill`, treat the field as formula/default-auto-fill driven unless the user explicitly asks to override it and the field is still writable
|
|
33
|
+
10. If insert succeeds and readback shape matters, prefer `record_get(..., output_profile="normalized")` or `record_list(..., output_profile="normalized")`
|
|
34
|
+
11. Keep subtable payloads under the parent field as a row array
|
|
35
|
+
12. Member / department / relation fields may accept natural strings directly
|
|
36
|
+
13. If the write returns `status="needs_confirmation"`, stop and surface the candidates
|
|
37
|
+
14. Retry with explicit ids / objects only after the user confirms
|
|
38
|
+
15. Keep `verify_write=true` for production inserts
|
|
39
|
+
|
|
40
|
+
## Field Notes
|
|
41
|
+
|
|
42
|
+
- `searchable_fields` on relation fields defines the backend-native searchable columns
|
|
43
|
+
- `accepts_natural_input=true` means the field may accept a natural string before explicit id fallback
|
|
44
|
+
- `may_become_required=true` means the field is writable now, but may turn required after linked visibility or option rules activate
|
|
45
|
+
- `linkage.kind=logic_visibility` means the field is statically tied to linked visibility or option-driven rules
|
|
46
|
+
- `linkage.kind=reference_fill` means the field participates in reference-based auto fill or default matching logic
|
|
47
|
+
- `linkage.kind=formula_fill` means the field usually comes from formula/default auto-fill logic
|
|
48
|
+
- `linkage.sources` lists the upstream field titles that influence the current field
|
|
49
|
+
- `linkage.affects_fields` lists downstream field titles that may change when this field changes
|
|
50
|
+
- `linkage.role=auto_fill_only` means "normally do not hand-fill this unless the product explicitly requires it"
|
|
51
|
+
- `requires_upload=true` means upload the file first, then write the returned value
|
|
52
|
+
|
|
53
|
+
## Do Not
|
|
54
|
+
|
|
55
|
+
- Do not skip `record_insert_schema_get`
|
|
56
|
+
- Do not invent missing required fields
|
|
57
|
+
- Do not flatten subtable leaf fields to the top level
|
|
58
|
+
- Do not silently guess member / department / relation ids
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qingflow-record-update
|
|
3
|
+
description: Update Qingflow records with a schema-first record-specific workflow after the MCP is already connected and authenticated.
|
|
4
|
+
metadata:
|
|
5
|
+
short-description: Schema-first Qingflow record update
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Qingflow Record Update
|
|
9
|
+
|
|
10
|
+
## Default Path
|
|
11
|
+
|
|
12
|
+
`record_update_schema_get -> record_update`
|
|
13
|
+
|
|
14
|
+
## Core Tools
|
|
15
|
+
|
|
16
|
+
- `record_update_schema_get`
|
|
17
|
+
- `record_update`
|
|
18
|
+
- `record_get`
|
|
19
|
+
- `record_list`
|
|
20
|
+
|
|
21
|
+
## Working Rules
|
|
22
|
+
|
|
23
|
+
1. Start with `record_update_schema_get(app_key, record_id)`
|
|
24
|
+
2. Use only `writable_fields` and `payload_template` from that response
|
|
25
|
+
3. Read field-level `linkage` before composing updates; it is the static hint for whether a field is a linked source, linked target, reference-driven auto fill field, or formula-driven field
|
|
26
|
+
4. Build `fields` as a field-title keyed map
|
|
27
|
+
5. Build `fields` only from that returned field set; MCP will choose the first matched accessible view that can execute the payload
|
|
28
|
+
6. If a field has `linkage.affects_fields`, treat it as a source field; changing it may also change how other fields are interpreted or auto-filled
|
|
29
|
+
7. If a field has `linkage.sources`, treat those titles as upstream dependencies that explain why the field matters or why its validation can change
|
|
30
|
+
8. For `linkage.kind=reference_fill`, prefer updating the source reference field first and treat `role=auto_fill_preferred` or `auto_fill_only` targets as outputs of that reference relationship
|
|
31
|
+
9. For `linkage.kind=formula_fill`, treat the field as formula/default-auto-fill driven unless the field is still clearly writable and the user explicitly wants to override it
|
|
32
|
+
10. Keep `verify_write=true` for production updates
|
|
33
|
+
11. If the write returns `status="needs_confirmation"`, stop and surface the candidates
|
|
34
|
+
12. Do not assume any arbitrary combination of writable fields will succeed; one single matched accessible view still has to cover the payload
|
|
35
|
+
13. Do not look for any extra context bucket in update schema; lookup behavior stays inline on the field definitions themselves
|
|
36
|
+
|
|
37
|
+
## Do Not
|
|
38
|
+
|
|
39
|
+
- Do not pass any `view_*` selector
|
|
40
|
+
- Do not update fields missing from `writable_fields`
|
|
41
|
+
- Do not resolve lookup fields against a guessed record context
|
|
42
|
+
- Do not ignore `linkage.affects_fields` when changing source-like fields on complex forms
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qingflow-task-ops
|
|
3
|
+
description: Use Qingflow todo discovery, workflow task context, associated approval context, workflow logs, and unified task actions after the MCP is already connected and authenticated. Do not use this skill for record CRUD or final statistical analysis.
|
|
4
|
+
metadata:
|
|
5
|
+
short-description: Qingflow task workflow context and actions
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Qingflow Task Ops
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
This skill is for task workflow operations only.
|
|
13
|
+
Assumes MCP is connected, authenticated, and on the correct workspace.
|
|
14
|
+
|
|
15
|
+
## Default Paths
|
|
16
|
+
|
|
17
|
+
Use exactly one of these default paths:
|
|
18
|
+
|
|
19
|
+
1. Find target todos
|
|
20
|
+
`task_list`
|
|
21
|
+
|
|
22
|
+
2. Read one task context
|
|
23
|
+
`task_list -> exact target -> task_get`
|
|
24
|
+
|
|
25
|
+
3. Read associated approval context
|
|
26
|
+
`task_get -> task_associated_report_detail_get` or `task_workflow_log_get`
|
|
27
|
+
|
|
28
|
+
4. Execute workflow action
|
|
29
|
+
`task_list -> exact target -> task_get -> task_action_execute`
|
|
30
|
+
|
|
31
|
+
## Core Tools
|
|
32
|
+
|
|
33
|
+
- `task_list`
|
|
34
|
+
- `task_get`
|
|
35
|
+
- `task_action_execute`
|
|
36
|
+
- `task_associated_report_detail_get`
|
|
37
|
+
- `task_workflow_log_get`
|
|
38
|
+
|
|
39
|
+
## Supporting Tools
|
|
40
|
+
|
|
41
|
+
- `app_list`
|
|
42
|
+
- `app_search`
|
|
43
|
+
|
|
44
|
+
## Standard Operating Order
|
|
45
|
+
|
|
46
|
+
1. Ensure auth exists
|
|
47
|
+
2. Ensure workspace is selected
|
|
48
|
+
3. Discover the exact target with `task_list`
|
|
49
|
+
4. Read node context with `task_get`
|
|
50
|
+
5. Before giving any approval recommendation, read `task_workflow_log_get`
|
|
51
|
+
6. If `task_get` returns any `associated_reports`, read every visible report through `task_associated_report_detail_get`
|
|
52
|
+
7. Give an approval recommendation only after reviewing the node context, workflow log, and associated report details
|
|
53
|
+
8. Wait for explicit user confirmation before `task_action_execute`
|
|
54
|
+
9. Execute through `task_action_execute`
|
|
55
|
+
10. After actions, report the exact `app_key`, `record_id`, `workflow_node_id`, and executed action
|
|
56
|
+
|
|
57
|
+
## Task-Center Rules
|
|
58
|
+
|
|
59
|
+
- Use `task_list` for flat browsing
|
|
60
|
+
- `task_box` must be one of:
|
|
61
|
+
- `todo`
|
|
62
|
+
- `initiated`
|
|
63
|
+
- `cc`
|
|
64
|
+
- `done`
|
|
65
|
+
- `flow_status` must be one of:
|
|
66
|
+
- `all`
|
|
67
|
+
- `in_progress`
|
|
68
|
+
- `approved`
|
|
69
|
+
- `rejected`
|
|
70
|
+
- `pending_fix`
|
|
71
|
+
- `urged`
|
|
72
|
+
- `overdue`
|
|
73
|
+
- `due_soon`
|
|
74
|
+
- `unread`
|
|
75
|
+
- `ended`
|
|
76
|
+
- `task_list` is the only public task discovery path in this MCP surface
|
|
77
|
+
- Treat `task_id` as a locator only; the action primary key is `app_key + record_id + workflow_node_id`
|
|
78
|
+
- Default box usage:
|
|
79
|
+
- `todo`: `task_list -> task_get -> task_workflow_log_get / task_associated_report_detail_get -> recommendation -> explicit user confirmation -> task_action_execute`
|
|
80
|
+
- `initiated`: `task_list -> record_get`
|
|
81
|
+
- `done`: `task_list -> record_get`
|
|
82
|
+
- `cc`: `task_list -> record_get`
|
|
83
|
+
- Treat `initiated`, `done`, and `cc` primarily as list-plus-record-detail flows, not task action flows
|
|
84
|
+
|
|
85
|
+
## Workflow Usage Actions
|
|
86
|
+
|
|
87
|
+
- `task_get.capabilities.available_actions` is the source of truth for v1 executable actions
|
|
88
|
+
- Current public actions are:
|
|
89
|
+
- `approve`
|
|
90
|
+
- `reject`
|
|
91
|
+
- `rollback`
|
|
92
|
+
- `transfer`
|
|
93
|
+
- `urge`
|
|
94
|
+
- Before any approve/reject/rollback/transfer recommendation, always review `task_workflow_log_get` when `task_get.visibility.audit_record_visible=true`
|
|
95
|
+
- If `task_get` returns visible `associated_reports`, review each one with `task_associated_report_detail_get`; do not rely on report summary alone
|
|
96
|
+
- Do not give an approval recommendation based only on `task_get`
|
|
97
|
+
- Do not execute `task_action_execute` until the user explicitly confirms the chosen action
|
|
98
|
+
- Avoid actions on ambiguous tasks or records
|
|
99
|
+
- Summarize the final action and the exact `app_key / record_id / workflow_node_id`
|
|
100
|
+
- `task_action_execute` now distinguishes action execution from workflow continuation. Read `verification.runtime_continuation_verified` before claiming the workflow actually moved on.
|
|
101
|
+
- If `task_action_execute` returns `partial_success` with `WORKFLOW_CONTINUATION_UNVERIFIED`, report the action as sent but the downstream continuation as unverified.
|
|
102
|
+
- If `task_action_execute` returns `TASK_CONTEXT_VISIBILITY_UNVERIFIED` after a `46001`-style context loss, do not claim the task was already processed unless the workflow log or record state proves it.
|
|
103
|
+
|
|
104
|
+
## Feedback Escalation
|
|
105
|
+
|
|
106
|
+
- If task capabilities, associated report detail, workflow log visibility, or action support still cannot satisfy the user's goal after reasonable use of this skill, summarize the exact gap in plain language.
|
|
107
|
+
- Ask whether the user wants you to submit product feedback.
|
|
108
|
+
- Only after explicit user confirmation, call `feedback_submit`.
|
|
109
|
+
|
|
110
|
+
## Response Interpretation
|
|
111
|
+
|
|
112
|
+
- `task_list` returns normalized todo rows and is the only default discovery path
|
|
113
|
+
- `task_get` returns node context summary, not full historical report data
|
|
114
|
+
- `task_associated_report_detail_get` may return either:
|
|
115
|
+
- `result_type=view_list`
|
|
116
|
+
- `result_type=chart_data`
|
|
117
|
+
- `task_workflow_log_get` returns workflow log detail only when the node grants log visibility
|
|
118
|
+
- Treat `request_route` as the source of truth for live route debugging
|
|
119
|
+
- If only part of the requested work is completed, explicitly disclose which parts are done and which are not
|
|
120
|
+
|
|
121
|
+
## Resources
|
|
122
|
+
|
|
123
|
+
- Workflow and task usage actions: [references/workflow-usage.md](references/workflow-usage.md)
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Qingflow Task Ops"
|
|
3
|
+
short_description: "Use Qingflow task center, comments, directory, and workflow actions"
|
|
4
|
+
default_prompt: "Use $qingflow-task-ops for Qingflow task-center browsing, workload facets, comments, directory lookup, and workflow usage actions. Locate the exact target first, then run the smallest explicit task or comment action."
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Environment Switching
|
|
2
|
+
|
|
3
|
+
Use this reference before any workflow usage action, comment, or task-center operation that might affect live work.
|
|
4
|
+
|
|
5
|
+
## Step 1: Resolve the active environment
|
|
6
|
+
|
|
7
|
+
Decide explicitly whether the task targets:
|
|
8
|
+
|
|
9
|
+
- `test`: demo, mock data, smoke usage validation, training scenarios
|
|
10
|
+
- `prod`: real operational tasks, comments, and workflow actions
|
|
11
|
+
|
|
12
|
+
If the user did not specify an environment, default to `prod`.
|
|
13
|
+
|
|
14
|
+
## Test Environment
|
|
15
|
+
|
|
16
|
+
Use test for:
|
|
17
|
+
|
|
18
|
+
- workflow walkthroughs
|
|
19
|
+
- user acceptance demos
|
|
20
|
+
- comment or transfer rehearsals
|
|
21
|
+
|
|
22
|
+
## Production Environment
|
|
23
|
+
|
|
24
|
+
Use production for:
|
|
25
|
+
|
|
26
|
+
- live task-center operations
|
|
27
|
+
- live comments on real business records
|
|
28
|
+
- approve / reject / rollback / transfer / urge on real work
|
|
29
|
+
|
|
30
|
+
Production guardrails:
|
|
31
|
+
|
|
32
|
+
- never assume a task id, record id, or workflow node id
|
|
33
|
+
- find the exact target first
|
|
34
|
+
- if the task can be answered read-only, do not act
|
|
35
|
+
|
|
36
|
+
## Reporting Rule
|
|
37
|
+
|
|
38
|
+
For task ops, always report:
|
|
39
|
+
|
|
40
|
+
- active environment
|
|
41
|
+
- target app or task box
|
|
42
|
+
- operation type: read, comment, approve, reject, rollback, transfer, urge, or mark_read
|
|
43
|
+
- affected task ids or record ids
|
|
44
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Workflow and Task Usage Actions
|
|
2
|
+
|
|
3
|
+
Use these when the user is operating inside an existing process, not redesigning it.
|
|
4
|
+
|
|
5
|
+
Examples:
|
|
6
|
+
|
|
7
|
+
- add a comment to a record
|
|
8
|
+
- approve or reject a workflow task
|
|
9
|
+
- transfer a task
|
|
10
|
+
- roll back a task
|
|
11
|
+
- list todo, initiated, done, or cc tasks
|
|
12
|
+
- inspect workload by worksheet or workflow node
|
|
13
|
+
- urge a pending task
|
|
14
|
+
|
|
15
|
+
Rules:
|
|
16
|
+
|
|
17
|
+
- if the user starts from inbox, todo, workload, cc, or bottleneck language, use `task_*` first
|
|
18
|
+
- use `task_summary` for headline counts
|
|
19
|
+
- use `task_list` for flat browsing
|
|
20
|
+
- use `task_facets` when worksheet or workflow-node buckets matter
|
|
21
|
+
- treat task counts as task-center counts, not record counts
|
|
22
|
+
- switch to `record_get` only after locating the exact business record behind a task
|
|
23
|
+
- identify the exact target first
|
|
24
|
+
- for approve or reject, identify the exact `workflow_node_id` first; prefer task-center results or current audit info, then use `task_approve` or `task_reject`
|
|
25
|
+
- avoid usage-side workflow actions on ambiguous records
|
|
26
|
+
- summarize the final action and target task ids or record ids
|
|
27
|
+
|