thoughtleaders-cli 0.9.21__tar.gz → 0.9.22__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.
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/.claude-plugin/plugin.json +1 -1
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/PKG-INFO +1 -1
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/pyproject.toml +1 -1
- thoughtleaders_cli-0.9.22/skills/connector-impact/SKILL.md +298 -0
- thoughtleaders_cli-0.9.22/skills/connector-impact/references/help.md +116 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/connector-impact/references/impact-schema.md +11 -9
- thoughtleaders_cli-0.9.22/skills/connector-impact/references/impact-to-tl-mapping.md +360 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl/SKILL.md +6 -1
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/__init__.py +1 -1
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/sponsorships.py +15 -4
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_sponsorships.py +13 -2
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/uv.lock +1 -1
- thoughtleaders_cli-0.9.21/skills/connector-impact/SKILL.md +0 -367
- thoughtleaders_cli-0.9.21/skills/connector-impact/references/help.md +0 -122
- thoughtleaders_cli-0.9.21/skills/connector-impact/references/impact-to-tl-mapping.md +0 -449
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/.claude-plugin/marketplace.json +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/.github/dependabot.yml +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/.github/workflows/ci.yml +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/.github/workflows/cli-integration.yml +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/.github/workflows/python-publish.yml +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/.gitignore +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/AGENTS.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/API.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/CLAUDE.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/LICENSE +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/README.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/agents/cast-sheet.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/agents/gem-classifier.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/agents/keyword-context-classifier.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/agents/keyword-entity-resolver.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/agents/keyword-relevance-validator.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/agents/merge-shard.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/agents/tl-analyst.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/agents/youtube-comment-classifier.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/hooks/hooks.json +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/hooks/scripts/load-tl-skill.mjs +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/hooks/scripts/post-usage.sh +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/hooks/scripts/pre-check.sh +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/_shared/tl_data.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl/references/business-glossary.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl/references/elasticsearch-schema.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl/references/firebolt-schema.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl/references/postgres-schema.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/SKILL.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/references/cast-sheet.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/references/creator-brief-template.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/references/cue-phrases.txt +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/references/evidence-rules.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/references/extractor-rubric.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/references/identity-lane.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/references/profile-spec.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/references/transcript-mining.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/assemble_extracts.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/authenticate.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/bio_lane.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/brand_reads.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/build_html.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/cast_sheet.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/channel_context.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/cluster_gems.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/extractor_prompt.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/fetch_cues.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/identity_prompt.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/ledger_meta.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/merge_pass.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/moment_check.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/page.css +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/start_run.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/store_io.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/tier_hint.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-brand-creator-connection/scripts/verify_quotes.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/.gitignore +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/SKILL.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/references/comment-patterns.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/references/peer-cohort.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/references/red-flags.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/references/scoring.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/scripts/_io_utf8.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/scripts/analyze_channel.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/scripts/anomaly_detector.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/scripts/channel_lookup.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/scripts/comment_analyzer.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/scripts/comment_scraper.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/scripts/engagement_ratios.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/scripts/peer_cohort.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/scripts/report.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/scripts/resolve_channel.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/scripts/score.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/scripts/video_integrity.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-channel-authenticity/scripts/view_curves.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-create-workflow/SKILL.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-create-workflow/references/creating-in-app.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-create-workflow/references/methodology.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-create-workflow/references/pitfalls.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-create-workflow/references/workflow-model.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-keyword-research/SKILL.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-keyword-research/references/elasticsearch-content-search.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-keyword-research/references/help.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-keyword-research/scripts/build_report.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-keyword-research/scripts/expand_entities.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-keyword-research/scripts/fetch_context.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-keyword-research/scripts/probe.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-keyword-research/scripts/search_channels.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-keyword-research/scripts/search_videos.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-keyword-research/scripts/select_keywords.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-save-report/SKILL.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-save-report/references/columns_brands.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-save-report/references/columns_channels.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-save-report/references/columns_content.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-save-report/references/columns_sponsorships.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-save-report/references/intelligence_filterset_schema.json +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-save-report/references/intelligence_widget_schema.json +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-save-report/references/report_glossary.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-save-report/references/sortable_columns.json +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-save-report/references/sponsorship_filterset_schema.json +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-save-report/references/sponsorship_widget_schema.json +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-save-report/references/widgets.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-top-partnerships/SKILL.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-top-partnerships/scripts/top_partnerships.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-views-guarantee/SKILL.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/skills/tl-views-guarantee/scripts/vg.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/__main__.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/_completions.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/_typer_utils.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/auth/__init__.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/auth/commands.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/auth/login.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/auth/pkce.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/auth/token_store.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/client/__init__.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/client/errors.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/client/http.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/__init__.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/_comments_common.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/agent.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/balance.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/brands.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/bulk_import.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/changelog.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/channels.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/credits.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/db.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/deals.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/describe.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/doctor.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/matches.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/memory.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/profiles.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/proposals.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/recommender.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/reports.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/schema.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/setup.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/skills.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/snapshots.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/uploads.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/whoami.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/commands/workflows.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/config.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/filters.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/hints.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/main.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/output/__init__.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/output/formatter.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/query_history.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/self_update.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/src/tl_cli/skill_registry.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/__init__.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_agent_complete.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_assemble_extracts.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_auth.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_bio_lane.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_brands_winner_channels.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_build_report.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_cast_sheet.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_channels_lookalike.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_cluster_gems.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_connections_map_rules.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_creator_brief_accuracy.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_creator_brief_scripts.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_db_repeat_warning.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_describe.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_error_hints.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_expand_entities.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_extractor_prompt.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_fetch_cues.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_filters.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_http_auth.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_ledger_meta.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_memory.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_merge_pass.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_output.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_probe.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_probe_matching.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_profiles.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_quota_refusal_message.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_refusal_rendering.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_reports.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_scripts_executable.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_search_channels.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_search_videos.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_select_keywords.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_setup.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_setup_marker_respect.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_shared_tl_data.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_skill_registry.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_skills_command.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_start_run.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_whoami_newsletter.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests/test_workflows.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests_cli/AGENTS.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests_cli/conftest.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests_cli/test_balance.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests_cli/test_db_es.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests_cli/test_db_fb.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests_cli/test_db_pg.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests_cli/test_schema.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tests_cli/test_whoami.py +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tools/tl-brand-creator-connection/references/cue-phrases.trained-2026-09-15.txt +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tools/tl-brand-creator-connection/references/cue-training.md +0 -0
- {thoughtleaders_cli-0.9.21 → thoughtleaders_cli-0.9.22}/tools/tl-brand-creator-connection/scripts/train_cues.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: thoughtleaders-cli
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.22
|
|
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
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: connector-impact
|
|
3
|
+
tl-blurb: join Impact performance data to TL sponsorships
|
|
4
|
+
description: |
|
|
5
|
+
Join a brand's Impact (impact.com) data to ThoughtLeaders data: each Impact partner matched to a
|
|
6
|
+
TL channel and, where Impact can tell videos apart, to the exact TL sponsorship; otherwise a
|
|
7
|
+
go-live timeline of the creator's TL videos against Impact results. TL views, price and CPM sit
|
|
8
|
+
beside Impact clicks, actions, sales revenue and commission. Also covers creators the brand
|
|
9
|
+
never booked through TL, and brands with no TL bookings. Brand side only: a media-buyer `tl`
|
|
10
|
+
login and a brand (advertiser) Impact account. Invoke when the user wants Impact numbers read
|
|
11
|
+
against TL data: "how did our sponsorships convert in Impact", "Impact performance for
|
|
12
|
+
[creator/brand]", "which TL creators drove the most actions", "actions per 1,000 views",
|
|
13
|
+
"cost per action on our sponsorships", "is [creator] declining", "match Impact partners to our
|
|
14
|
+
channels", "what does [Impact term] mean in TL", or any question mixing Impact terms (Partner,
|
|
15
|
+
Action, Action Cost, Total Cost, Program, PromoCode, SharedId) with TL data. The user supplies
|
|
16
|
+
the Impact connection (Impact MCP, Impact API or a CSV export) and a `tl` login. Read-only:
|
|
17
|
+
it never changes anything in Impact. Asks which view (deal scorecard, creator rollup, decay
|
|
18
|
+
over time) when the request doesn't say. Also invoke for help asks about this skill; answered
|
|
19
|
+
from the guide, no queries run.
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# connector-impact
|
|
23
|
+
|
|
24
|
+
Impact records what happened after the click (clicks, actions, sales revenue, commission). TL
|
|
25
|
+
records what happened before it (creator, video, go-live date, views, price). This skill joins
|
|
26
|
+
the two.
|
|
27
|
+
|
|
28
|
+
Read before any analysis:
|
|
29
|
+
- `references/impact-to-tl-mapping.md`: terms, metrics, match keys, dates, costs, currency.
|
|
30
|
+
- `references/impact-schema.md`: Impact objects, fields and traps.
|
|
31
|
+
- From the `tl` skill: `business-glossary.md`, `postgres-schema.md`, and `elasticsearch-schema.md`
|
|
32
|
+
for video lookups.
|
|
33
|
+
|
|
34
|
+
Not for: an Impact-only question (Impact's MCP answers it directly); a TL-only question (use the
|
|
35
|
+
`tl` skill); a renew or don't-renew verdict (build the join here, then apply *Performance Grade*
|
|
36
|
+
in the `tl` skill's glossary; this skill sets no grade).
|
|
37
|
+
|
|
38
|
+
## Read-only
|
|
39
|
+
|
|
40
|
+
This skill only reads Impact. It never creates, changes, approves, reverses or deletes anything
|
|
41
|
+
there, on any route, whatever the user's login or token would allow. Use only these calls:
|
|
42
|
+
|
|
43
|
+
| Route | Allowed calls |
|
|
44
|
+
|---|---|
|
|
45
|
+
| Impact MCP | `query_performance`, `list_partners`, `investigate_order_action`, `list_action_inquiries`, `get_action_inquiry` |
|
|
46
|
+
| Impact API | `GET` requests to the resources in the schema |
|
|
47
|
+
| CSV export | Reading the files the user supplies (also on the MCP route, stage 2) |
|
|
48
|
+
|
|
49
|
+
If the user asks for a change in Impact (approve or reverse an action, resolve an inquiry, message
|
|
50
|
+
or edit a partner, change a contract, payout or setting), say this skill only reads, point them to
|
|
51
|
+
Impact's website, and carry on with the run.
|
|
52
|
+
|
|
53
|
+
Files the run creates go in a temporary folder that is deleted when the run ends. The user's own
|
|
54
|
+
exports stay where they are. If the user wants results saved, offer and wait for a yes.
|
|
55
|
+
|
|
56
|
+
## Help mode
|
|
57
|
+
|
|
58
|
+
If the user asks what the skill does, how it works or what they can ask, run no queries: answer from
|
|
59
|
+
`references/help.md`, sized to the question, then offer to start. Answer a term question mid-run
|
|
60
|
+
from `help.md` or the mapping, then continue.
|
|
61
|
+
|
|
62
|
+
## Scope and view
|
|
63
|
+
|
|
64
|
+
- **Brand:** required.
|
|
65
|
+
- **Creators:** all, unless the user names some.
|
|
66
|
+
- **Window:** as the user states it, counted back from today. Otherwise from the earliest sold
|
|
67
|
+
deal `publish_date` in the last 12 months, to today.
|
|
68
|
+
- **Views**, any combination:
|
|
69
|
+
- *Deal scorecard:* one row per sold sponsorship where Impact can tell the videos apart,
|
|
70
|
+
otherwise the go-live timeline (mapping 4).
|
|
71
|
+
- *Creator rollup:* one row per channel across its deals for the brand.
|
|
72
|
+
- *Decay over time:* the go-live timeline week by week, go-live weeks marked.
|
|
73
|
+
- A view named in the request runs alone, without asking. Otherwise these words pick it:
|
|
74
|
+
- "per deal", "scorecard", "how did each sponsorship do": deal scorecard
|
|
75
|
+
- "which creators", "top partners", "rank": creator rollup
|
|
76
|
+
- "declining", "over time", "since it went live", "week by week", "renew": decay over time
|
|
77
|
+
- If the view is still unknown, ask one question covering every unstated item (view, brand,
|
|
78
|
+
window), with one line per view on what it shows. Never default silently. If only the brand is
|
|
79
|
+
unknown, ask for it.
|
|
80
|
+
- `autonomous`, `--auto`, "all of it" or "don't stop to ask": all three views, default window, no
|
|
81
|
+
questions.
|
|
82
|
+
- Pending actions count in headline numbers only when the user asks to include pending for this
|
|
83
|
+
run. Then label both states and do not ask. That request wins over a standing line such as
|
|
84
|
+
"keep pending separate unless I ask". "Do not include pending", or the standing line on its own,
|
|
85
|
+
does not turn pending on.
|
|
86
|
+
|
|
87
|
+
## Rules for every read
|
|
88
|
+
|
|
89
|
+
- At each stage, state one line: what you are doing and the counts so far. Report each unmatched
|
|
90
|
+
partner, dropped row and currency mismatch when you find it.
|
|
91
|
+
- Aggregate at the source (`GROUP BY` in TL SQL, grouped `query_performance` in Impact). Compute
|
|
92
|
+
every sum and ratio with SQL or a code step, never by hand.
|
|
93
|
+
- **Credits.** Before any call, state the worst case: the balance from `tl balance`, the rate
|
|
94
|
+
(0.3 credits a sponsorship row), and the most this run could cost, against the user's limit if
|
|
95
|
+
they gave one. The only charged call before the exact quote is one probe, named in advance:
|
|
96
|
+
`tl sponsorships list` for the brand with `--limit 1`, which returns `total` for 0.3 credits.
|
|
97
|
+
Then quote the run (deal pull, adlink read, coverage count, video lookups) beside the balance.
|
|
98
|
+
If the quote is above the user's limit or a tenth of the balance, ask before reading. Price
|
|
99
|
+
any other raw read with `tl db pg --pricing` / `tl db es --pricing` (1 credit each) after the
|
|
100
|
+
quote. Keep a running total from each response's `usage.credits_charged`, failed reads
|
|
101
|
+
included, and report it with the results. Write "credits", never "cr".
|
|
102
|
+
- **Paging.** Every `tl db pg` call has `LIMIT` and `OFFSET`; every `tl db es` body has `size`
|
|
103
|
+
and `from`; follow `next_offset` until `has_more` is false. `tl sponsorships list` returns at
|
|
104
|
+
most 500 rows a page, so page it too.
|
|
105
|
+
- **Truncation.** If a read returns fewer rows than its `total`, stop, name the read and the
|
|
106
|
+
missing count, and ask before going on. A creator silently dropped becomes "not booked through
|
|
107
|
+
TL" and gets a wrong cost.
|
|
108
|
+
- **Personal data.** Never put a partner's `Contacts[]` or an action's customer fields
|
|
109
|
+
(`CustomerId`, `CustomerStatus`, `CustomerCountry`, `CustomerRegion`, `CustomerCity`, `Oid`,
|
|
110
|
+
`Note`) into a table, a note or a calculation; the report is per partner and per deal. Read a channel's `social_links` by named
|
|
111
|
+
platform key only (`youtube`, `tiktok`, `instagram`); never select the whole column or its
|
|
112
|
+
`_emails` array. The video index copy of the links has e-mails removed.
|
|
113
|
+
|
|
114
|
+
## Workflow
|
|
115
|
+
|
|
116
|
+
### 0. Setup
|
|
117
|
+
|
|
118
|
+
1. Run `tl whoami --json` and read `profile.persona` and `profile.flags`.
|
|
119
|
+
2. If the caller is a seller (persona creator or creator service, or `publisher` in `flags`
|
|
120
|
+
without `advertiser`), stop and say a media-buyer login is required: a seller login returns
|
|
121
|
+
the creator's own deals, so the report would be about the wrong company.
|
|
122
|
+
3. Confirm the Impact route (schema: *Access routes*): Impact MCP, Impact API or a CSV export. If
|
|
123
|
+
there is none, list the three and stop. If the user offers the Impact website, ask for a CSV
|
|
124
|
+
export and name the reports and filters (stage 2). Use the user's token as it is: the run is
|
|
125
|
+
read-only whatever the token allows, so its permissions need no comment.
|
|
126
|
+
4. Never ask for, accept or repeat an Impact token or password. If the user pastes one, tell them
|
|
127
|
+
to revoke it.
|
|
128
|
+
5. Identify the account from the API base, or from the web app address the user exports from
|
|
129
|
+
(mapping 5). Only a Brand account runs. If it is a Partner account, or not the type the user
|
|
130
|
+
described, stop and say so.
|
|
131
|
+
6. Resolve the brand with `tl brands find "<name>"`, never in SQL.
|
|
132
|
+
7. Record the currency of the Impact figures (a report's display-currency setting; do not change
|
|
133
|
+
it). The report is in USD. If the Impact figures are not in USD, tell the user now (mapping
|
|
134
|
+
2.3).
|
|
135
|
+
8. Quote the credits, then state the scope back: brand, creators, window, view, which action
|
|
136
|
+
states are counted (approved and pending labelled separately), currencies, and this line:
|
|
137
|
+
"Read-only run: <Impact route>, reading <what will be read>."
|
|
138
|
+
|
|
139
|
+
### 1. TL side
|
|
140
|
+
|
|
141
|
+
Pull the brand's sold deals with no date filter: earlier videos still drive sales inside the
|
|
142
|
+
window, and sold deals with no `publish_date` are listed too (mapping 4.2).
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
tl sponsorships list status:sold brand:"<brand name>" --limit 500 --offset 0 --json
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
- **Named creators:** resolve each to its TL channel ids first, matching per mapping 3.1 with the
|
|
149
|
+
bulk form in the `tl` skill's `postgres-schema.md` (*For bulk handle/name lookups in SQL*):
|
|
150
|
+
channel name, handle, the handle in `url` and named platform handles, against `common_name` and
|
|
151
|
+
`url`. If more than one record matches, list them with their URLs and ask which to include
|
|
152
|
+
("all" means one creator across platforms). Then run one paged pull per channel id with
|
|
153
|
+
`channel:<channel_id>` added, never the brand's whole list filtered afterwards.
|
|
154
|
+
- Rows carry `id`, `publish_date`, `price`, `projected_views_at_purchase_date`, `article_id`, `channel_id`, `channel`,
|
|
155
|
+
`common_name`, `brand_id`, `status`, `cpm` and `views`.
|
|
156
|
+
- `brand:` is a partial name match. Keep only rows whose `brand_id` is the brand resolved in
|
|
157
|
+
setup, and name any row left out.
|
|
158
|
+
- Deals live on or before the window end feed the table. Sold deals with no `publish_date` are
|
|
159
|
+
listed under it (mapping 4.2). Report the count of deals live after the window end.
|
|
160
|
+
- No rows: continue. Every partner is then "not booked through TL" or "not a TL creator"
|
|
161
|
+
(mapping 4.4).
|
|
162
|
+
- `publish-date-end` on `tl sponsorships list` is inclusive. In SQL, bound dates per mapping 1.2.
|
|
163
|
+
|
|
164
|
+
Then read the join keys the list lacks, for the deal ids pulled, and join on deal id:
|
|
165
|
+
|
|
166
|
+
```sql
|
|
167
|
+
SELECT al.id, al.tracking_url, al.media_url,
|
|
168
|
+
al.conversions, al.revenue
|
|
169
|
+
FROM thoughtleaders_adlink al
|
|
170
|
+
WHERE al.id IN (<deal ids>)
|
|
171
|
+
LIMIT 500 OFFSET 0
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
- At most 500 ids a call. Check every id came back: a missing id is a truncated read.
|
|
175
|
+
- Query `thoughtleaders_adlink` alone, with only these columns. The deal rows are already
|
|
176
|
+
brand-scoped, and every joined table is charged per row. Do not widen the select to find a
|
|
177
|
+
field; if the join needs one that is not here, say so and stop. If a column is rejected, follow
|
|
178
|
+
the mapping's opening rule.
|
|
179
|
+
- Run the coverage count (mapping 3.5) and tell the user which deal keys the brand's deals carry,
|
|
180
|
+
labelled brand-wide even when creators are named.
|
|
181
|
+
- A deal row's `views` is its TL views. For deals with no `views`, resolve the video id (mapping
|
|
182
|
+
1.4) and look them up once before calling any of them "no TL views":
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
tl db es '{"size": <number of ids>, "from": 0, "query": {"terms": {"id": ["<video id>", "..."]}},
|
|
186
|
+
"_source": ["id", "views", "projected_views", "publication_date"]}' --json
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### 2. Impact side
|
|
190
|
+
|
|
191
|
+
1. **Partners:** id, name, website, property URLs (`list_partners`, `GET .../MediaPartners`, or a
|
|
192
|
+
partner list export; report partner filters are capped). For named creators, search only for their partners, by alias (mapping
|
|
193
|
+
3.1).
|
|
194
|
+
2. **Actions** for the partners in scope: date, state, event type, promo code, Ad, SubIds,
|
|
195
|
+
SharedId, social platform, sale amount, commission. From `GET .../Actions` filtered with
|
|
196
|
+
`ActionDateStart` / `ActionDateEnd`, or the Advanced Action Listing export. On the MCP route,
|
|
197
|
+
ask for that export: no MCP tool returns each action's state, promo code or SharedId. Group by
|
|
198
|
+
partner, date, state and event type.
|
|
199
|
+
3. **Clicks** per partner per day from grouped performance (`query_performance`, a ReportExport,
|
|
200
|
+
or a Performance by Partner / by Day report).
|
|
201
|
+
4. Map every column to the schema's *Field names* table before any math, and name any column
|
|
202
|
+
that is not in it.
|
|
203
|
+
|
|
204
|
+
CSV route: name the reports to export (Performance by Partner, Performance by Day, Advanced Action
|
|
205
|
+
Listing) with the run's dates, states and partners, plus any column the default view hides.
|
|
206
|
+
|
|
207
|
+
If the route only gives lifetime totals, say decay over time is unavailable.
|
|
208
|
+
|
|
209
|
+
### 3. Join
|
|
210
|
+
|
|
211
|
+
Match each partner to TL with every key in mapping 3.2, then look for per-video evidence (mapping
|
|
212
|
+
3.3). Record partner id, channel id(s), key, confidence and group (mapping 4.4).
|
|
213
|
+
|
|
214
|
+
- Resolve every `Properties[]` URL and handle on the partner, plus its link and name, and collect
|
|
215
|
+
every TL channel any of them reaches, even after a strong match. Two or more channels trigger
|
|
216
|
+
the multi-channel or agency rule below.
|
|
217
|
+
- Match aliases per mapping 3.1. Never `ILIKE` on names.
|
|
218
|
+
- A partner matching no TL record: "not a TL creator".
|
|
219
|
+
- A named creator with no matching partner: ask for their partner name or promo code in Impact.
|
|
220
|
+
- A YouTube creator TL lacks: ask for the channel link, add it with `tl channels find "<link>"`,
|
|
221
|
+
say its TL data takes about a day, and report it from Impact only until then. Run
|
|
222
|
+
`tl channels find` only on a channel TL has or a link the user gave: on an unknown name it
|
|
223
|
+
queues a channel for indexing.
|
|
224
|
+
- A promo-code match (key 5) needs a second signal, or it is listed as "probable, please confirm".
|
|
225
|
+
- **Several TL channels of one creator:** if the partner has approved actions in the window, show
|
|
226
|
+
the candidates with evidence and ask which to include ("all" means one creator across
|
|
227
|
+
platforms). Otherwise list it as unresolved without asking.
|
|
228
|
+
- **An agency** (keys pointing to different creators): split its actions by tracking link or
|
|
229
|
+
SharedId, or ask. Never give an agency's actions to one creator.
|
|
230
|
+
- Never open or resolve a tracking link (no browser visit, no redirect-following `curl`): it
|
|
231
|
+
registers a click in the brand's account. A link on the brand's own short domain stays
|
|
232
|
+
unresolved.
|
|
233
|
+
- Use only promo codes found on Impact actions; never build one from a creator's name, and never
|
|
234
|
+
call a code the creator's unless it is on their own actions. If the
|
|
235
|
+
creator's actions carry no code, say so. List their codes credited to other partners (mapping
|
|
236
|
+
3.4).
|
|
237
|
+
- List TL deals with no Impact partner, with the likely reason.
|
|
238
|
+
|
|
239
|
+
### 4. Dates and 5. Metrics
|
|
240
|
+
|
|
241
|
+
Apply mapping 4 (per-deal windows with per-video evidence, otherwise the go-live timeline; social
|
|
242
|
+
platforms per 4.5; for creators not booked through TL the user confirms which videos they paid
|
|
243
|
+
for) and mapping 2. Build periods by summing each partner's daily numbers between go-live dates.
|
|
244
|
+
If a TL deal's `conversions` or `revenue` differs from Impact, show both, labelled; never
|
|
245
|
+
overwrite or average.
|
|
246
|
+
|
|
247
|
+
### 6. Deliver
|
|
248
|
+
|
|
249
|
+
In this order:
|
|
250
|
+
1. Scope: brand, window, action states, currencies and rates, Impact route, credits charged.
|
|
251
|
+
2. Each chosen view as a table, then its breakdown table and its "All-in cost to date" block
|
|
252
|
+
(mapping 2.2). Label every figure TL or Impact and every money column with its currency.
|
|
253
|
+
3. Join table: partner, channel, deal, key, confidence.
|
|
254
|
+
4. Creators not booked through TL, partners that are not TL creators, TL deals with no partner,
|
|
255
|
+
sold deals not yet live.
|
|
256
|
+
5. Caveats: pending share, reversed and N/A counts above 0, rates used, deals reported as periods,
|
|
257
|
+
deals with no TL views (mapping 1.4), codes credited to other partners, agencies,
|
|
258
|
+
low-confidence matches.
|
|
259
|
+
|
|
260
|
+
- When some deals are per-video and others are periods (mapping 4.1), any sentence describing
|
|
261
|
+
the split states both counts from the rows built and names the deals in each group. Never say
|
|
262
|
+
Impact can tell every video apart when any row is a period.
|
|
263
|
+
- **Last-click caveat.** Next to every cost per action, return on sponsorship and all-in return,
|
|
264
|
+
note that these use last-click credit in the brand's Impact account: they miss sales the video
|
|
265
|
+
caused that did not come through the link or code. This covers summary figures above a table,
|
|
266
|
+
alternative figures below it and figures in sentences. Naming the attribution model in the scope
|
|
267
|
+
does not cover them, and a note under a later table does not reach a figure quoted earlier.
|
|
268
|
+
Within one section, mark each figure and give the note once, where the first one appears.
|
|
269
|
+
- Final figures only: if a figure changes while you write, replace it, with no old figure or
|
|
270
|
+
correction note left in the report.
|
|
271
|
+
- Use the `tl` glossary's business terms, not table names. Draw a chart only when asked, as SVG.
|
|
272
|
+
- Write nothing to Impact. The only TL write is a channel added from a link the user gave. Set no
|
|
273
|
+
performance grade and edit no sheet.
|
|
274
|
+
|
|
275
|
+
## Self-check before finishing
|
|
276
|
+
|
|
277
|
+
1. Read-only held: only allowed Impact calls, change requests declined, the "Read-only run" line
|
|
278
|
+
in the scope, the run's own files deleted, no credential passed through chat.
|
|
279
|
+
2. Seller login and Partner account stopped at setup.
|
|
280
|
+
3. The view came from the request or the user's answer; the scope was stated back.
|
|
281
|
+
4. Worst case before any call, one probe before the quote, quote before the pull, credit total
|
|
282
|
+
reported with failed reads included.
|
|
283
|
+
5. Every read paged to its `total`; a short read stopped the run.
|
|
284
|
+
6. No `Contacts[]`, customer field or e-mail address read or shown.
|
|
285
|
+
7. Coverage count reported, labelled brand-wide.
|
|
286
|
+
8. Every partner has a key, a confidence and a group; no `ILIKE`; no tracking link opened; no
|
|
287
|
+
`tl channels find` on an unknown name; agencies split or asked.
|
|
288
|
+
9. TL views only from resolved video-index documents (mapping 1.4).
|
|
289
|
+
10. Performance tied to one deal only with per-video evidence; otherwise a go-live timeline with
|
|
290
|
+
the shared-link sentence above it.
|
|
291
|
+
11. Last-click caveat beside every cost per action and return figure, above and below tables too.
|
|
292
|
+
12. Mapping 2 and 2.3 hold: currencies named on every money column, Paid to TL and commission
|
|
293
|
+
apart.
|
|
294
|
+
13. Promo-code sales count like link sales: approved actions state the promo-code split on every
|
|
295
|
+
table row and in the opening summary, with "by promo code" / "by link" only where Impact shows
|
|
296
|
+
how the sale was credited (mapping 2.2); a withheld conversion rate points to actions per
|
|
297
|
+
1,000 views when available; a creator with codes credited to other partners has the
|
|
298
|
+
"including" line (mapping 3.4).
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Impact connector: user guide
|
|
2
|
+
|
|
3
|
+
Present this in plain language, sized to the question. Run no queries in help mode.
|
|
4
|
+
|
|
5
|
+
## What it does
|
|
6
|
+
|
|
7
|
+
Impact shows what happened after someone clicked a creator's link: clicks, sales, revenue,
|
|
8
|
+
commission. ThoughtLeaders shows what happened before: which creator, which video, when it went
|
|
9
|
+
live, views, what the sponsorship cost. This skill lines the two up, so you can ask things like
|
|
10
|
+
"which of our sponsorships drove the most sales per 1,000 views?"
|
|
11
|
+
|
|
12
|
+
## What you need
|
|
13
|
+
|
|
14
|
+
This reads your own brand's Impact account; it isn't for creators.
|
|
15
|
+
|
|
16
|
+
- Your TL login (the `tl` CLI).
|
|
17
|
+
- One way into Impact:
|
|
18
|
+
- Impact's connector for Claude: add a custom connector with the URL
|
|
19
|
+
`https://mcp.impact.com/mcp`, enter `mcp-impact-claude` as the OAuth client ID under Advanced
|
|
20
|
+
settings, and sign in. You'll also be asked for one Advanced Action Listing export, the only
|
|
21
|
+
Impact report with each sale's status.
|
|
22
|
+
- The Impact API, with a token you create in Impact (Settings → Technical → API). Read-only
|
|
23
|
+
access is enough.
|
|
24
|
+
- CSV exports from Impact's Reports (Performance by Partner or by Day, plus the Advanced Action
|
|
25
|
+
Listing), dropped into the chat.
|
|
26
|
+
|
|
27
|
+
It only reads your Impact data and never changes, approves or deletes anything. Never paste an
|
|
28
|
+
Impact password or token into the chat.
|
|
29
|
+
|
|
30
|
+
## What you get
|
|
31
|
+
|
|
32
|
+
Always: each Impact partner matched to its TL channel, with how it was matched and how sure the
|
|
33
|
+
match is. Every partner is in one group: booked through TL, a creator TL knows but you booked
|
|
34
|
+
elsewhere, or not a TL creator (coupon sites, blogs).
|
|
35
|
+
|
|
36
|
+
Your choice of views (you'll be asked if you don't say):
|
|
37
|
+
- **Deal scorecard:** one row per sponsorship, or a go-live timeline when the creator's videos
|
|
38
|
+
share one link.
|
|
39
|
+
- **Creator rollup:** one row per channel across its sponsorships.
|
|
40
|
+
- **Decay over time:** week by week after each video went live, to see whether a creator is
|
|
41
|
+
declining. Impact's all-time totals hide this.
|
|
42
|
+
|
|
43
|
+
Every figure comes from last-click credit in your own Impact account: it counts sales that came
|
|
44
|
+
through the creator's link or code, not sales the video caused some other way. Treat costs and
|
|
45
|
+
returns as a floor on what a sponsorship did, not a verdict.
|
|
46
|
+
|
|
47
|
+
## How matching works
|
|
48
|
+
|
|
49
|
+
Every clue is checked, strongest first: the tracking link, the links on the Impact partner's
|
|
50
|
+
profile, the partner's name or the creator's handles on any platform, a TL id stored in the link,
|
|
51
|
+
and a promo code containing the creator's name. A promo-code match is double-checked, for example
|
|
52
|
+
against the date of the first TL video. If a partner with approved sales could be more than one TL
|
|
53
|
+
channel, you're asked which to include.
|
|
54
|
+
|
|
55
|
+
A creator's YouTube, TikTok and Instagram deals are read together. Deals that aren't YouTube videos
|
|
56
|
+
(podcasts, newsletters, TikTok, Instagram) have no TL views, so they're listed but left out of
|
|
57
|
+
view-based figures. If TL doesn't have a creator's channel yet, you'll be asked for the link; its
|
|
58
|
+
TL data takes about a day.
|
|
59
|
+
|
|
60
|
+
## Dates
|
|
61
|
+
|
|
62
|
+
- If each video has its own link, results are tied to that exact sponsorship.
|
|
63
|
+
- If the videos share one link (common), you get a go-live timeline: each date the creator went
|
|
64
|
+
live for you, and what Impact recorded until the next go-live. Earlier videos were still live
|
|
65
|
+
during each period. A video that went live before your date range is included, since it can
|
|
66
|
+
still bring in sales.
|
|
67
|
+
- When some videos have their own link and others share one, the first are reported individually
|
|
68
|
+
and the rest as periods.
|
|
69
|
+
- Sales that can still be cancelled ("pending") are shown next to approved ones, marked "may still
|
|
70
|
+
change".
|
|
71
|
+
|
|
72
|
+
## Costs and currencies
|
|
73
|
+
|
|
74
|
+
- **Booked through TL:** the TL price is the source of truth.
|
|
75
|
+
- **Never booked through TL:** what you paid through Impact is. You'll be shown the creator's
|
|
76
|
+
videos that mention your brand and asked which ones you paid for, then get the CPM on what you
|
|
77
|
+
paid and whether the creator's projected views have risen or fallen since.
|
|
78
|
+
- The TL price and the Impact commission are shown separately, and added together only in an
|
|
79
|
+
"All-in cost to date" box under the table, over the same videos and dates, with an as-of date.
|
|
80
|
+
- Everything is in US dollars, as TL prices are. Impact figures in another currency, such as euros,
|
|
81
|
+
are converted at the European Central Bank's monthly average rate, with the original and the rate
|
|
82
|
+
shown. The TL price is never converted.
|
|
83
|
+
|
|
84
|
+
## Impact terms in TL language
|
|
85
|
+
|
|
86
|
+
| Impact says | TL meaning |
|
|
87
|
+
|---|---|
|
|
88
|
+
| Partner | The creator or channel (sometimes an agency with several) |
|
|
89
|
+
| Program (or Campaign) | Your affiliate program, not a TL campaign |
|
|
90
|
+
| Action | A conversion: sale, sign-up or install |
|
|
91
|
+
| Revenue | Your sales, not TL revenue |
|
|
92
|
+
| Action Cost | Commission paid to the creator through Impact, not the TL price |
|
|
93
|
+
| Total Cost | That commission plus per-click, bonus, make-good and fixed payments through Impact. No Impact platform fee |
|
|
94
|
+
| Ad | A tracking link or creative, not a TL ad spot |
|
|
95
|
+
| Contract | Commission terms, not a TL IO |
|
|
96
|
+
|
|
97
|
+
Views always come from TL; Impact doesn't track them.
|
|
98
|
+
|
|
99
|
+
## What you can say
|
|
100
|
+
|
|
101
|
+
| You say | Result |
|
|
102
|
+
|---|---|
|
|
103
|
+
| "per deal" / "scorecard" | Deal scorecard |
|
|
104
|
+
| "which creators" / "top partners" | Creator rollup |
|
|
105
|
+
| "is it declining" / "over time" / "week by week" / "for the renewal" | Decay over time |
|
|
106
|
+
| "all of it" / "run autonomously" | All three views, no questions |
|
|
107
|
+
| "since June" / "last 90 days" | Date window |
|
|
108
|
+
| "include pending" | Pending counted in the headline |
|
|
109
|
+
| "just [creator]" | Limited to named creators |
|
|
110
|
+
|
|
111
|
+
## Example prompts
|
|
112
|
+
|
|
113
|
+
- "Match our Impact partners to TL channels for [brand]"
|
|
114
|
+
- "Deal scorecard for [brand] since June, approved actions only"
|
|
115
|
+
- "Is [creator] declining for [brand]? Show actions by week after each video"
|
|
116
|
+
- "What's the difference between Action Cost and Total Cost?"
|
|
@@ -5,16 +5,16 @@ Shape of Impact's data: objects, fields, filters, traps. For TL meaning, see
|
|
|
5
5
|
|
|
6
6
|
## Access routes
|
|
7
7
|
|
|
8
|
-
The user brings one route. This skill never holds a login.
|
|
8
|
+
The user brings one route. This skill never holds a login, and every route is read-only (SKILL.md
|
|
9
|
+
*Read-only*).
|
|
9
10
|
|
|
10
11
|
| Route | Setup | Best for |
|
|
11
12
|
|---|---|---|
|
|
12
|
-
| Impact MCP | Custom connector `https://mcp.impact.com/mcp` with OAuth client ID `mcp-impact-claude` under Advanced settings (Impact does not support dynamic client registration), signed in with the user's Impact login | Most questions; aggregates on Impact's side |
|
|
13
|
-
| Impact Brand API | `AccountSID` + a token the user creates (Settings → Technical → API) | Action-level detail, long ranges |
|
|
14
|
-
| CSV export |
|
|
15
|
-
| Impact web app | The user's own browser, already signed in. Read report pages only: no downloads, no settings, no answers to pop-ups | When none of the above is set up. Slowest route; same report data |
|
|
13
|
+
| Impact MCP | Custom connector `https://mcp.impact.com/mcp` with OAuth client ID `mcp-impact-claude` under Advanced settings (Impact does not support dynamic client registration), signed in with the user's Impact login, plus an Advanced Action Listing export for action detail | Most questions; aggregates on Impact's side |
|
|
14
|
+
| Impact Brand API | `AccountSID` + a token the user creates (Settings → Technical → API); read-only access is enough | Action-level detail, long ranges |
|
|
15
|
+
| CSV export | The user exports the reports from Impact: Performance by Partner, Performance by Day, Advanced Action Listing | No setup; same report data |
|
|
16
16
|
|
|
17
|
-
MCP tools on a Brand account:
|
|
17
|
+
MCP tools on a Brand account (the only MCP tools this skill calls):
|
|
18
18
|
|
|
19
19
|
| Tool | Returns | Use |
|
|
20
20
|
|---|---|---|
|
|
@@ -147,7 +147,7 @@ live Brand account, from Impact's documentation.
|
|
|
147
147
|
| Sale amount | `Amount` | `Sale_Amount` ("Revenue") | `Sale_Amount` |
|
|
148
148
|
| Commission | `Payout` | `Payout` ("Action Cost") | `Payout` ("Action Earnings") |
|
|
149
149
|
| Bonus | none | `bonus_cost` | `Bonus_Payout` |
|
|
150
|
-
| Client cost | `ClientCost` | `Client_Cost` (can be 0 on every row
|
|
150
|
+
| Client cost | `ClientCost` | `Client_Cost` (can be 0 on every row; it is not Total Cost, which comes from a grouped report) | none |
|
|
151
151
|
| Promo code | `PromoCode` | `Promo_Code` | `Promo_Code` |
|
|
152
152
|
| SharedId | `SharedId` | `Shared_Id` | `SharedId` |
|
|
153
153
|
| SubIds | Click `PartnerRelated.SubId1-3` | `SubId1` to `SubId3` | `SubId1` to `SubId3` |
|
|
@@ -156,8 +156,10 @@ live Brand account, from Impact's documentation.
|
|
|
156
156
|
| Social platform | none | `social_platform` | none |
|
|
157
157
|
| Partner property | none | `property_type`, `property_name` | `property_type`, `property_name` |
|
|
158
158
|
|
|
159
|
-
|
|
160
|
-
|
|
159
|
+
CSV exports carry display labels ("Action Date", "Shared Id"); match them to the rows above.
|
|
160
|
+
Report views and their CSV exports return only the columns the view shows, and blanks as "". A
|
|
161
|
+
needed column absent from every row is hidden, not blank: ask the user to add it to the report and
|
|
162
|
+
export again (SKILL.md stage 2).
|
|
161
163
|
|
|
162
164
|
## Traps
|
|
163
165
|
|