thoughtleaders-cli 0.6.40__tar.gz → 0.6.41__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 (93) hide show
  1. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/.claude-plugin/plugin.json +1 -1
  2. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/PKG-INFO +1 -1
  3. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/pyproject.toml +1 -1
  4. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/__init__.py +1 -1
  5. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/auth/commands.py +65 -1
  6. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/.claude-plugin/marketplace.json +0 -0
  7. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/.github/workflows/python-publish.yml +0 -0
  8. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/.gitignore +0 -0
  9. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/AGENTS.md +0 -0
  10. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/CLAUDE.md +0 -0
  11. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/LICENSE +0 -0
  12. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/README.md +0 -0
  13. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/agents/tl-analyst.md +0 -0
  14. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/docs/architecture.md +0 -0
  15. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/hooks/hooks.json +0 -0
  16. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/hooks/scripts/load-tl-skill.mjs +0 -0
  17. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/hooks/scripts/post-usage.sh +0 -0
  18. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/hooks/scripts/pre-check.sh +0 -0
  19. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl/SKILL.md +0 -0
  20. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl/references/business-glossary.md +0 -0
  21. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl/references/elasticsearch-schema.md +0 -0
  22. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl/references/firebolt-schema.md +0 -0
  23. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl/references/postgres-schema.md +0 -0
  24. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-import/SKILL.md +0 -0
  25. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/SKILL.md +0 -0
  26. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/examples/e2e_findings.md +0 -0
  27. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/examples/golden_queries.md +0 -0
  28. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/references/columns_brands.md +0 -0
  29. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/references/columns_channels.md +0 -0
  30. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/references/columns_content.md +0 -0
  31. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/references/columns_sponsorships.md +0 -0
  32. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/references/intelligence_filterset_schema.json +0 -0
  33. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/references/intelligence_widget_schema.json +0 -0
  34. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/references/report_glossary.md +0 -0
  35. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/references/sortable_columns.json +0 -0
  36. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/references/sponsorship_filterset_schema.json +0 -0
  37. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/references/sponsorship_widget_schema.json +0 -0
  38. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/references/widgets.md +0 -0
  39. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/tools/column_builder.md +0 -0
  40. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/tools/database_query.md +0 -0
  41. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/tools/keyword_research.md +0 -0
  42. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/tools/name_resolver.md +0 -0
  43. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/tools/sample_judge.md +0 -0
  44. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/tools/similar_channels.md +0 -0
  45. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/tools/topic_matcher.md +0 -0
  46. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/skills/tl-report-builder/tools/widget_builder.md +0 -0
  47. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/_completions.py +0 -0
  48. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/auth/__init__.py +0 -0
  49. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/auth/finalize.py +0 -0
  50. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/auth/login.py +0 -0
  51. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/auth/pkce.py +0 -0
  52. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/auth/token_store.py +0 -0
  53. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/client/__init__.py +0 -0
  54. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/client/errors.py +0 -0
  55. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/client/http.py +0 -0
  56. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/__init__.py +0 -0
  57. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/_comments_common.py +0 -0
  58. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/ask.py +0 -0
  59. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/balance.py +0 -0
  60. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/brands.py +0 -0
  61. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/bulk_import.py +0 -0
  62. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/changelog.py +0 -0
  63. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/channels.py +0 -0
  64. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/credits.py +0 -0
  65. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/db.py +0 -0
  66. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/deals.py +0 -0
  67. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/describe.py +0 -0
  68. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/doctor.py +0 -0
  69. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/matches.py +0 -0
  70. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/proposals.py +0 -0
  71. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/recommender.py +0 -0
  72. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/reports.py +0 -0
  73. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/schema.py +0 -0
  74. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/setup.py +0 -0
  75. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/snapshots.py +0 -0
  76. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/sponsorships.py +0 -0
  77. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/uploads.py +0 -0
  78. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/commands/whoami.py +0 -0
  79. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/config.py +0 -0
  80. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/filters.py +0 -0
  81. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/hints.py +0 -0
  82. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/main.py +0 -0
  83. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/output/__init__.py +0 -0
  84. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/output/formatter.py +0 -0
  85. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/src/tl_cli/self_update.py +0 -0
  86. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/tests/__init__.py +0 -0
  87. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/tests/test_auth.py +0 -0
  88. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/tests/test_filters.py +0 -0
  89. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/tests/test_http_auth.py +0 -0
  90. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/tests/test_output.py +0 -0
  91. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/tests/test_reports.py +0 -0
  92. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/tests/test_sponsorships.py +0 -0
  93. {thoughtleaders_cli-0.6.40 → thoughtleaders_cli-0.6.41}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tl-cli",
