Merge pull request #579 from Bortlesboat/fix/561-token-auto-refresh

fix(auth): auto-refresh expired tokens in single-user stdio mode
This commit is contained in:
Taylor Wilsdon
2026-03-15 17:34:18 -04:00
committed by GitHub
5 changed files with 1021 additions and 1001 deletions

View File

@@ -641,8 +641,8 @@ def get_credentials(
f"[get_credentials] Found OAuth 2.1 credentials for MCP session {session_id}" f"[get_credentials] Found OAuth 2.1 credentials for MCP session {session_id}"
) )
# Refresh expired credentials before checking scopes # Refresh invalid credentials before checking scopes
if credentials.expired and credentials.refresh_token: if (not credentials.valid) and credentials.refresh_token:
try: try:
credentials.refresh(Request()) credentials.refresh(Request())
logger.info( logger.info(
@@ -772,9 +772,9 @@ def get_credentials(
logger.debug( logger.debug(
f"[get_credentials] Credentials are valid. User: '{user_google_email}', Session: '{session_id}'" f"[get_credentials] Credentials are valid. User: '{user_google_email}', Session: '{session_id}'"
) )
elif credentials.expired and credentials.refresh_token: elif credentials.refresh_token:
logger.info( logger.info(
f"[get_credentials] Credentials expired. Attempting refresh. User: '{user_google_email}', Session: '{session_id}'" f"[get_credentials] Credentials not valid. Attempting refresh. User: '{user_google_email}', Session: '{session_id}'"
) )
try: try:
logger.debug( logger.debug(

View File

@@ -138,9 +138,15 @@ def build_paragraph_style(
if named_style_type is not None: if named_style_type is not None:
valid_styles = [ valid_styles = [
"NORMAL_TEXT", "TITLE", "SUBTITLE", "NORMAL_TEXT",
"HEADING_1", "HEADING_2", "HEADING_3", "TITLE",
"HEADING_4", "HEADING_5", "HEADING_6", "SUBTITLE",
"HEADING_1",
"HEADING_2",
"HEADING_3",
"HEADING_4",
"HEADING_5",
"HEADING_6",
] ]
if named_style_type not in valid_styles: if named_style_type not in valid_styles:
raise ValueError( raise ValueError(

View File

@@ -325,7 +325,9 @@ class BatchOperationManager:
tab_id, tab_id,
) )
style = "bulleted" if list_type == "UNORDERED" else "numbered" style = "bulleted" if list_type == "UNORDERED" else "numbered"
description = f"create {style} list {op['start_index']}-{op['end_index']}" description = (
f"create {style} list {op['start_index']}-{op['end_index']}"
)
if op.get("nesting_level"): if op.get("nesting_level"):
description += f" (nesting level {op['nesting_level']})" description += f" (nesting level {op['nesting_level']})"
@@ -491,7 +493,11 @@ class BatchOperationManager:
}, },
"create_bullet_list": { "create_bullet_list": {
"required": ["start_index", "end_index"], "required": ["start_index", "end_index"],
"optional": ["list_type", "nesting_level", "paragraph_start_indices"], "optional": [
"list_type",
"nesting_level",
"paragraph_start_indices",
],
"description": "Apply or remove native bullet/numbered list formatting (list_type: UNORDERED, ORDERED, or NONE to remove; nesting_level: 0-8)", "description": "Apply or remove native bullet/numbered list formatting (list_type: UNORDERED, ORDERED, or NONE to remove; nesting_level: 0-8)",
}, },
"insert_doc_tab": { "insert_doc_tab": {

View File

@@ -318,9 +318,15 @@ class ValidationManager:
if named_style_type is not None: if named_style_type is not None:
valid_styles = [ valid_styles = [
"NORMAL_TEXT", "TITLE", "SUBTITLE", "NORMAL_TEXT",
"HEADING_1", "HEADING_2", "HEADING_3", "TITLE",
"HEADING_4", "HEADING_5", "HEADING_6", "SUBTITLE",
"HEADING_1",
"HEADING_2",
"HEADING_3",
"HEADING_4",
"HEADING_5",
"HEADING_6",
] ]
if named_style_type not in valid_styles: if named_style_type not in valid_styles:
return ( return (

1980
uv.lock generated

File diff suppressed because it is too large Load Diff