@josephyan/qingflow-cli 0.2.0-beta.71 → 0.2.0-beta.73

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 CHANGED
@@ -3,13 +3,13 @@
3
3
  Install:
4
4
 
5
5
  ```bash
6
- npm install @josephyan/qingflow-cli@0.2.0-beta.71
6
+ npm install @josephyan/qingflow-cli@0.2.0-beta.73
7
7
  ```
8
8
 
9
9
  Run:
10
10
 
11
11
  ```bash
12
- npx -y -p @josephyan/qingflow-cli@0.2.0-beta.71 qingflow
12
+ npx -y -p @josephyan/qingflow-cli@0.2.0-beta.73 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.71",
3
+ "version": "0.2.0-beta.73",
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "qingflow-mcp"
7
- version = "0.2.0b71"
7
+ version = "0.2.0b73"
8
8
  description = "User-authenticated MCP server for Qingflow"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -4,6 +4,7 @@ from dataclasses import dataclass
4
4
  from threading import Event
5
5
  from time import sleep
6
6
  from typing import Any
7
+ from urllib.parse import urlsplit, urlunsplit
7
8
  from uuid import uuid4
8
9
 
9
10
  import httpx
@@ -187,7 +187,8 @@ class FlowConditionRulePatch(StrictModel):
187
187
  return value
188
188
  payload = dict(value)
189
189
  if "value" in payload and "values" not in payload:
190
- payload["values"] = [payload.pop("value")]
190
+ raw_value = payload.pop("value")
191
+ payload["values"] = list(raw_value) if isinstance(raw_value, list) else [raw_value]
191
192
  raw_operator = payload.get("operator", payload.get("op"))
192
193
  if isinstance(raw_operator, str):
193
194
  normalized = raw_operator.strip().lower()
@@ -238,7 +239,8 @@ class ViewFilterRulePatch(StrictModel):
238
239
  return value
239
240
  payload = dict(value)
240
241
  if "value" in payload and "values" not in payload:
241
- payload["values"] = [payload.pop("value")]
242
+ raw_value = payload.pop("value")
243
+ payload["values"] = list(raw_value) if isinstance(raw_value, list) else [raw_value]
242
244
  raw_operator = payload.get("operator", payload.get("op"))
243
245
  if isinstance(raw_operator, str):
244
246
  normalized = raw_operator.strip().lower()
@@ -1092,7 +1094,8 @@ class ChartFilterRulePatch(StrictModel):
1092
1094
  return value
1093
1095
  payload = dict(value)
1094
1096
  if "value" in payload and "values" not in payload:
1095
- payload["values"] = [payload.pop("value")]
1097
+ raw_value = payload.pop("value")
1098
+ payload["values"] = list(raw_value) if isinstance(raw_value, list) else [raw_value]
1096
1099
  raw_operator = payload.get("operator", payload.get("op"))
1097
1100
  if isinstance(raw_operator, str):
1098
1101
  normalized = raw_operator.strip().lower()
@@ -1338,7 +1341,7 @@ class PortalApplyRequest(StrictModel):
1338
1341
  FieldPatch.model_rebuild()
1339
1342
 
1340
1343
 
1341
- class AppReadSummaryResponse(StrictModel):
1344
+ class AppGetResponse(StrictModel):
1342
1345
  app_key: str
1343
1346
  title: str | None = None
1344
1347
  app_icon: str | None = None
@@ -1349,39 +1352,48 @@ class AppReadSummaryResponse(StrictModel):
1349
1352
  view_count: int = 0
1350
1353
  workflow_enabled: bool = False
1351
1354
  verification_hints: list[str] = Field(default_factory=list)
1355
+ editability: dict[str, bool | None] = Field(default_factory=dict)
1352
1356
 
1353
1357
 
1354
- class AppFieldsReadResponse(StrictModel):
1358
+ class AppGetFieldsResponse(StrictModel):
1355
1359
  app_key: str
1356
1360
  fields: list[dict[str, Any]] = Field(default_factory=list)
1357
1361
  field_count: int = 0
1358
1362
 
1359
1363
 
1360
- class AppLayoutReadResponse(StrictModel):
1364
+ class AppGetLayoutResponse(StrictModel):
1361
1365
  app_key: str
1362
1366
  sections: list[dict[str, Any]] = Field(default_factory=list)
1363
1367
  unplaced_fields: list[str] = Field(default_factory=list)
1364
1368
  layout_mode_detected: str = "empty"
1365
1369
 
1366
1370
 
1367
- class AppViewsReadResponse(StrictModel):
1371
+ class AppGetViewsResponse(StrictModel):
1368
1372
  app_key: str
1369
1373
  views: list[dict[str, Any]] = Field(default_factory=list)
1370
1374
 
1371
1375
 
1372
- class AppFlowReadResponse(StrictModel):
1376
+ class AppGetFlowResponse(StrictModel):
1373
1377
  app_key: str
1374
1378
  enabled: bool = False
1375
1379
  nodes: list[dict[str, Any]] = Field(default_factory=list)
1376
1380
  transitions: list[dict[str, Any]] = Field(default_factory=list)
1377
1381
 
1378
1382
 
1379
- class AppChartsReadResponse(StrictModel):
1383
+ class AppGetChartsResponse(StrictModel):
1380
1384
  app_key: str
1381
1385
  charts: list[dict[str, Any]] = Field(default_factory=list)
1382
1386
  chart_count: int = 0
1383
1387
 
1384
1388
 
1389
+ AppReadSummaryResponse = AppGetResponse
1390
+ AppFieldsReadResponse = AppGetFieldsResponse
1391
+ AppLayoutReadResponse = AppGetLayoutResponse
1392
+ AppViewsReadResponse = AppGetViewsResponse
1393
+ AppFlowReadResponse = AppGetFlowResponse
1394
+ AppChartsReadResponse = AppGetChartsResponse
1395
+
1396
+
1385
1397
  class PortalListResponse(StrictModel):
1386
1398
  items: list[dict[str, Any]] = Field(default_factory=list)
1387
1399
  total: int = 0
@@ -1415,7 +1427,7 @@ class PortalGetResponse(StrictModel):
1415
1427
 
1416
1428
 
1417
1429
  class ViewGetResponse(StrictModel):
1418
- viewgraph_key: str
1430
+ view_key: str
1419
1431
  base_info: dict[str, Any] = Field(default_factory=dict)
1420
1432
  config: dict[str, Any] = Field(default_factory=dict)
1421
1433
  questions: list[dict[str, Any]] = Field(default_factory=list)
@@ -1426,7 +1438,6 @@ class ChartGetResponse(StrictModel):
1426
1438
  chart_id: str
1427
1439
  base: dict[str, Any] = Field(default_factory=dict)
1428
1440
  config: dict[str, Any] = Field(default_factory=dict)
1429
- data: dict[str, Any] = Field(default_factory=dict)
1430
1441
 
1431
1442
 
1432
1443
  class SchemaPlanRequest(StrictModel):