thoughtleaders-cli 0.7.5__tar.gz → 0.7.6__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 (131) hide show
  1. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/.claude-plugin/plugin.json +1 -1
  2. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/PKG-INFO +1 -1
  3. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/pyproject.toml +1 -1
  4. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl/SKILL.md +14 -0
  5. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/__init__.py +1 -1
  6. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/.claude-plugin/marketplace.json +0 -0
  7. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/.github/workflows/python-publish.yml +0 -0
  8. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/.gitignore +0 -0
  9. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/AGENTS.md +0 -0
  10. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/API.md +0 -0
  11. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/CLAUDE.md +0 -0
  12. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/LICENSE +0 -0
  13. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/README.md +0 -0
  14. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/agents/tl-analyst.md +0 -0
  15. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/agents/youtube-comment-classifier.md +0 -0
  16. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/hooks/hooks.json +0 -0
  17. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/hooks/scripts/load-tl-skill.mjs +0 -0
  18. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/hooks/scripts/post-usage.sh +0 -0
  19. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/hooks/scripts/pre-check.sh +0 -0
  20. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl/references/business-glossary.md +0 -0
  21. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl/references/elasticsearch-schema.md +0 -0
  22. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl/references/firebolt-schema.md +0 -0
  23. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl/references/postgres-schema.md +0 -0
  24. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/.gitignore +0 -0
  25. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/SKILL.md +0 -0
  26. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/references/comment-patterns.md +0 -0
  27. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/references/peer-cohort.md +0 -0
  28. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/references/red-flags.md +0 -0
  29. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/references/scoring.md +0 -0
  30. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/scripts/_io_utf8.py +0 -0
  31. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/scripts/analyze_channel.py +0 -0
  32. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/scripts/anomaly_detector.py +0 -0
  33. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/scripts/comment_analyzer.py +0 -0
  34. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/scripts/comment_scraper.py +0 -0
  35. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/scripts/engagement_ratios.py +0 -0
  36. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/scripts/peer_cohort.py +0 -0
  37. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/scripts/report.py +0 -0
  38. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/scripts/resolve_channel.py +0 -0
  39. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/scripts/score.py +0 -0
  40. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/scripts/tl_cli.py +0 -0
  41. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/scripts/video_integrity.py +0 -0
  42. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-channel-authenticity/scripts/view_curves.py +0 -0
  43. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-import/SKILL.md +0 -0
  44. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-keyword-research/SKILL.md +0 -0
  45. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-keyword-research/scripts/probe.py +0 -0
  46. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/SKILL.md +0 -0
  47. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/examples/e2e_findings.md +0 -0
  48. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/examples/golden_queries.md +0 -0
  49. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/references/columns_brands.md +0 -0
  50. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/references/columns_channels.md +0 -0
  51. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/references/columns_content.md +0 -0
  52. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/references/columns_sponsorships.md +0 -0
  53. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/references/intelligence_filterset_schema.json +0 -0
  54. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/references/intelligence_widget_schema.json +0 -0
  55. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/references/report_glossary.md +0 -0
  56. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/references/sortable_columns.json +0 -0
  57. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/references/sponsorship_filterset_schema.json +0 -0
  58. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/references/sponsorship_widget_schema.json +0 -0
  59. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/references/widgets.md +0 -0
  60. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/tools/column_builder.md +0 -0
  61. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/tools/database_query.md +0 -0
  62. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/tools/name_resolver.md +0 -0
  63. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/tools/sample_judge.md +0 -0
  64. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/tools/similar_channels.md +0 -0
  65. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/tools/topic_matcher.md +0 -0
  66. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-report-builder/tools/widget_builder.md +0 -0
  67. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-save-report/SKILL.md +0 -0
  68. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-save-report/references/columns_brands.md +0 -0
  69. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-save-report/references/columns_channels.md +0 -0
  70. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-save-report/references/columns_content.md +0 -0
  71. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-save-report/references/columns_sponsorships.md +0 -0
  72. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-save-report/references/intelligence_filterset_schema.json +0 -0
  73. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-save-report/references/intelligence_widget_schema.json +0 -0
  74. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-save-report/references/report_glossary.md +0 -0
  75. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-save-report/references/sortable_columns.json +0 -0
  76. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-save-report/references/sponsorship_filterset_schema.json +0 -0
  77. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-save-report/references/sponsorship_widget_schema.json +0 -0
  78. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-save-report/references/widgets.md +0 -0
  79. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-top-partnerships/SKILL.md +0 -0
  80. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-top-partnerships/scripts/top_partnerships.py +0 -0
  81. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-views-guarantee/SKILL.md +0 -0
  82. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/skills/tl-views-guarantee/scripts/vg.py +0 -0
  83. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/_completions.py +0 -0
  84. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/_typer_utils.py +0 -0
  85. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/auth/__init__.py +0 -0
  86. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/auth/commands.py +0 -0
  87. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/auth/login.py +0 -0
  88. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/auth/pkce.py +0 -0
  89. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/auth/token_store.py +0 -0
  90. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/client/__init__.py +0 -0
  91. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/client/errors.py +0 -0
  92. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/client/http.py +0 -0
  93. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/__init__.py +0 -0
  94. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/_comments_common.py +0 -0
  95. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/balance.py +0 -0
  96. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/brands.py +0 -0
  97. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/bulk_import.py +0 -0
  98. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/changelog.py +0 -0
  99. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/channels.py +0 -0
  100. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/credits.py +0 -0
  101. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/db.py +0 -0
  102. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/deals.py +0 -0
  103. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/describe.py +0 -0
  104. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/doctor.py +0 -0
  105. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/matches.py +0 -0
  106. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/proposals.py +0 -0
  107. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/recommender.py +0 -0
  108. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/reports.py +0 -0
  109. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/schema.py +0 -0
  110. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/setup.py +0 -0
  111. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/snapshots.py +0 -0
  112. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/sponsorships.py +0 -0
  113. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/uploads.py +0 -0
  114. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/commands/whoami.py +0 -0
  115. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/config.py +0 -0
  116. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/filters.py +0 -0
  117. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/hints.py +0 -0
  118. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/main.py +0 -0
  119. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/output/__init__.py +0 -0
  120. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/output/formatter.py +0 -0
  121. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/src/tl_cli/self_update.py +0 -0
  122. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/tests/__init__.py +0 -0
  123. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/tests/test_auth.py +0 -0
  124. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/tests/test_describe.py +0 -0
  125. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/tests/test_filters.py +0 -0
  126. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/tests/test_http_auth.py +0 -0
  127. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/tests/test_output.py +0 -0
  128. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/tests/test_reports.py +0 -0
  129. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/tests/test_setup.py +0 -0
  130. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/tests/test_sponsorships.py +0 -0
  131. {thoughtleaders_cli-0.7.5 → thoughtleaders_cli-0.7.6}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tl-cli",
