rednote-cli 0.1.7__tar.gz → 0.1.8__tar.gz

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.
Files changed (89) hide show
  1. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/PKG-INFO +1 -1
  2. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/pyproject.toml +1 -1
  3. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/__init__.py +1 -1
  4. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/common/config.py +4 -2
  5. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/core/account_manager.py +12 -38
  6. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli.egg-info/PKG-INFO +1 -1
  7. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/README.md +0 -0
  8. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/setup.cfg +0 -0
  9. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/__init__.py +0 -0
  10. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/common/__init__.py +0 -0
  11. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/common/app_utils.py +0 -0
  12. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/common/enums.py +0 -0
  13. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/common/errors.py +0 -0
  14. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/core/__init__.py +0 -0
  15. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/core/browser/__init__.py +0 -0
  16. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/core/browser/manager.py +0 -0
  17. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/core/database/__init__.py +0 -0
  18. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/core/database/manager.py +0 -0
  19. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/platforms/__init__.py +0 -0
  20. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/platforms/base.py +0 -0
  21. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/platforms/factory.py +0 -0
  22. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/platforms/publishing/__init__.py +0 -0
  23. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/platforms/publishing/media.py +0 -0
  24. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/platforms/publishing/models.py +0 -0
  25. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/platforms/publishing/validator.py +0 -0
  26. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/platforms/rednote/__init__.py +0 -0
  27. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/platforms/rednote/issues.py +0 -0
  28. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/services/__init__.py +0 -0
  29. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/_runtime/services/scraper_service.py +0 -0
  30. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/__init__.py +0 -0
  31. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/output/__init__.py +0 -0
  32. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/output/event_stream.py +0 -0
  33. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/output/formatter_json.py +0 -0
  34. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/output/formatter_table.py +0 -0
  35. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/output/writer.py +0 -0
  36. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/persistence/__init__.py +0 -0
  37. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/persistence/file_account_repo.py +0 -0
  38. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/platform/__init__.py +0 -0
  39. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/platform/rednote/__init__.py +0 -0
  40. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/platform/rednote/extractor.py +0 -0
  41. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/platform/rednote/publisher.py +0 -0
  42. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/platform/rednote/runtime_extractor.py +0 -0
  43. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/platform/rednote/runtime_publisher.py +0 -0
  44. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/adapters/platform/rednote/runtime_registration.py +0 -0
  45. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/__init__.py +0 -0
  46. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/dto/__init__.py +0 -0
  47. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/dto/input_models.py +0 -0
  48. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/dto/output_models.py +0 -0
  49. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/use_cases/__init__.py +0 -0
  50. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/use_cases/account_list.py +0 -0
  51. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/use_cases/account_mutation.py +0 -0
  52. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/use_cases/auth_login.py +0 -0
  53. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/use_cases/auth_status.py +0 -0
  54. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/use_cases/doctor.py +0 -0
  55. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/use_cases/init_runtime.py +0 -0
  56. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/use_cases/note_get.py +0 -0
  57. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/use_cases/note_search.py +0 -0
  58. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/use_cases/publish_note.py +0 -0
  59. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/use_cases/user_get.py +0 -0
  60. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/use_cases/user_search.py +0 -0
  61. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/application/use_cases/user_self.py +0 -0
  62. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/__init__.py +0 -0
  63. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/__main__.py +0 -0
  64. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/commands/__init__.py +0 -0
  65. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/commands/account.py +0 -0
  66. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/commands/doctor.py +0 -0
  67. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/commands/init.py +0 -0
  68. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/commands/note.py +0 -0
  69. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/commands/publish.py +0 -0
  70. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/commands/search.py +0 -0
  71. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/commands/user.py +0 -0
  72. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/main.py +0 -0
  73. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/options.py +0 -0
  74. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/runtime.py +0 -0
  75. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/utils.py +0 -0
  76. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/cli/xsec_help.py +0 -0
  77. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/domain/__init__.py +0 -0
  78. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/domain/errors.py +0 -0
  79. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/domain/note_search_filters.py +0 -0
  80. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/infra/__init__.py +0 -0
  81. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/infra/exit_codes.py +0 -0
  82. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/infra/logger.py +0 -0
  83. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/infra/paths.py +0 -0
  84. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli/infra/platforms.py +0 -0
  85. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli.egg-info/SOURCES.txt +0 -0
  86. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli.egg-info/dependency_links.txt +0 -0
  87. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli.egg-info/entry_points.txt +0 -0
  88. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli.egg-info/requires.txt +0 -0
  89. {rednote-cli-0.1.7 → rednote-cli-0.1.8}/src/rednote_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rednote-cli
3
- Version: 0.1.7
3
+ Version: 0.1.8
4
4
  Summary: Rednote platform CLI
5
5
  Requires-Python: >=3.12
