@josephyan/qingflow-cli 0.2.0-beta.75 → 0.2.0-beta.76
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/package.json +1 -1
- package/pyproject.toml +1 -1
- package/src/qingflow_mcp/cli/commands/task.py +0 -17
- package/src/qingflow_mcp/public_surface.py +0 -1
- package/src/qingflow_mcp/response_trim.py +0 -1
- package/src/qingflow_mcp/server_app_user.py +2 -2
- package/src/qingflow_mcp/tools/approval_tools.py +0 -16
- package/src/qingflow_mcp/tools/task_context_tools.py +0 -16
package/README.md
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
Install:
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
|
-
npm install @josephyan/qingflow-cli@0.2.0-beta.
|
|
6
|
+
npm install @josephyan/qingflow-cli@0.2.0-beta.76
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
Run:
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
npx -y -p @josephyan/qingflow-cli@0.2.0-beta.
|
|
12
|
+
npx -y -p @josephyan/qingflow-cli@0.2.0-beta.76 qingflow
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
Environment:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@josephyan/qingflow-cli",
|
|
3
|
-
"version": "0.2.0-beta.
|
|
3
|
+
"version": "0.2.0-beta.76",
|
|
4
4
|
"description": "Human-friendly Qingflow command line interface for auth, record operations, import, tasks, and stable builder flows.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
package/pyproject.toml
CHANGED
|
@@ -37,13 +37,6 @@ def register(subparsers: argparse._SubParsersAction[argparse.ArgumentParser]) ->
|
|
|
37
37
|
action.add_argument("--fields-file")
|
|
38
38
|
action.set_defaults(handler=_handle_action, format_hint="")
|
|
39
39
|
|
|
40
|
-
save_only = task_subparsers.add_parser("save-only", help="仅保存当前待办字段,不提交流程")
|
|
41
|
-
save_only.add_argument("--app-key", required=True)
|
|
42
|
-
save_only.add_argument("--record-id", required=True, type=int)
|
|
43
|
-
save_only.add_argument("--workflow-node-id", required=True, type=int)
|
|
44
|
-
save_only.add_argument("--fields-file", required=True)
|
|
45
|
-
save_only.set_defaults(handler=_handle_save_only, format_hint="")
|
|
46
|
-
|
|
47
40
|
log = task_subparsers.add_parser("log", help="读取流程日志")
|
|
48
41
|
log.add_argument("--app-key", required=True)
|
|
49
42
|
log.add_argument("--record-id", required=True, type=int)
|
|
@@ -87,16 +80,6 @@ def _handle_action(args: argparse.Namespace, context: CliContext) -> dict:
|
|
|
87
80
|
)
|
|
88
81
|
|
|
89
82
|
|
|
90
|
-
def _handle_save_only(args: argparse.Namespace, context: CliContext) -> dict:
|
|
91
|
-
return context.task.task_save_only(
|
|
92
|
-
profile=args.profile,
|
|
93
|
-
app_key=args.app_key,
|
|
94
|
-
record_id=args.record_id,
|
|
95
|
-
workflow_node_id=args.workflow_node_id,
|
|
96
|
-
fields=load_object_arg(args.fields_file, option_name="--fields-file") or {},
|
|
97
|
-
)
|
|
98
|
-
|
|
99
|
-
|
|
100
83
|
def _handle_log(args: argparse.Namespace, context: CliContext) -> dict:
|
|
101
84
|
return context.task.task_workflow_log_get(
|
|
102
85
|
profile=args.profile,
|
|
@@ -91,7 +91,6 @@ USER_PUBLIC_TOOL_SPECS: tuple[PublicToolSpec, ...] = (
|
|
|
91
91
|
PublicToolSpec(USER_DOMAIN, "record_code_block_run", ("record_code_block_run",), ("record", "code-block-run")),
|
|
92
92
|
PublicToolSpec(USER_DOMAIN, "task_list", ("task_list",), ("task", "list")),
|
|
93
93
|
PublicToolSpec(USER_DOMAIN, "task_get", ("task_get",), ("task", "get")),
|
|
94
|
-
PublicToolSpec(USER_DOMAIN, "task_save_only", ("task_save_only",), ("task", "save-only")),
|
|
95
94
|
PublicToolSpec(USER_DOMAIN, "task_action_execute", ("task_action_execute",), ("task", "action")),
|
|
96
95
|
PublicToolSpec(USER_DOMAIN, "task_associated_report_detail_get", ("task_associated_report_detail_get",), cli_public=False),
|
|
97
96
|
PublicToolSpec(USER_DOMAIN, "task_workflow_log_get", ("task_workflow_log_get",), ("task", "log")),
|
|
@@ -144,13 +144,13 @@ Use `record_code_block_run` when the user wants to execute a form code-block fie
|
|
|
144
144
|
|
|
145
145
|
## Task Workflow Path
|
|
146
146
|
|
|
147
|
-
`task_list -> task_get ->
|
|
147
|
+
`task_list -> task_get -> task_action_execute`
|
|
148
148
|
|
|
149
149
|
- Use `task_associated_report_detail_get` for associated view or report details.
|
|
150
150
|
- Use `task_workflow_log_get` for full workflow log history.
|
|
151
151
|
- Task actions operate on `app_key + record_id + workflow_node_id`, not `task_id`.
|
|
152
152
|
- Treat `task_action_execute` as the tool-level action enum surface; the current task's real actions are only the ones listed in `task_get.capabilities.available_actions`.
|
|
153
|
-
- Use `
|
|
153
|
+
- Use `task_action_execute(action="save_only", fields=...)` when the user wants to save editable field changes on the current node without advancing the workflow.
|
|
154
154
|
- `save_only` is exposed only when the backend current-node `editableQueIds` signal returns a non-empty result; MCP no longer infers `save_only` from local schema reconstruction.
|
|
155
155
|
|
|
156
156
|
## Time Handling
|
|
@@ -117,22 +117,6 @@ class ApprovalTools(ToolBase):
|
|
|
117
117
|
) -> dict[str, Any]:
|
|
118
118
|
return self.task_transfer(profile=profile, app_key=app_key, record_id=record_id, payload=payload or {}, fields=fields or {})
|
|
119
119
|
|
|
120
|
-
@mcp.tool(description=self._high_risk_tool_description(operation="save", target="workflow task fields without advancing the workflow"))
|
|
121
|
-
def task_save_only(
|
|
122
|
-
profile: str = DEFAULT_PROFILE,
|
|
123
|
-
app_key: str = "",
|
|
124
|
-
record_id: int = 0,
|
|
125
|
-
workflow_node_id: int = 0,
|
|
126
|
-
fields: dict[str, Any] | None = None,
|
|
127
|
-
) -> dict[str, Any]:
|
|
128
|
-
return self.task_save_only(
|
|
129
|
-
profile=profile,
|
|
130
|
-
app_key=app_key,
|
|
131
|
-
record_id=record_id,
|
|
132
|
-
workflow_node_id=workflow_node_id,
|
|
133
|
-
fields=fields or {},
|
|
134
|
-
)
|
|
135
|
-
|
|
136
120
|
@mcp.tool()
|
|
137
121
|
def task_transfer_candidates(
|
|
138
122
|
profile: str = DEFAULT_PROFILE,
|
|
@@ -104,22 +104,6 @@ class TaskContextTools(ToolBase):
|
|
|
104
104
|
fields=fields or {},
|
|
105
105
|
)
|
|
106
106
|
|
|
107
|
-
@mcp.tool()
|
|
108
|
-
def task_save_only(
|
|
109
|
-
profile: str = DEFAULT_PROFILE,
|
|
110
|
-
app_key: str = "",
|
|
111
|
-
record_id: int = 0,
|
|
112
|
-
workflow_node_id: int = 0,
|
|
113
|
-
fields: dict[str, Any] | None = None,
|
|
114
|
-
) -> dict[str, Any]:
|
|
115
|
-
return self.task_save_only(
|
|
116
|
-
profile=profile,
|
|
117
|
-
app_key=app_key,
|
|
118
|
-
record_id=record_id,
|
|
119
|
-
workflow_node_id=workflow_node_id,
|
|
120
|
-
fields=fields or {},
|
|
121
|
-
)
|
|
122
|
-
|
|
123
107
|
@mcp.tool()
|
|
124
108
|
def task_associated_report_detail_get(
|
|
125
109
|
profile: str = DEFAULT_PROFILE,
|