thoughtleaders-cli 0.6.34__tar.gz → 0.6.35__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 (95) hide show
  1. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/.claude-plugin/plugin.json +1 -1
  2. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/PKG-INFO +1 -1
  3. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/pyproject.toml +1 -1
  4. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/__init__.py +1 -1
  5. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/credits.py +15 -11
  6. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/doctor.py +6 -5
  7. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/.claude-plugin/marketplace.json +0 -0
  8. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/.github/workflows/python-publish.yml +0 -0
  9. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/.gitignore +0 -0
  10. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/AGENTS.md +0 -0
  11. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/CLAUDE.md +0 -0
  12. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/LICENSE +0 -0
  13. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/README.md +0 -0
  14. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/agents/tl-analyst.md +0 -0
  15. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/commands/tl-balance.md +0 -0
  16. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/commands/tl-reports.md +0 -0
  17. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/commands/tl-sponsorships.md +0 -0
  18. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/commands/tl.md +0 -0
  19. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/docs/architecture.md +0 -0
  20. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/hooks/hooks.json +0 -0
  21. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/hooks/scripts/post-usage.sh +0 -0
  22. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/hooks/scripts/pre-check.sh +0 -0
  23. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl/SKILL.md +0 -0
  24. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl/references/business-glossary.md +0 -0
  25. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl/references/elasticsearch-schema.md +0 -0
  26. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl/references/firebolt-schema.md +0 -0
  27. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl/references/postgres-schema.md +0 -0
  28. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-import/SKILL.md +0 -0
  29. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/SKILL.md +0 -0
  30. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/examples/e2e_findings.md +0 -0
  31. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/examples/golden_queries.md +0 -0
  32. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/references/columns_brands.md +0 -0
  33. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/references/columns_channels.md +0 -0
  34. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/references/columns_content.md +0 -0
  35. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/references/columns_sponsorships.md +0 -0
  36. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/references/intelligence_filterset_schema.json +0 -0
  37. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/references/intelligence_widget_schema.json +0 -0
  38. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/references/report_glossary.md +0 -0
  39. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/references/sortable_columns.json +0 -0
  40. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/references/sponsorship_filterset_schema.json +0 -0
  41. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/references/sponsorship_widget_schema.json +0 -0
  42. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/references/widgets.md +0 -0
  43. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/tools/column_builder.md +0 -0
  44. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/tools/database_query.md +0 -0
  45. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/tools/keyword_research.md +0 -0
  46. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/tools/name_resolver.md +0 -0
  47. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/tools/sample_judge.md +0 -0
  48. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/tools/similar_channels.md +0 -0
  49. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/tools/topic_matcher.md +0 -0
  50. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/skills/tl-report-builder/tools/widget_builder.md +0 -0
  51. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/_completions.py +0 -0
  52. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/auth/__init__.py +0 -0
  53. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/auth/commands.py +0 -0
  54. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/auth/finalize.py +0 -0
  55. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/auth/login.py +0 -0
  56. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/auth/pkce.py +0 -0
  57. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/auth/token_store.py +0 -0
  58. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/client/__init__.py +0 -0
  59. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/client/errors.py +0 -0
  60. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/client/http.py +0 -0
  61. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/__init__.py +0 -0
  62. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/_comments_common.py +0 -0
  63. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/ask.py +0 -0
  64. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/balance.py +0 -0
  65. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/brands.py +0 -0
  66. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/bulk_import.py +0 -0
  67. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/changelog.py +0 -0
  68. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/channels.py +0 -0
  69. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/db.py +0 -0
  70. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/deals.py +0 -0
  71. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/describe.py +0 -0
  72. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/matches.py +0 -0
  73. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/proposals.py +0 -0
  74. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/recommender.py +0 -0
  75. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/reports.py +0 -0
  76. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/schema.py +0 -0
  77. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/setup.py +0 -0
  78. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/snapshots.py +0 -0
  79. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/sponsorships.py +0 -0
  80. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/uploads.py +0 -0
  81. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/commands/whoami.py +0 -0
  82. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/config.py +0 -0
  83. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/filters.py +0 -0
  84. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/hints.py +0 -0
  85. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/main.py +0 -0
  86. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/output/__init__.py +0 -0
  87. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/output/formatter.py +0 -0
  88. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/src/tl_cli/self_update.py +0 -0
  89. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/tests/__init__.py +0 -0
  90. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/tests/test_auth.py +0 -0
  91. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/tests/test_filters.py +0 -0
  92. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/tests/test_output.py +0 -0
  93. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/tests/test_reports.py +0 -0
  94. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/tests/test_sponsorships.py +0 -0
  95. {thoughtleaders_cli-0.6.34 → thoughtleaders_cli-0.6.35}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tl-cli",
