@josephyan/qingflow-app-user-mcp 0.2.0-beta.992 → 0.2.0-beta.993

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.992
6
+ npm install @josephyan/qingflow-app-user-mcp@0.2.0-beta.993
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.992 qingflow-app-user-mcp
12
+ npx -y -p @josephyan/qingflow-app-user-mcp@0.2.0-beta.993 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.992",
3
+ "version": "0.2.0-beta.993",
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.0b992"
7
+ version = "0.2.0b993"
8
8
  description = "User-authenticated MCP server for Qingflow"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -5,7 +5,7 @@ from pathlib import Path
5
5
 
6
6
  __all__ = ["__version__"]
7
7
 
8
- _FALLBACK_VERSION = "0.2.0b992"
8
+ _FALLBACK_VERSION = "0.2.0b993"
9
9
 
10
10
 
11
11
  def _resolve_local_pyproject_version() -> str | None:
@@ -269,6 +269,15 @@ class AuthTools(ToolBase):
269
269
  )
270
270
  if selected_ws_id is not None:
271
271
  session_profile = self.sessions.select_workspace(profile, ws_id=selected_ws_id, ws_name=selected_ws_name)
272
+ backend_session = self.sessions.get_backend_session(profile)
273
+ permission_level = (
274
+ self._workspace_permission_level(
275
+ session_profile=session_profile,
276
+ backend_session=backend_session,
277
+ )
278
+ if backend_session is not None
279
+ else None
280
+ )
272
281
 
273
282
  return {
274
283
  "profile": session_profile.profile,
@@ -282,6 +291,7 @@ class AuthTools(ToolBase):
282
291
  "selected_ws_name": session_profile.selected_ws_name,
283
292
  "suggested_ws_id": session_profile.selected_ws_id,
284
293
  "suggested_ws_name": session_profile.selected_ws_name,
294
+ "permission_level": permission_level,
285
295
  "persisted": session_profile.persisted,
286
296
  "request_route": self._request_route_payload(
287
297
  BackendRequestContext(
@@ -781,6 +791,13 @@ class AuthTools(ToolBase):
781
791
  if ws_id is None:
782
792
  return default_payload, []
783
793
 
794
+ permission_level = self._workspace_permission_level(
795
+ session_profile=session_profile,
796
+ backend_session=backend_session,
797
+ )
798
+ payload = dict(default_payload)
799
+ payload["permission_level"] = permission_level
800
+
784
801
  context = BackendRequestContext(
785
802
  base_url=backend_session.base_url,
786
803
  token=backend_session.token,
@@ -788,12 +805,6 @@ class AuthTools(ToolBase):
788
805
  qf_version=backend_session.qf_version,
789
806
  qf_version_source=backend_session.qf_version_source,
790
807
  )
791
- permission_level = self._resolve_permission_level(
792
- self._workspace_auth(context, ws_id=ws_id)
793
- )
794
- payload = dict(default_payload)
795
- payload["permission_level"] = permission_level
796
-
797
808
  member = self._lookup_current_member(
798
809
  context=context,
799
810
  uid=session_profile.uid,
@@ -815,6 +826,25 @@ class AuthTools(ToolBase):
815
826
  payload["roles"] = self._compact_roles(member)
816
827
  return payload, []
817
828
 
829
+ def _workspace_permission_level(
830
+ self,
831
+ *,
832
+ session_profile, # type: ignore[no-untyped-def]
833
+ backend_session, # type: ignore[no-untyped-def]
834
+ ) -> str | None:
835
+ """Resolve the selected workspace permission label without requiring member lookup."""
836
+ ws_id = session_profile.selected_ws_id
837
+ if ws_id is None:
838
+ return None
839
+ context = BackendRequestContext(
840
+ base_url=backend_session.base_url,
841
+ token=backend_session.token,
842
+ ws_id=ws_id,
843
+ qf_version=backend_session.qf_version,
844
+ qf_version_source=backend_session.qf_version_source,
845
+ )
846
+ return self._resolve_permission_level(self._workspace_auth(context, ws_id=ws_id))
847
+
818
848
  def _workspace_auth(self, context: BackendRequestContext, *, ws_id: int) -> int | None:
819
849
  """执行内部辅助逻辑。"""
820
850
  workspace = self._fetch_workspace_auth_from_detail(context, ws_id=ws_id)