3
- "version": "0.7.5",
3
+ "version": "0.7.6",
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.7.5
3
+ Version: 0.7.6
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.7.5"
7
+ version = "0.7.6"
8
8
  description = "ThoughtLeaders CLI — query sponsorship data, channels, brands, and intelligence"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -50,6 +50,13 @@ The pattern is always: server-side narrowing first (usually by filters in the `t
50
50
 
51
51
  Always assume there will be more than 1 page of results. You MUST always pass `LIMIT` and `OFFSET` to every `tl db pg|fb|es` query (and use the response envelope's `next_offset` / breadcrumbs to walk forward) so the entire data set is retrieved. The maximum number of rows per page is present in the output of `whoami`.
52
52
 
53
+ **Counts, totals, and breakdowns: aggregate in the query engine — never page through records to count them.** A "how many / total / average / per-X" question is ONE aggregation query, not N pages of rows summed in your head:
54
+ - `tl db pg` — `SELECT COUNT(*) …`, or `SELECT col, COUNT(*) AS n … GROUP BY col ORDER BY n DESC`. Also `SUM`/`AVG`/`MIN`/`MAX`/`date_trunc`. Returns one/few rows regardless of table size. (`LIMIT`/`OFFSET` still required — an aggregate is one row, so `LIMIT 1 OFFSET 0` is fine.)
55
+ - `tl db es` — aggregation body with `"size": 0` (returns zero hits, only the agg result): `value_count`/`cardinality` for counts, `terms` for per-group, `sum`/`avg` for metrics, `date_histogram` for time series. Add `"track_total_hits": true` to get an exact match count. One aggregation block per body (see ES reference) — run multiple calls for a multi-metric dashboard.
56
+ - Structured list commands and list endpoints already return the full match count as `total` in the response envelope — request `--limit 1` and read `total` instead of fetching every row.
57
+
58
+ Fetching all rows to count/sum/group them is wrong: it is slow, costs credits per row returned, and silently undercounts once you hit the page cap.
59
+
53
60
  Retry after 5 seconds if the server returns a "connection denied" or a "server error" on any request.
54
61
 
55
62
  Where possible reference sponsorships, brands, channel by numeric IDs.
@@ -360,6 +367,13 @@ cat query.json | tl db es -
360
367
 
361
368
  See [references/elasticsearch-schema.md](references/elasticsearch-schema.md) for accepted top-level keys, query types, size/depth limits, scripting/aggregation rules, and the field catalogue.
362
369
 
370
+ **Article docs in ES carry only `channel.id` — not a usable channel name. Resolve names from PG, in a two-step script.** Whenever you query article/upload docs and the output needs channel names, do NOT hand-map ids in context and do NOT `ILIKE` on names — write a script that:
371
+ 1. runs `tl db es … --json` with `channel.id` in `_source`, then collects the **distinct** channel ids;
372
+ 2. runs `tl db pg "SELECT id, channel_name FROM thoughtleaders_channel WHERE id IN (<ids>)" --json` to build an `{id: channel_name}` map;
373
+ 3. merges the map onto the ES rows by `channel.id` and emits the enriched result.
374
+
375
+ Prefer Python for the script (write it to `/tmp`); a `jq`+`xargs` one-liner is fine for a single page (worked example under *Brand sponsorship history*). Always go ES→PG in this order (PG `IN (...)` on the ids ES returned) — one PG round-trip for the whole page, never one query per article.
376
+
363
377
  #### `tl db fb` — Firebolt
364
378
 
365
379
  ```bash
@@ -1,3 +1,3 @@
1
1
  """ThoughtLeaders CLI — query sponsorship data, channels, brands, and intelligence."""
2
2
 
3
- __version__ = "0.7.5"
3
+ __version__ = "0.7.6"