3
- "version": "0.6.34",
3
+ "version": "0.6.35",
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.34
3
+ Version: 0.6.35
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.34"
7
+ version = "0.6.35"
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.34"
3
+ __version__ = "0.6.35"
@@ -19,6 +19,7 @@ from decimal import Decimal, InvalidOperation
19
19
 
20
20
  import typer
21
21
  from rich.console import Console
22
+ from rich.prompt import Prompt
22
23
  from rich.table import Table
23
24
 
24
25
  from tl_cli.client.errors import ApiError, handle_api_error
@@ -59,14 +60,13 @@ def pricing_cmd(
59
60
  @app.command("buy")
60
61
  def buy_cmd(
61
62
  amount_usd: str = typer.Option(..., "--amount-usd", help="Amount to top up, in USD."),
62
- no_browser: bool = typer.Option(False, "--no-browser", help="Don't open a browser, just print the checkout URL."),
63
63
  poll: bool = typer.Option(True, "--poll/--no-poll", help="Poll balance after opening the checkout page."),
64
64
  ) -> None:
65
65
  """Start a credit top-up.
66
66
 
67
- Calls the server to create a pending purchase, opens the web checkout
68
- URL, and (by default) polls `tl balance` until the credits land or you
69
- Ctrl-C out.
67
+ Calls the server to create a pending purchase, prints the checkout URL,
68
+ then asks whether to open it in a browser. Polls `tl balance` (unless
69
+ `--no-poll`) until the credits land or you Ctrl-C out.
70
70
  """
71
71
  try:
72
72
  Decimal(amount_usd)
@@ -96,13 +96,17 @@ def buy_cmd(
96
96
  console.print(
97
97
  f"\n[bold]Started top-up:[/bold] ${result['usd_amount']} → {credits} credits"
98
98
  )
99
- console.print(f"Checkout: {checkout_url}")
100
-
101
- if checkout_url and not no_browser:
102
- try:
103
- webbrowser.open(checkout_url)
104
- except Exception:
105
- pass
99
+ if checkout_url:
100
+ console.print(f"[bold]Checkout URL:[/bold] {checkout_url}\n")
101
+ console.print("How would you like to continue?")
102
+ console.print(" [cyan]1[/cyan] — Open the URL in a browser on this machine (default)")
103
+ console.print(" [cyan]2[/cyan] — I'll open it manually")
104
+ choice = Prompt.ask("Choose", choices=["1", "2"], default="1", console=console)
105
+ if choice == "1":
106
+ try:
107
+ webbrowser.open(checkout_url)
108
+ except Exception:
109
+ console.print("[yellow]Could not launch a browser. Open the URL above manually.[/yellow]")
106
110
 
107
111
  if not poll or initial_balance is None:
108
112
  console.print("[dim]Run `tl balance` to confirm once payment completes.[/dim]")
@@ -155,10 +155,10 @@ def doctor(ctx: typer.Context) -> None:
155
155
 
156
156
  # Connectivity + balance + latency timing. The first /balance call
157
157
  # doubles as the connectivity probe; subsequent calls feed the
158
- # latency stats table.
158
+ # latency stats table that's printed at the end of the report.
159
+ samples_by_endpoint: dict[str, list[float]] = {}
159
160
  if tokens and not tokens.is_expired:
160
161
  client = get_client()
161
- samples_by_endpoint: dict[str, list[float]] = {}
162
162
  try:
163
163
  try:
164
164
  t0 = time.perf_counter()
@@ -174,11 +174,10 @@ def doctor(ctx: typer.Context) -> None:
174
174
  console.print(f" API: [red]unreachable[/red]")
175
175
  all_ok = False
176
176
 
177
- # Time the remaining endpoints (and pad /balance to N calls so
178
- # every row in the latency table has the same iteration count).
177
+ # Pad /balance to N calls and time the remaining free endpoints.
178
+ # The table itself is printed at the bottom, just above the verdict.
179
179
  if samples_by_endpoint.get("/balance"):
180
180
  _collect_latency_samples(client, samples_by_endpoint)
181
- _print_latency_table(samples_by_endpoint)
182
181
  finally:
183
182
  client.close()
184
183
  else:
@@ -214,6 +213,8 @@ def doctor(ctx: typer.Context) -> None:
214
213
  if hint:
215
214
  console.print(f" Install: {hint}")
216
215
 
216
+ _print_latency_table(samples_by_endpoint)
217
+
217
218
  console.print()
218
219
  if all_ok:
219
220
  console.print("[green]Everything looks good.[/green]")