@josephyan/qingflow-app-user-mcp 0.2.0-beta.84 → 0.2.0-beta.85

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-app-user-mcp@0.2.0-beta.84
6
+ npm install @josephyan/qingflow-app-user-mcp@0.2.0-beta.85
7
7
  ```
8
8
 
9
9
  Run:
10
10
 
11
11
  ```bash
12
- npx -y -p @josephyan/qingflow-app-user-mcp@0.2.0-beta.84 qingflow-app-user-mcp
12
+ npx -y -p @josephyan/qingflow-app-user-mcp@0.2.0-beta.85 qingflow-app-user-mcp
13
13
  ```
14
14
 
15
15
  Environment:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@josephyan/qingflow-app-user-mcp",
3
- "version": "0.2.0-beta.84",
3
+ "version": "0.2.0-beta.85",
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 = "0.2.0b84"
7
+ version = "0.2.0b85"
8
8
  description = "User-authenticated MCP server for Qingflow"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -2,4 +2,4 @@ from __future__ import annotations
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.2.0b84"
5
+ __version__ = "0.2.0b85"
@@ -848,15 +848,18 @@ class AiBuilderFacade:
848
848
  allow_detach: bool,
849
849
  normalized_args: JSONObject,
850
850
  ) -> JSONObject:
851
- current_result: JSONObject | None = None
851
+ current_detail_result: JSONObject | None = None
852
+ current_base_result: JSONObject | None = None
853
+ detail_api_error: QingflowApiError | None = None
852
854
  try:
853
- current_result = self.packages.package_get(profile=profile, tag_id=package_id, include_raw=True)
855
+ current_detail_result = self.packages.package_get(profile=profile, tag_id=package_id, include_raw=True)
854
856
  except (QingflowApiError, RuntimeError) as detail_error:
855
857
  detail_api_error = _coerce_api_error(detail_error)
856
- try:
857
- current_result = self.packages.package_get_base(profile=profile, tag_id=package_id, include_raw=True)
858
- except (QingflowApiError, RuntimeError) as base_error:
859
- api_error = _coerce_api_error(base_error)
858
+ try:
859
+ current_base_result = self.packages.package_get_base(profile=profile, tag_id=package_id, include_raw=True)
860
+ except (QingflowApiError, RuntimeError) as base_error:
861
+ api_error = _coerce_api_error(base_error)
862
+ if current_detail_result is None:
860
863
  return _failed_from_api_error(
861
864
  "PACKAGE_LAYOUT_READ_FAILED",
862
865
  api_error,
@@ -867,8 +870,20 @@ class AiBuilderFacade:
867
870
  },
868
871
  suggested_next_call={"tool_name": "package_get", "arguments": {"profile": profile, "package_id": package_id}},
869
872
  )
870
- current_raw = current_result.get("result") if isinstance(current_result.get("result"), dict) else {}
871
- raw_tag_items = current_raw.get("tagItems")
873
+
874
+ detail_raw = (
875
+ current_detail_result.get("result")
876
+ if isinstance(current_detail_result, dict) and isinstance(current_detail_result.get("result"), dict)
877
+ else {}
878
+ )
879
+ base_raw = (
880
+ current_base_result.get("result")
881
+ if isinstance(current_base_result, dict) and isinstance(current_base_result.get("result"), dict)
882
+ else {}
883
+ )
884
+ detail_tag_items = detail_raw.get("tagItems") if isinstance(detail_raw.get("tagItems"), list) else None
885
+ base_tag_items = base_raw.get("tagItems") if isinstance(base_raw.get("tagItems"), list) else None
886
+ raw_tag_items = detail_tag_items if detail_tag_items else base_tag_items
872
887
  if not isinstance(raw_tag_items, list):
873
888
  return _failed(
874
889
  "PACKAGE_LAYOUT_UNREADABLE",