6
6
  Description-Content-Type: text/markdown
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
7
7
 
8
8
  [project]
9
9
  name = "rednote-cli"
10
- version = "0.1.7"
10
+ version = "0.1.8"
11
11
  description = "Rednote platform CLI"
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.12"
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.1.7"
5
+ __version__ = "0.1.8"
@@ -73,8 +73,10 @@ def resolve_login_mode_headless(mode: str) -> bool:
73
73
  # Local login is interactive by design.
74
74
  return resolve_browser_headless(False)
75
75
  if normalized_mode == "remote":
76
- # Remote login defaults to headless, but follows BROWSER_HEADLESS env.
77
- return resolve_browser_headless(None)
76
+ # Remote login should mirror local browser environment as closely as possible.
77
+ # The only intended difference is remote screenshot handoff, not a weaker
78
+ # headless fingerprint.
79
+ return resolve_browser_headless(False)
78
80
  return resolve_browser_headless()
79
81
 
80
82
  # --- 浏览器环境配置 ---
@@ -9,7 +9,7 @@ from loguru import logger
9
9
 
10
10
  import rednote_cli._runtime.common.config as runtime_config
11
11
  from rednote_cli._runtime.common.enums import Platform
12
- from rednote_cli._runtime.core.browser.manager import stealth_async
12
+ from rednote_cli._runtime.core.browser.manager import browser_manager, stealth_async
13
13
  from rednote_cli._runtime.core.database.manager import DatabaseManager
14
14
  from rednote_cli._runtime.platforms.factory import PlatformFactory
15
15
  from rednote_cli._runtime.platforms.rednote import build_unknown_issue, detect_issue_from_page
@@ -263,8 +263,7 @@ class AccountManager:
263
263
  except Exception as emit_err:
264
264
  logger.debug(f"Ignored progress callback error: {emit_err}")
265
265
 
266
- from playwright.async_api import TimeoutError as PlaywrightTimeoutError, async_playwright
267
- from rednote_cli._runtime.common.app_utils import get_system_chrome_path
266
+ from playwright.async_api import TimeoutError as PlaywrightTimeoutError
268
267
 
269
268
  if mode not in {"local", "remote"}:
270
269
  return {
@@ -299,24 +298,16 @@ class AccountManager:
299
298
  result["account_uid"] = target_account_uid
300
299
 
301
300
  headless = runtime_config.resolve_login_mode_headless(mode)
302
- close_timeout_seconds = 1
303
- browser = None
304
- context = None
305
- p = None
306
-
307
- p = await async_playwright().start()
308
- try:
309
- executable_path = get_system_chrome_path()
310
- browser = await p.chromium.launch(
311
- headless=headless,
312
- executable_path=executable_path,
313
- args=["--disable-blink-features=AutomationControlled"]
314
- )
315
- context_kwargs = {"viewport": {'width': 1280, 'height': 800}}
316
- if target_account and target_account.get("storage_state"):
317
- context_kwargs["storage_state"] = target_account.get("storage_state")
318
- logger.info(f"Loaded stored session for account: {target_account_uid}")
319
- context = await browser.new_context(**context_kwargs)
301
+ account_key = target_account_uid or account_uid or None
302
+ storage_state_seed = target_account.get("storage_state") if target_account else None
303
+ if target_account and storage_state_seed:
304
+ logger.info(f"Loaded stored session for account: {target_account_uid}")
305
+
306
+ async with browser_manager.get_context(
307
+ storage_state=storage_state_seed,
308
+ headless=headless,
309
+ account_key=account_key,
310
+ ) as context:
320
311
  page = await context.new_page()
321
312
  await stealth_async(page)
322
313
 
@@ -414,20 +405,3 @@ class AccountManager:
414
405
  result["reason"] = "login_failed"
415
406
  result["message"] = str(e)
416
407
  return result
417
- finally:
418
- if context is not None:
419
- try:
420
- await asyncio.wait_for(context.close(), timeout=close_timeout_seconds)
421
- except Exception as close_err:
422
- logger.warning(f"Context close timeout/error ignored: {close_err}")
423
- if browser is not None:
424
- try:
425
- await asyncio.wait_for(browser.close(), timeout=close_timeout_seconds)
426
- except Exception as close_err:
427
- logger.warning(f"Browser close timeout/error ignored: {close_err}")
428
- finally:
429
- if p is not None:
430
- try:
431
- await asyncio.wait_for(p.stop(), timeout=close_timeout_seconds)
432
- except Exception as close_err:
433
- logger.warning(f"Playwright stop timeout/error ignored: {close_err}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rednote-cli
3
- Version: 0.1.7
3
+ Version: 0.1.8
4
4
  Summary: Rednote platform CLI
5
5
  Requires-Python: >=3.12
6
6
  Description-Content-Type: text/markdown
File without changes
File without changes