3
- "version": "0.6.40",
3
+ "version": "0.6.41",
4
4
  "description": "ThoughtLeaders CLI — query sponsorship deals, channels, brands, uploads, and intelligence from the terminal",
5
5
  "author": {
6
6
  "name": "ThoughtLeaders",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: thoughtleaders-cli
3
- Version: 0.6.40
3
+ Version: 0.6.41
4
4
  Summary: ThoughtLeaders CLI — query sponsorship data, channels, brands, and intelligence
5
5
  Project-URL: Homepage, https://thoughtleaders.io
6
6
  Project-URL: Repository, https://github.com/ThoughtLeaders-io/thoughtleaders-cli
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "thoughtleaders-cli"
7
- version = "0.6.40"
7
+ version = "0.6.41"
8
8
  description = "ThoughtLeaders CLI — query sponsorship data, channels, brands, and intelligence"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,3 +1,3 @@
1
1
  """ThoughtLeaders CLI — query sponsorship data, channels, brands, and intelligence."""
2
2
 
3
- __version__ = "0.6.40"
3
+ __version__ = "0.6.41"
@@ -1,5 +1,6 @@
1
1
  """Auth CLI commands: tl auth login/logout/status."""
2
2
 
3
+ import sys
3
4
  import time
4
5
 
5
6
  import typer
@@ -14,6 +15,69 @@ app = typer.Typer(help="Authentication commands")
14
15
  console = Console(stderr=True)
15
16
 
16
17
 
18
+ def _read_masked(prompt: str) -> str:
19
+ """Read a line of input echoing `*` for each character.
20
+
21
+ Falls back to plain `input()` when stdin is not a TTY (piped input,
22
+ test harness). Uses stdlib `termios` on Unix and `msvcrt` on Windows
23
+ so no extra dependency is needed.
24
+ """
25
+ if not sys.stdin.isatty():
26
+ return input(prompt)
27
+
28
+ sys.stdout.write(prompt)
29
+ sys.stdout.flush()
30
+
31
+ buf: list[str] = []
32
+ if sys.platform == 'win32':
33
+ import msvcrt
34
+ while True:
35
+ ch = msvcrt.getwch()
36
+ if ch in ('\r', '\n'):
37
+ sys.stdout.write('\n')
38
+ sys.stdout.flush()
39
+ break
40
+ if ch == '\x03': # Ctrl-C
41
+ raise KeyboardInterrupt
42
+ if ch in ('\b', '\x7f'):
43
+ if buf:
44
+ buf.pop()
45
+ sys.stdout.write('\b \b')
46
+ sys.stdout.flush()
47
+ continue
48
+ buf.append(ch)
49
+ sys.stdout.write('*')
50
+ sys.stdout.flush()
51
+ else:
52
+ import termios
53
+ import tty
54
+ fd = sys.stdin.fileno()
55
+ old = termios.tcgetattr(fd)
56
+ try:
57
+ tty.setcbreak(fd)
58
+ while True:
59
+ ch = sys.stdin.read(1)
60
+ if ch in ('\r', '\n'):
61
+ sys.stdout.write('\n')
62
+ sys.stdout.flush()
63
+ break
64
+ if ch == '\x03':
65
+ raise KeyboardInterrupt
66
+ if ch in ('\b', '\x7f'):
67
+ if buf:
68
+ buf.pop()
69
+ sys.stdout.write('\b \b')
70
+ sys.stdout.flush()
71
+ continue
72
+ buf.append(ch)
73
+ sys.stdout.write('*')
74
+ sys.stdout.flush()
75
+ finally:
76
+ termios.tcsetattr(fd, termios.TCSADRAIN, old)
77
+
78
+ return ''.join(buf)
79
+
80
+
17
81
  @app.command("login", help="Log in to ThoughtLeaders.")
18
82
  def login_cmd() -> None:
19
83
  """Log in to ThoughtLeaders.
@@ -58,7 +122,7 @@ def _login_api_key() -> None:
58
122
  from tl_cli.client.errors import ApiError
59
123
  from tl_cli.client.http import get_client
60
124
 
61
- key = Prompt.ask("Paste your API key", console=console, password=True).strip()
125
+ key = _read_masked("Paste your API key: ").strip()
62
126
  if not key:
63
127
  console.print("[red]No key provided.[/red]")
64
128
  raise typer.Exit(1)