@qingflow-tech/qingflow-app-builder-mcp 1.0.32 → 1.0.33
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/main.py +43 -0
- package/src/qingflow_mcp/version.py +40 -0
package/README.md
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
Install:
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
|
-
npm install @qingflow-tech/qingflow-app-builder-mcp@1.0.
|
|
6
|
+
npm install @qingflow-tech/qingflow-app-builder-mcp@1.0.33
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
Run:
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
npx -y -p @qingflow-tech/qingflow-app-builder-mcp@1.0.
|
|
12
|
+
npx -y -p @qingflow-tech/qingflow-app-builder-mcp@1.0.33 qingflow-app-builder-mcp
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
Environment:
|
package/package.json
CHANGED
package/pyproject.toml
CHANGED
|
@@ -9,6 +9,7 @@ from ..errors import QingflowApiError, backend_code_value_int, message_looks_lik
|
|
|
9
9
|
from ..public_surface import cli_public_tool_spec_from_namespace
|
|
10
10
|
from ..response_trim import resolve_cli_tool_name, trim_error_response, trim_public_response
|
|
11
11
|
from ..tools.ai_builder_tools import _attach_builder_apply_envelope
|
|
12
|
+
from ..version import get_cli_version
|
|
12
13
|
from .context import CliContext, build_cli_context
|
|
13
14
|
from .formatters import emit_json_result, emit_text_result
|
|
14
15
|
from .commands import register_all_commands
|
|
@@ -34,7 +35,10 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
34
35
|
parser = _QingflowArgumentParser(prog="qingflow", description="Qingflow CLI")
|
|
35
36
|
parser.add_argument("--profile", default="default", help="会话 profile,默认 default")
|
|
36
37
|
parser.add_argument("--json", action="store_true", help="输出 JSON")
|
|
38
|
+
parser.add_argument("--version", action="store_true", help="输出 Qingflow CLI 版本")
|
|
37
39
|
subparsers = parser.add_subparsers(dest="command", required=True)
|
|
40
|
+
version_parser = subparsers.add_parser("version", help="输出 Qingflow CLI 版本")
|
|
41
|
+
version_parser.set_defaults(handler=_handle_version, format_hint="version")
|
|
38
42
|
register_all_commands(subparsers)
|
|
39
43
|
return parser
|
|
40
44
|
|
|
@@ -54,6 +58,8 @@ def run(
|
|
|
54
58
|
err = stderr or sys.stderr
|
|
55
59
|
parser = build_parser()
|
|
56
60
|
normalized_argv = _normalize_global_args(list(argv) if argv is not None else sys.argv[1:])
|
|
61
|
+
if "--version" in normalized_argv:
|
|
62
|
+
return _emit_version(json_mode=_should_force_json_output_argv_for_version(normalized_argv), stdout=out)
|
|
57
63
|
try:
|
|
58
64
|
args = parser.parse_args(normalized_argv)
|
|
59
65
|
except _CliArgumentError as exc:
|
|
@@ -76,6 +82,8 @@ def run(
|
|
|
76
82
|
setattr(args, "_stdin", sys.stdin)
|
|
77
83
|
setattr(args, "_stdout_stream", out)
|
|
78
84
|
setattr(args, "_stderr_stream", err)
|
|
85
|
+
if getattr(args, "command", "") == "version":
|
|
86
|
+
return _emit_version(json_mode=bool(args.json), stdout=out)
|
|
79
87
|
handler = getattr(args, "handler", None)
|
|
80
88
|
if handler is None:
|
|
81
89
|
parser.print_help(out)
|
|
@@ -111,6 +119,37 @@ def run(
|
|
|
111
119
|
return exit_code
|
|
112
120
|
|
|
113
121
|
|
|
122
|
+
def _handle_version(_args: argparse.Namespace, _context: CliContext) -> dict[str, Any]:
|
|
123
|
+
version = get_cli_version()
|
|
124
|
+
return {
|
|
125
|
+
"ok": True,
|
|
126
|
+
"status": "success",
|
|
127
|
+
"version": version,
|
|
128
|
+
"package": "@qingflow-tech/qingflow-cli",
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def _emit_version(*, json_mode: bool, stdout: TextIO) -> int:
|
|
133
|
+
version = get_cli_version()
|
|
134
|
+
if json_mode:
|
|
135
|
+
emit_json_result(
|
|
136
|
+
{
|
|
137
|
+
"ok": True,
|
|
138
|
+
"status": "success",
|
|
139
|
+
"version": version,
|
|
140
|
+
"package": "@qingflow-tech/qingflow-cli",
|
|
141
|
+
},
|
|
142
|
+
stream=stdout,
|
|
143
|
+
)
|
|
144
|
+
else:
|
|
145
|
+
stdout.write(f"{version}\n")
|
|
146
|
+
return 0
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def _should_force_json_output_argv_for_version(argv: list[str]) -> bool:
|
|
150
|
+
return "--json" in argv
|
|
151
|
+
|
|
152
|
+
|
|
114
153
|
def _normalize_global_args(argv: list[str]) -> list[str]:
|
|
115
154
|
global_args: list[str] = []
|
|
116
155
|
remaining: list[str] = []
|
|
@@ -121,6 +160,10 @@ def _normalize_global_args(argv: list[str]) -> list[str]:
|
|
|
121
160
|
global_args.append(token)
|
|
122
161
|
index += 1
|
|
123
162
|
continue
|
|
163
|
+
if token == "--version":
|
|
164
|
+
global_args.append(token)
|
|
165
|
+
index += 1
|
|
166
|
+
continue
|
|
124
167
|
if token == "--profile":
|
|
125
168
|
global_args.append(token)
|
|
126
169
|
if index + 1 >= len(argv):
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
from importlib import metadata
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def get_cli_version() -> str:
|
|
9
|
+
package_json_version = _find_package_json_version()
|
|
10
|
+
if package_json_version:
|
|
11
|
+
return package_json_version
|
|
12
|
+
try:
|
|
13
|
+
return metadata.version("qingflow-mcp")
|
|
14
|
+
except metadata.PackageNotFoundError:
|
|
15
|
+
return "0+local"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _find_package_json_version() -> str | None:
|
|
19
|
+
current = Path(__file__).resolve()
|
|
20
|
+
for parent in current.parents:
|
|
21
|
+
package_json = parent / "package.json"
|
|
22
|
+
if not package_json.exists():
|
|
23
|
+
continue
|
|
24
|
+
try:
|
|
25
|
+
payload = json.loads(package_json.read_text(encoding="utf-8"))
|
|
26
|
+
except (OSError, json.JSONDecodeError):
|
|
27
|
+
continue
|
|
28
|
+
name = str(payload.get("name") or "")
|
|
29
|
+
version = str(payload.get("version") or "")
|
|
30
|
+
if version and name in {
|
|
31
|
+
"qingflow-mcp-workspace",
|
|
32
|
+
"@qingflow-tech/qingflow-cli",
|
|
33
|
+
"@qingflow-tech/qingflow-app-user-mcp",
|
|
34
|
+
"@qingflow-tech/qingflow-app-builder-mcp",
|
|
35
|
+
"@josephyan/qingflow-cli",
|
|
36
|
+
"@josephyan/qingflow-app-user-mcp",
|
|
37
|
+
"@josephyan/qingflow-app-builder-mcp",
|
|
38
|
+
}:
|
|
39
|
+
return version
|
|
40
|
+
return None
|