@qingflow-tech/qingflow-app-user-mcp 1.0.8 → 1.0.10

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 @qingflow-tech/qingflow-app-user-mcp@1.0.8
6
+ npm install @qingflow-tech/qingflow-app-user-mcp@1.0.10
7
7
  ```
8
8
 
9
9
  Run:
10
10
 
11
11
  ```bash
12
- npx -y -p @qingflow-tech/qingflow-app-user-mcp@1.0.8 qingflow-app-user-mcp
12
+ npx -y -p @qingflow-tech/qingflow-app-user-mcp@1.0.10 qingflow-app-user-mcp
13
13
  ```
14
14
 
15
15
  Environment:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qingflow-tech/qingflow-app-user-mcp",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "Operational end-user MCP for Qingflow records, tasks, comments, and directory workflows.",
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 = "1.0.8"
7
+ version = "1.0.10"
8
8
  description = "User-authenticated MCP server for Qingflow"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -35,6 +35,8 @@ metadata:
35
35
  13. Do not look for any extra context bucket in update schema; lookup behavior stays inline on the field definitions themselves
36
36
  14. When update context feels unstable, trust `record_update_schema_get`'s route-aware matched-view result over guessed `view_id` or remembered UI scope
37
37
  15. If single-record detail/readback matters, prefer `record_get` after the write and read top-level `fields[]`, `media_assets.items[].local_path`, `file_assets.items[].local_path`, `file_assets.items[].extraction.text_path`, and `semantic_context`; `record_get` follows the frontend storage cookie redirect path for Qingflow attachments, so prefer local paths over remote URLs; use `record_list(..., output_profile="normalized")` only for batch row-shaped normalized readback
38
+ 16. For batch updates, read top-level `mode`, `dry_run`, `total`, `succeeded`, `failed`, `needs_confirmation`, `updated_record_ids`, `write_executed`, `safe_to_retry`, `verification_status`, and `items[].row_number/status/record_id`
39
+ 17. If `write_executed=true`, do not blindly retry the whole batch; use `items[]` and `updated_record_ids` to decide whether only failed rows need repair
38
40
 
39
41
  ## Do Not
40
42
 
@@ -142,10 +142,34 @@ class PublicButtonPlacement(str, Enum):
142
142
 
143
143
  class PublicChartType(str, Enum):
144
144
  target = "target"
145
+ indicator = "indicator"
146
+ summary = "summary"
145
147
  pie = "pie"
146
148
  bar = "bar"
149
+ columnar = "columnar"
147
150
  line = "line"
148
151
  table = "table"
152
+ detail = "detail"
153
+ area = "area"
154
+ stacked_area = "stacked_area"
155
+ pct_stack_area = "pct_stack_area"
156
+ funnel = "funnel"
157
+ waterfall = "waterfall"
158
+ gauge = "gauge"
159
+ heatmap = "heatmap"
160
+ histogram = "histogram"
161
+ treemap = "treemap"
162
+ radar = "radar"
163
+ stacked_bar = "stacked_bar"
164
+ pct_stack_bar = "pct_stack_bar"
165
+ stacked_column = "stacked_column"
166
+ pct_stack_col = "pct_stack_col"
167
+ scatter = "scatter"
168
+ ring = "ring"
169
+ rose = "rose"
170
+ dualaxes = "dualaxes"
171
+ map = "map"
172
+ timeline = "timeline"
149
173
 
150
174
 
151
175
  class LayoutApplyMode(str, Enum):
@@ -1576,8 +1600,8 @@ class AssociatedResourcesApplyRequest(StrictModel):
1576
1600
  app_key: str
1577
1601
  upsert_resources: list[AssociatedResourceUpsertPatch] = Field(default_factory=list)
1578
1602
  patch_resources: list[AssociatedResourcePartialPatch] = Field(default_factory=list)
1579
- remove_associated_item_ids: list[int] = Field(default_factory=list)
1580
- reorder_associated_item_ids: list[int] = Field(default_factory=list)
1603
+ remove_associated_item_ids: list[Any] = Field(default_factory=list)
1604
+ reorder_associated_item_ids: list[Any] = Field(default_factory=list)
1581
1605
  view_configs: list[AssociatedResourceViewConfigPatch] = Field(default_factory=list)
1582
1606
 
1583
1607
  @model_validator(mode="before")
@@ -1775,10 +1799,18 @@ class ChartUpsertPatch(StrictModel):
1775
1799
  normalized = raw_type.strip().lower()
1776
1800
  aliases = {
1777
1801
  "targetchart": PublicChartType.target.value,
1802
+ "indicatorchart": PublicChartType.indicator.value,
1803
+ "summarychart": PublicChartType.summary.value,
1778
1804
  "piechart": PublicChartType.pie.value,
1779
1805
  "barchart": PublicChartType.bar.value,
1806
+ "columnchart": PublicChartType.columnar.value,
1807
+ "columnarchart": PublicChartType.columnar.value,
1780
1808
  "linechart": PublicChartType.line.value,
1781
1809
  "tablechart": PublicChartType.table.value,
1810
+ "detailchart": PublicChartType.detail.value,
1811
+ "percent_stacked_column": PublicChartType.pct_stack_col.value,
1812
+ "percent_stacked_bar": PublicChartType.pct_stack_bar.value,
1813
+ "percent_stacked_area": PublicChartType.pct_stack_area.value,
1782
1814
  }
1783
1815
  if normalized in aliases:
1784
1816
  payload["chart_type"] = aliases[normalized]
@@ -2002,6 +2034,8 @@ FieldUpdatePatch.model_rebuild()
2002
2034
 
2003
2035
  class AppGetResponse(StrictModel):
2004
2036
  app_key: str
2037
+ app_name: str | None = None
2038
+ name: str | None = None
2005
2039
  title: str | None = None
2006
2040
  app_icon: str | None = None
2007
2041
  visibility: dict[str, Any] = Field(default_factory=dict)