Not in the top 1,000 by GitHub stars
artwist-polyakov/polyakov-claude-skills
Набор скиллов для ИИ-агентов
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
docx-contracts/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → 197190a21d51
No earlier version was observed for comparison.
genome-analizer/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/agent-deck/skills/agent-deck/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/blogger-ads-skill/skills/blogger-ads-skill/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/codex-review/skills/codex-review/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/crawl4ai-seo/skills/crawl4ai-seo/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/docx-contracts/skills/docx-contracts/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/fal-ai-image/skills/fal-ai-image/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/genome-analizer/skills/genome-analizer/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/github-pages-publisher/skills/github-pages-publisher/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/knowledge-compiler/skills/knowledge-compiler/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/perplexity-search/skills/perplexity-search/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/reddit-skill/skills/reddit-skill/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/scrapedo-web-scraper/skills/scrapedo-web-scraper/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/sourcecraft-publisher/skills/sourcecraft-publisher/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/ssh-remote-connection/skills/ssh-remote-connection/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/telegram-channel-parser/skills/telegram-channel-parser/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/telegraph-publisher/skills/telegraph-publisher/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/x-research/skills/x-research/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/yandex-direct/skills/yandex-direct/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/yandex-metrika/skills/yandex-metrika/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/yandex-search-api/skills/yandex-search-api/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/yandex-webmaster/skills/yandex-webmaster/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/yandex-wordstat/skills/yandex-wordstat/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
plugins/zoomkit/skills/zoomkit/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 197190a21d51
No earlier version was observed for comparison.
scrapedo-web-scraper/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → 197190a21d51
No earlier version was observed for comparison.
Verified commit 197190a21d51e8d3aa4d13d0e35c25d83dd1f20e
git clone --filter=blob:none --no-checkout https://github.com/artwist-polyakov/polyakov-claude-skills.git .hotskills/artwist-polyakov-polyakov-claude-skills && git -C .hotskills/artwist-polyakov-polyakov-claude-skills checkout --detach 197190a21d51e8d3aa4d13d0e35c25d83dd1f20e
# Copy each selected skill directory from .hotskills/artwist-polyakov-polyakov-claude-skills into .claude/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/artwist-polyakov/polyakov-claude-skills.git .hotskills/artwist-polyakov-polyakov-claude-skills && git -C .hotskills/artwist-polyakov-polyakov-claude-skills checkout --detach 197190a21d51e8d3aa4d13d0e35c25d83dd1f20e
# Copy each selected skill directory from .hotskills/artwist-polyakov-polyakov-claude-skills into .agents/skills/<skill-name>/Heat
4.8- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- docx-contracts
docx-contracts - genome-analizer
genome-analizer - agent-deck
plugins/agent-deck/skills/agent-deck - blogger-ads-skill
plugins/blogger-ads-skill/skills/blogger-ads-skill - codex-review
plugins/codex-review/skills/codex-review - crawl4ai-seo
plugins/crawl4ai-seo/skills/crawl4ai-seo - docx-contracts
plugins/docx-contracts/skills/docx-contracts - fal-ai-image
plugins/fal-ai-image/skills/fal-ai-image - genome-analyzer
plugins/genome-analizer/skills/genome-analizer - github-pages-publisher
plugins/github-pages-publisher/skills/github-pages-publisher - knowledge-compiler
plugins/knowledge-compiler/skills/knowledge-compiler - perplexity-search
plugins/perplexity-search/skills/perplexity-search - reddit-skill
plugins/reddit-skill/skills/reddit-skill - scrapedo-web-scraper
plugins/scrapedo-web-scraper/skills/scrapedo-web-scraper - sourcecraft-publisher
plugins/sourcecraft-publisher/skills/sourcecraft-publisher - ssh-remote-connection
plugins/ssh-remote-connection/skills/ssh-remote-connection - telegram-channel-parser
plugins/telegram-channel-parser/skills/telegram-channel-parser - telegraph-publisher
plugins/telegraph-publisher/skills/telegraph-publisher - x-research
plugins/x-research/skills/x-research - yandex-direct
plugins/yandex-direct/skills/yandex-direct - yandex-metrika
plugins/yandex-metrika/skills/yandex-metrika - yandex-search-api
plugins/yandex-search-api/skills/yandex-search-api - yandex-webmaster
plugins/yandex-webmaster/skills/yandex-webmaster - yandex-wordstat
plugins/yandex-wordstat/skills/yandex-wordstat - zoomkit
plugins/zoomkit/skills/zoomkit - scrapedo-web-scraper
scrapedo-web-scraper
How it works
When your agent uses it
What it loads into context
Frontmatter
0 tokensAlways available to the agent
SKILL.md
116 tokensWhen the skill is activated
Reference documents
426 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Быстрая установка
Scripts executed separately
../plugins/codex-review/skills/codex-review/scripts/auto-approve-plan.sh../plugins/codex-review/skills/codex-review/scripts/auto-approve-plan.sh../plugins/codex-review/skills/codex-review/scripts/auto-approve-plan.sh../plugins/codex-review/skills/codex-review/scripts/auto-approve-plan.sh../plugins/codex-review/skills/codex-review/scripts/auto-approve-plan.sh
Files
../.claude-plugin/marketplace.jsonasset6,820 bytesREADME.mddoc550 bytesSKILL.mdcore447 bytesSKILL.mdcore447 bytes../plugins/agent-deck/.claude-plugin/plugin.jsonasset193 bytes../plugins/blogger-ads-skill/.claude-plugin/plugin.jsonasset285 bytes../plugins/codex-review/.claude-plugin/plugin.jsonasset460 bytes../plugins/codex-review/skills/codex-review/scripts/auto-approve-plan.shruns6,362 bytes../plugins/codex-review/skills/codex-review/scripts/auto-approve-plan.shruns6,362 bytes../plugins/codex-review/skills/codex-review/scripts/auto-approve-plan.shruns6,362 bytes../plugins/codex-review/skills/codex-review/scripts/auto-approve-plan.shruns6,362 bytes../plugins/codex-review/skills/codex-review/scripts/auto-approve-plan.shruns6,362 bytes../plugins/crawl4ai-seo/.claude-plugin/plugin.jsonasset240 bytes../plugins/docx-contracts/.claude-plugin/plugin.jsonasset231 bytes../plugins/docx-contracts/skills/docx-contracts/SKILL.mddoc1,294 bytes../plugins/fal-ai-image/.claude-plugin/plugin.jsonasset187 bytes../plugins/genome-analizer/.claude-plugin/plugin.jsonasset187 bytes../plugins/github-pages-publisher/.claude-plugin/plugin.jsonasset269 bytes../plugins/knowledge-compiler/.claude-plugin/plugin.jsonasset199 bytes../plugins/perplexity-search/.claude-plugin/plugin.jsonasset357 bytes../plugins/reddit-skill/.claude-plugin/plugin.jsonasset331 bytes../plugins/scrapedo-web-scraper/.claude-plugin/plugin.jsonasset232 bytes../plugins/sourcecraft-publisher/.claude-plugin/plugin.jsonasset262 bytes../plugins/ssh-remote-connection/.claude-plugin/plugin.jsonasset224 bytes../plugins/telegram-channel-parser/.claude-plugin/plugin.jsonasset239 bytes../plugins/telegraph-publisher/.claude-plugin/plugin.jsonasset200 bytes../plugins/x-research/.claude-plugin/plugin.jsonasset224 bytes../plugins/yandex-direct/.claude-plugin/plugin.jsonasset371 bytes../plugins/yandex-metrika/.claude-plugin/plugin.jsonasset373 bytes../plugins/yandex-search-api/.claude-plugin/plugin.jsonasset225 bytes../plugins/yandex-webmaster/.claude-plugin/plugin.jsonasset215 bytes../plugins/yandex-wordstat/.claude-plugin/plugin.jsonasset162 bytes../plugins/zoomkit/.claude-plugin/plugin.jsonasset241 bytes
Read SKILL.md
# docx-contracts
> **Этот скилл переехал!**
Новое расположение: [plugins/docx-contracts/skills/docx-contracts/SKILL.md](../plugins/docx-contracts/skills/docx-contracts/SKILL.md)
## Быстрая установка
```bash
# Глобально
cp -r plugins/docx-contracts/skills/docx-contracts ~/.claude/skills/
# Для проекта
cp -r plugins/docx-contracts/skills/docx-contracts .claude/skills/
```View the complete source on GitHubWhen your agent uses it
What it loads into context
Frontmatter
0 tokensAlways available to the agent
SKILL.md
124 tokensWhen the skill is activated
Reference documents
1,416 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Быстрая установка
Files
README.mddoc559 bytesSKILL.mdcore456 bytesSKILL.mdcore456 bytes../plugins/genome-analizer/skills/genome-analizer/SKILL.mddoc6,248 bytes
Read SKILL.md
# genome-analizer
> **Этот скилл переехал!**
Новое расположение: [plugins/genome-analizer/skills/genome-analizer/SKILL.md](../plugins/genome-analizer/skills/genome-analizer/SKILL.md)
## Быстрая установка
```bash
# Глобально
cp -r plugins/genome-analizer/skills/genome-analizer ~/.claude/skills/
# Для проекта
cp -r plugins/genome-analizer/skills/genome-analizer .claude/skills/
```View the complete source on GitHubagent-deck
When your agent uses it
Управление сессиями AI агентов через agent-deck CLI. Триггеры (RU): "запусти агента", "запусти саб-агента", "создай сессию", "проверь сессию", "проверь статус", "покажи вывод агента", "что агент ответил". Triggers (EN): "launch sub-agent", "create sub-agent", "start session", "check session", "show agent output".
What it loads into context
Frontmatter
116 tokensAlways available to the agent
SKILL.md
1,150 tokensWhen the skill is activated
Reference documents
6,133 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Запуск суб-агента
- Проверка статуса
- Получение результата
- MCP подключение
- Управление сессиями
- Важные правила
- Примеры использования
Scripts executed separately
scripts/launch-subagent.sh
Files
SKILL.mdcore5,502 bytesSKILL.mdcore5,502 bytesSKILL.mdcore5,502 bytesSKILL.mdcore5,502 bytesSKILL.mdcore5,502 bytesSKILL.mdcore5,502 bytesSKILL.mdcore5,502 bytesSKILL.mdcore5,502 bytesreferences/automation-patterns.mddoc1,673 bytesreferences/cli-reference.mddoc2,376 bytesreferences/config-reference.mddoc6,661 bytesreferences/mcp-management.mddoc1,626 bytesreferences/profiles.mddoc1,032 bytesreferences/troubleshooting.mddoc4,360 bytesreferences/tui-reference.mddoc4,272 bytesscripts/launch-subagent.shruns4,803 bytes
Read SKILL.md
# Agent Deck CLI
Менеджер терминальных сессий для AI агентов. Позволяет запускать, контролировать и получать результаты от дочерних Claude сессий.
## Запуск суб-агента
**Триггеры:** "запусти агента", "запусти саб-агента", "launch sub-agent"
### Простой запуск (CLI команды)
```bash
# Создать сессию
agent-deck add -t "Название" -c claude /path/to/workdir
View the complete source on GitHubblogger-ads-skill
When your agent uses it
Сопровождает рекламную сделку в Telegram на стороне блогера, рекламодателя или агентства: условия, отдельные DOCX договора и приложений, счёт, печатный и XML УПД, маркировка, сроки и завершение. Используй при подготовке или ведении конкретного рекламного размещения, проверке пакета документов либо готовности к публикации.
What it loads into context
Frontmatter
93 tokensAlways available to the agent
SKILL.md
2,338 tokensWhen the skill is activated
Reference documents
48,566 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Начало и продолжение
- Выбор режима
- Общие правила
- Выдача результата
Scripts executed separately
scripts/accounting.pyscripts/creative_links.pyscripts/deal.pyscripts/handoff.pyscripts/inspect_links.pyscripts/print_html.pyscripts/render_contract.pytests/test_accounting.pytests/test_contract.pytests/test_contract_dates.pytests/test_creative_links.pytests/test_deal.pytests/test_document_backup.pytests/test_edo_recovery_dates.pytests/test_erir_policy.pytests/test_exchange.pytests/test_handoff.pytests/test_links.pytests/test_print_html.py
Files
SKILL.mdcore15,540 bytesassets/accounting.example.jsonasset2,587 bytesassets/accounting/invoice.htmlasset2,138 bytesassets/accounting/upd.htmlasset5,161 bytesassets/accounting/upd.xmlasset664 bytesassets/accounting/xsd/ON_NSCHFDOPPR_1_997_01_05_03_05.xsdasset194,743 bytesassets/accounting/xsd/SOURCE.mddoc1,978 bytesassets/deal.example.jsonasset2,872 bytesassets/exchange.example.jsonasset283 bytesassets/template-fields.jsonasset59,845 bytesassets/templates/Montserrat-OFL.txtdoc4,400 bytesassets/templates/NotoEmoji-OFL.txtdoc4,330 bytesassets/templates/NotoEmoji.ttfasset1,982,596 bytesassets/templates/amendment.docxasset388,476 bytesassets/templates/contract.docxasset391,127 bytesassets/templates/creative.docxasset389,244 bytesassets/templates/placement-terms.docxasset388,931 bytesreferences/accounting.mddoc22,680 bytesreferences/contract-review.mddoc10,309 bytesreferences/handoff.mddoc33,957 bytesreferences/intake.mddoc17,086 bytesreferences/legal.mddoc19,626 bytesreferences/ord-edo.mddoc29,437 bytesreferences/templates.mddoc64,504 bytesreferences/workflow.mddoc81,241 bytesscripts/accounting.pyruns28,099 bytesscripts/creative_links.pyruns3,760 bytesscripts/deal.pyruns80,464 bytesscripts/handoff.pyruns47,042 bytesscripts/inspect_links.pyruns20,443 bytesscripts/print_html.pyruns5,703 bytesscripts/render_contract.pyruns45,290 bytestests/scenarios.mddoc39,008 bytestests/test_accounting.pyruns23,753 bytestests/test_contract.pyruns39,497 bytestests/test_contract_dates.pyruns11,125 bytestests/test_creative_links.pyruns13,980 bytestests/test_deal.pyruns173,733 bytestests/test_document_backup.pyruns9,092 bytestests/test_edo_recovery_dates.pyruns9,213 bytestests/test_erir_policy.pyruns6,477 bytestests/test_exchange.pyruns17,523 bytestests/test_handoff.pyruns108,705 bytestests/test_links.pyruns49,374 bytestests/test_print_html.pyruns2,957 bytes
Read SKILL.md
# Сопровождение рекламного размещения
Доведи поручение до готовых файлов и понятного следующего действия. Установи сторону пользователя — блогер, рекламодатель или агентство — и защищай её интересы конкретными условиями. Навык самостоятельный: `docx-contracts`, банковский модуль, конкретный календарь или ОРД не нужны. Python запускай через `uv run`; зависимости объявлены в скриптах. Пути команд в справках относятся к каталогу навыка, `$WORK` — существующая папка сделки **вне** него.
## Начало и продолжение
При сопровождении сделки веди `deal-state.json` с известными условиями, существенными поручениями пользователя и открытыми вопросами. Используй [инициализацию](references/workflow.md#начало-работы). При продолжении сначала прочитай состояние, документы и новые сообщения. Разовый счёт использует отдельные бухгалтерские данные.
**Первый содержательный ответ при подготовке документов составь по [порядку уточнения](references/intake.md#первое-уточнение): отдели ещё не заданные вопросы от уже отложенных сведений.** Сопоставь материалы с [картой полей](assets/template-fields.json) выбранных шаблонов, задай оставшиеся вопросы до сборки и дождись ответа; варианты условий предложи для согласования. Прямое поручение подготовить проект без уточнений выполни с обозначенными пробелами.
## Выбор режима
Прочитай справку нужного режима; не загружай все справки без необходимости.
View the complete source on GitHubcodex-review
When your agent uses it
Workflow кросс-агентного ревью с Codex. Triggers (RU): "кодекс ревью". Triggers (EN): "with codex review", "codex review workflow", "start codex review". ВАЖНО: при срабатывании триггера прочитай SKILL.md до любых других шагов.
What it loads into context
Frontmatter
87 tokensAlways available to the agent
SKILL.md
4,709 tokensWhen the skill is activated
Reference documents
2,929 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Расположение скриптов
- CRITICAL: Sandbox
- Workflow
- Обработка exit-кодов
- STATUS.md
- Verdict
- Завершённый цикл
- Разделы ответа ревьюера
- Правила
Scripts executed separately
scripts/auto-approve-plan.shscripts/codex-review.shscripts/codex-state.shscripts/common.sh
Files
.gitignoreasset12 bytesREADME.mddoc14,297 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesSKILL.mdcore23,961 bytesconfig/defaults.env.exampleasset2,090 bytesscripts/auto-approve-plan.shruns6,362 bytesscripts/codex-review.shruns36,616 bytesscripts/codex-state.shruns5,961 bytesscripts/common.shruns32,336 bytes
Read SKILL.md
# Codex Review Workflow
Кросс-агентное ревью: Claude реализует, Codex (GPT) ревьюит. Codex работает в той же директории и может самостоятельно смотреть код.
## Расположение скриптов
Скрипты лежат в `scripts/` рядом с этим SKILL.md. Определи полный путь:
- Этот файл: путь из которого ты прочитал SKILL.md
- Скрипты: замени `SKILL.md` на `scripts/codex-review.sh` (и `scripts/codex-state.sh`)
Все команды ниже используют относительный `scripts/` — подставь полный путь при вызове.
## CRITICAL: Sandbox
View the complete source on GitHubcrawl4ai-seo
When your agent uses it
SEO-краулер сайтов на базе Crawl4AI. Полный аудит страниц: title, meta, H1, canonical, breadcrumbs, навигация, внутренние ссылки. Инвентаризация сайта, навигационный аудит, сравнение лендингов, анализ конкурентов. Работает для Google и Яндекс SEO (Cyrillic URL, коммерческие факторы, региональность). Связка с yandex-search-api, yandex-metrika, yandex-webmaster, scrapedo-web-scraper. Triggers: crawl4ai, seo crawl, site audit, page inventory, site inventory, on-page audit, internal links, internal linking audit, navigation audit, landing comparison, competitor analysis, competitor pages, orphan pages, technical seo, аудит сайта, краулер, перелинковка, навигационный аудит.
What it loads into context
Frontmatter
191 tokensAlways available to the agent
SKILL.md
1,851 tokensWhen the skill is activated
Reference documents
2,402 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Что умеет
- Config
- Workflow
- Scripts
- Extracted SEO Signals
- Navigation Audit Findings
- Связка с другими скиллами
- Cache Layout
- Output Hygiene
- References
Scripts executed separately
scripts/build_navigation_report.pyscripts/common.pyscripts/compare_pages.pyscripts/crawl_batch.pyscripts/doctor.pyscripts/seed_urls.py
Files
.gitignoreasset109 bytesSKILL.mdcore9,013 bytesSKILL.mdcore9,013 bytesSKILL.mdcore9,013 bytesSKILL.mdcore9,013 bytesSKILL.mdcore9,013 bytesSKILL.mdcore9,013 bytesSKILL.mdcore9,013 bytescache/.gitkeepasset0 bytesconfig/README.mddoc1,369 bytesconfig/defaults.example.jsonasset830 bytesreferences/OUTPUT_SCHEMA.mddoc4,189 bytesreferences/WORKFLOWS.mddoc5,360 bytesscripts/build_navigation_report.pyruns29,629 bytesscripts/common.pyruns9,458 bytesscripts/compare_pages.pyruns1,845 bytesscripts/crawl_batch.pyruns22,438 bytesscripts/doctor.pyruns6,880 bytesscripts/seed_urls.pyruns10,914 bytes
Read SKILL.md
# crawl4ai-seo
SEO-краулер для аудита сайтов и конкурентного анализа. Отвечает на вопрос: **"что реально лежит на страницах и как сайт устроен изнутри"**.
Не заменяет SERP-инструменты (позиции, видимость) — дополняет их данными о содержимом и структуре страниц.
## Что умеет
| Задача | Описание |
|--------|----------|
| **Site inventory** | Полная инвентаризация страниц: URL, status, title, H1, meta, canonical, word count |
| **On-page audit** | Поиск проблем: пустые title/H1, дубли заголовков, битые canonical, thin content |
| **Internal linking audit** | Граф внутренних ссылок, orphan pages (0 входящих), слабо связанные страницы |
| **Navigation audit** | Breadcrumbs, nav-блоки, menu consistency, hub-страницы без исходящих ссылок |View the complete source on GitHubdocx-contracts
When your agent uses it
Fill Word document templates (contracts, forms) with structured data using docxtpl. Use when user uploads a .docx template with {{variables}} and provides data to fill it, or requests contract/form generation from template.
What it loads into context
Frontmatter
54 tokensAlways available to the agent
SKILL.md
303 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Workflow
- Key Points
Scripts executed separately
scripts/extract_schema.pyscripts/fill_template.py
Files
SKILL.mdcore1,294 bytesscripts/extract_schema.pyruns832 bytesscripts/fill_template.pyruns774 bytes
Read SKILL.md
# docx-contracts
Automated contract and form filling using docxtpl library.
## Workflow
Be shure, that you recieve docx file. Don't try to read it.
1. **Extract schema**: Run `scripts/extract_schema.py <template.docx>` to get variables list and JSON schema. Don't read file. Just launch script.
2. **Gather data**: Extract values from user message context, matching schema fields. Use Claude completion for extraction if needed
3. **Handle missing data**: If any required field is missing or uncertain, ask user directly. Do not guess
4. **Fill template**: Create JSON file with data, then run `scripts/fill_template.py <template.docx> <data.json> <output.docx>`
5. **Deliver**: Move result to `/mnt/user-data/outputs/` and provide download link. Please don't read output file.
View the complete source on GitHubfal-ai-image
When your agent uses it
Generate/edit images via fal.ai. Supports Google Nano Banana Pro and OpenAI GPT Image 2 selected from config/.env. Supports reference images and strong text rendering. ALWAYS read SKILL.md before first use.
What it loads into context
Frontmatter
51 tokensAlways available to the agent
SKILL.md
2,225 tokensWhen the skill is activated
Reference documents
2,412 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- STOP — Read Before Acting
- Quick Start Decision
- Config
- Model Notes
- Workflow
- Scripts
- Cost Guidance
- Notes
Scripts executed separately
scripts/common.shscripts/edit.shscripts/generate.shscripts/tests/run.shscripts/tests/test_config_selector.shscripts/tests/test_edit_openai_mask.shscripts/tests/test_openai_image_size.shscripts/upload.sh
Files
.gitignoreasset65 bytesSKILL.mdcore8,403 bytesSKILL.mdcore8,403 bytesSKILL.mdcore8,403 bytesSKILL.mdcore8,403 bytesSKILL.mdcore8,403 bytesSKILL.mdcore8,403 bytesSKILL.mdcore8,403 bytesSKILL.mdcore8,403 bytesSKILL.mdcore8,403 bytesSKILL.mdcore8,403 bytesSKILL.mdcore8,403 bytesSKILL.mdcore8,403 bytesSKILL.mdcore8,403 bytesSKILL.mdcore8,403 bytesconfig/.env.exampleasset859 bytesconfig/README.mddoc5,258 bytesreferences/EDITING.mddoc2,533 bytesreferences/MODELS.mddoc1,596 bytesscripts/common.shruns13,317 bytesscripts/edit.shruns4,166 bytesscripts/generate.shruns3,730 bytesscripts/tests/run.shruns693 bytesscripts/tests/test_config_selector.shruns3,381 bytesscripts/tests/test_edit_openai_mask.shruns2,001 bytesscripts/tests/test_openai_image_size.shruns1,197 bytesscripts/upload.shruns2,327 bytes
Read SKILL.md
# fal-ai-image
Generate images via fal.ai. The skill now supports two fal-hosted models:
- **Google Nano Banana Pro** (`fal-ai/nano-banana-pro`) — default, backward-compatible
- **OpenAI GPT Image 2** (`openai/gpt-image-2`) — enabled from `config/.env`
Synonyms the agent should treat as equivalent:
- `gpt` = `openai` = GPT Image 2
- `nano banana` = `google` = `gemini` = Nano Banana Pro
Best for: infographics, text rendering, banners, photo edits, reference-based compositions.
View the complete source on GitHubgenome-analyzer
When your agent uses it
Анализирует генетические данные пользователя из VCF файла. Используй когда пользователь спрашивает о своей генетике, наследственных признаках, предрасположенностях, метаболизме веществ (кофеин, алкоголь, лекарства), спортивных способностях, рисках заболеваний, питании на основе генов.
What it loads into context
Frontmatter
76 tokensAlways available to the agent
SKILL.md
1,285 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- VCF файл
- Алгоритм работы
- Формат ответа
- Эмодзи для оформления
- Стиль написания
Files
SKILL.mdcore6,248 bytes
Read SKILL.md
# Genome Analyzer
Ты анализируешь генетические данные пользователя из VCF файла.
## VCF файл
VCF файл находится в текущей директории. Имя файла может быть любым (*.vcf).
## Алгоритм работы
### Шаг 0: Найти VCF файл
Используй **Glob** для поиска VCF файла в текущей директории:
- `pattern`: `*.vcf`
Если найдено несколько файлов — спроси пользователя какой использовать.View the complete source on GitHubgithub-pages-publisher
When your agent uses it
Publish static page artifacts from the publisher workspace to a GitHub Pages repository using a fine-grained token, with advisory image optimization and an original-image path. Use when a React/static page artifact is already prepared and needs to be copied into the Pages repo under a strict year/year-month/page-slug directory layout, then committed and pushed, with a final public artifact URL returned.
What it loads into context
Frontmatter
84 tokensAlways available to the agent
SKILL.md
1,038 tokensWhen the skill is activated
Reference documents
203 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Required repository layout
- What this skill expects
- Default publishing rules
- URL contract
- Workflow
- Publishing command
- Image optimization
- Slug rules
- Pre-publish validation
- Safety rules
- Config
- References
Scripts executed separately
scripts/optimize_images.pyscripts/publish_static.py
Files
.gitignoreasset12 bytesSKILL.mdcore4,781 bytesSKILL.mdcore4,781 bytesSKILL.mdcore4,781 bytesconfig/.env.exampleasset146 bytesconfig/README.mddoc487 bytesreferences/publish-checklist.mddoc342 bytesscripts/optimize_images.pyruns6,899 bytesscripts/publish_static.pyruns4,388 bytes
Read SKILL.md
# GitHub Pages Publisher
Publish already-built static artifacts to a GitHub Pages repository.
This skill is the **deployment/output layer** for page artifacts created by other skills.
## Required repository layout
Every published artifact must go into this path shape inside the target repo:
`<year>/<year>-<month>/<page-slug>/`
Example:
- `2026/2026-03/my-landing-page/`View the complete source on GitHubknowledge-compiler
When your agent uses it
Компилирует личные книги, PDF/EPUB/TXT/Markdown и длинные материалы в прикладной Claude Code skill с картой источников, решающими правилами, плейбуками, словарём и проверкой качества. Используй, когда пользователь просит превратить книгу, документ, учебник, статью или набор заметок в рабочий скилл, личную карту знаний, прикладного советника, справочник по источнику или reusable skill.
What it loads into context
Frontmatter
119 tokensAlways available to the agent
SKILL.md
2,071 tokensWhen the skill is activated
Reference documents
5,648 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Позиция
- Когда запускать
- Быстрый маршрут
- Фокус сборки
- Домены
- Работа с большими источниками
- Что читать по необходимости
- Ограничения
Scripts executed separately
scripts/build_skill_skeleton.shscripts/doctor.shscripts/extract_docling.pyscripts/extract_pdfminer.pyscripts/extract_pypdf.pyscripts/extract_source.pyscripts/outline_scout.pyscripts/prepare_source.shscripts/quality_gate.pyscripts/segment_text.pyscripts/tests/run.shscripts/tests/test_epub_metadata.shscripts/tests/test_non_pdf_no_pdf_deps.shscripts/tests/test_outline_scout.shscripts/tests/test_quality_gate.pyscripts/tests/test_quality_gate.shscripts/tests/test_segment_decision.shscripts/tests/test_toc_segmentation.shscripts/tests/test_uv_override_helpers.sh
Files
.gitignoreasset178 bytesSKILL.mdcore12,182 bytesSKILL.mdcore12,182 bytesSKILL.mdcore12,182 bytesSKILL.mdcore12,182 bytesSKILL.mdcore12,182 bytesSKILL.mdcore12,182 bytesSKILL.mdcore12,182 bytesSKILL.mdcore12,182 bytesSKILL.mdcore12,182 bytesSKILL.mdcore12,182 bytescache/.gitkeepasset1 bytesconfig/README.mddoc3,368 bytesconfig/defaults.example.jsonasset229 bytesreferences/BACKLOG.mddoc3,310 bytesreferences/COMPILATION_PLAYBOOK.mddoc5,188 bytesreferences/OUTPUT_SCHEMA.mddoc13,081 bytesreferences/QUALITY_GATE.mddoc8,589 bytesscripts/build_skill_skeleton.shruns7,053 bytesscripts/doctor.shruns881 bytesscripts/extract_docling.pyruns1,100 bytesscripts/extract_pdfminer.pyruns619 bytesscripts/extract_pypdf.pyruns1,024 bytesscripts/extract_source.pyruns15,640 bytesscripts/outline_scout.pyruns8,678 bytesscripts/prepare_source.shruns1,563 bytesscripts/quality_gate.pyruns25,163 bytesscripts/segment_text.pyruns14,309 bytesscripts/tests/fixtures/sample-source.txtdoc1,790 bytesscripts/tests/run.shruns743 bytesscripts/tests/test_epub_metadata.shruns2,766 bytesscripts/tests/test_non_pdf_no_pdf_deps.shruns1,253 bytesscripts/tests/test_outline_scout.shruns929 bytesscripts/tests/test_quality_gate.pyruns66,366 bytesscripts/tests/test_quality_gate.shruns141 bytesscripts/tests/test_segment_decision.shruns1,897 bytesscripts/tests/test_toc_segmentation.shruns1,620 bytesscripts/tests/test_uv_override_helpers.shruns940 bytes
Read SKILL.md
# knowledge-compiler
Компилирует источник в личный рабочий навык: не пересказ книги, а карту применимых идей с привязкой к местам источника. Подходит не только для технических книг, но и для менеджмента, маркетинга, продаж, продукта, обучения, внутренних руководств, отчётов и любых материалов с прикладной ценностью.
## Позиция
1. **Личный контур по умолчанию** — скилл собирается для индивидуальной работы с правомерно доступным источником. Публикационные режимы, юридические анкеты и сложные разрешения не входят в основной путь.
2. **Компиляция, а не републикация** — в результат идут понятия, эвристики, вопросы, решающие правила, плейбуки и анти-паттерны. Длинные цитаты, таблицы, листинги и схемы не копируй по умолчанию.
3. **Карта источников обязательна** — у каждого значимого тезиса должен быть указатель: сегмент, глава/заголовок, строки или символы, уверенность.
4. **Вывод переносимый** — готовый навык создаётся в выбранной папке, обычно `dist/<skill-name>/`. Установка в конкретную среду отдельным шагом.
5. **Кеш бережёт контекст** — полный текст и сегменты лежат в `cache/jobs/<job-id>/`; в ответ пользователю не выводи большие фрагменты.
## Когда запускать
View the complete source on GitHubperplexity-search
When your agent uses it
Поиск и ресёрч через Perplexity API: сырая выдача (Search API), ответ с цитатами (Agent API), deep research в фоне, чтение страниц. Cache-first: крупные результаты уходят в cache/ и читаются грепом. Triggers: perplexity, перплексити, perplexity search, sonar api, найди в интернете, поищи в сети, web search, свежая информация, deep research, глубокое исследование, ответ с источниками, прочитай страницу, fetch url, что пишут про.
What it loads into context
Frontmatter
134 tokensAlways available to the agent
SKILL.md
3,099 tokensWhen the skill is activated
Reference documents
4,421 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Перед запуском
- Config
- Philosophy
- Выбор скрипта
- Workflow
- Scripts
- Общие параметры
- Кеш
- Ограничения
- Тесты
Scripts executed separately
scripts/ask.shscripts/cache_grep.shscripts/common.shscripts/fetch_url.shscripts/find_latest.shscripts/prepare_runtime.shscripts/research.shscripts/sanitize_env.shscripts/search.shscripts/tests/run.shscripts/tests/test_build_agent_body.shscripts/tests/test_build_search_body.shscripts/tests/test_cache.shscripts/tests/test_cli.shscripts/tests/test_config_loader.shscripts/tests/test_dates.shscripts/tests/test_http.shscripts/tests/test_render.shscripts/tests/test_research.shscripts/tests/test_signals.sh
Files
.gitignoreasset36 bytesSKILL.mdcore14,048 bytesSKILL.mdcore14,048 bytesSKILL.mdcore14,048 bytesSKILL.mdcore14,048 bytesSKILL.mdcore14,048 bytesSKILL.mdcore14,048 bytesSKILL.mdcore14,048 bytesSKILL.mdcore14,048 bytesSKILL.mdcore14,048 bytesSKILL.mdcore14,048 bytesSKILL.mdcore14,048 bytesSKILL.mdcore14,048 bytescache/.gitkeepasset0 bytesconfig/.env.exampleasset3,833 bytesconfig/README.mddoc6,950 bytesreferences/API_REFERENCE.mddoc11,578 bytesscripts/ask.shruns6,385 bytesscripts/cache_grep.shruns2,927 bytesscripts/common.shruns37,909 bytesscripts/fetch_url.shruns4,152 bytesscripts/find_latest.shruns2,596 bytesscripts/prepare_runtime.shruns772 bytesscripts/research.shruns15,272 bytesscripts/sanitize_env.shruns1,430 bytesscripts/search.shruns5,037 bytesscripts/tests/fixtures/agent_failed.jsonasset251 bytesscripts/tests/fixtures/agent_response.jsonasset1,425 bytesscripts/tests/fixtures/search_response.jsonasset782 bytesscripts/tests/run.shruns1,018 bytesscripts/tests/test_build_agent_body.shruns7,614 bytesscripts/tests/test_build_search_body.shruns4,775 bytesscripts/tests/test_cache.shruns5,184 bytesscripts/tests/test_cli.shruns3,397 bytesscripts/tests/test_config_loader.shruns9,604 bytesscripts/tests/test_dates.shruns2,723 bytesscripts/tests/test_http.shruns7,245 bytesscripts/tests/test_render.shruns2,909 bytesscripts/tests/test_research.shruns9,172 bytesscripts/tests/test_signals.shruns2,103 bytes
Read SKILL.md
# perplexity-search
Работа с [Perplexity API](https://docs.perplexity.ai) на POSIX-shell. Четыре режима:
сырая выдача, ответ с цитатами, длинный ресёрч в фоне, извлечение страниц.
## Перед запуском
Директория установленного плагина обычно read-only, а скрипты пишут в `cache/`.
Создай рабочую копию и работай из неё:
```bash
sh scripts/prepare_runtime.sh
cd /home/claude/perplexity-search
```View the complete source on GitHubreddit-skill
When your agent uses it
Reddit: чтение постов и комментариев без ключей через веб-инструмент агента, RSS и публичный JSON; API для пользователей, сабреддитов и поиска. OAuth2, кеш, автоматический переход на RSS при отказе авторизации, опциональные write-операции с двойным предохранителем (REDDIT_ENABLE_WRITE=1 + --confirm). Triggers: reddit, reddit api, reddit subreddit, reddit user, reddit post, reddit search, парсинг reddit, посты reddit, комментарии reddit, реддит.
What it loads into context
Frontmatter
131 tokensAlways available to the agent
SKILL.md
3,642 tokensWhen the skill is activated
Reference documents
4,267 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Выбор способа чтения
- Настройка скриптов
- Поведение скриптов
- Использование скриптов
- Scripts
- Кеш скриптов
- Examples
- Rate limits
- Tests
- Differences from upstream
- Документация
Scripts executed separately
scripts/auth_check.shscripts/comment_reply.shscripts/common.shscripts/me.shscripts/post_create.shscripts/rss_to_listing.pyscripts/search.shscripts/submission.shscripts/subreddit_info.shscripts/subreddit_popular.shscripts/subreddit_stats.shscripts/subreddit_subscribe.shscripts/subreddit_top.shscripts/tests/run.shscripts/tests/test_cache_key.shscripts/tests/test_load_config.shscripts/tests/test_rss_mode.shscripts/tests/test_rss_parser.shscripts/tests/test_token_expiry.shscripts/tests/test_url_parse.shscripts/tests/test_write_guard.shscripts/user_comments.shscripts/user_info.shscripts/user_posts.sh
Files
.gitignoreasset36 bytesSKILL.mdcore17,841 bytesSKILL.mdcore17,841 bytesSKILL.mdcore17,841 bytesSKILL.mdcore17,841 bytesSKILL.mdcore17,841 bytescache/.gitkeepasset0 bytesconfig/.env.exampleasset1,596 bytesconfig/README.mddoc22,250 bytesconfig/subscriptions.txtdoc414 bytesscripts/auth_check.shruns785 bytesscripts/comment_reply.shruns2,061 bytesscripts/common.shruns21,935 bytesscripts/me.shruns878 bytesscripts/post_create.shruns3,181 bytesscripts/rss_to_listing.pyruns4,562 bytesscripts/search.shruns1,597 bytesscripts/submission.shruns2,681 bytesscripts/subreddit_info.shruns1,407 bytesscripts/subreddit_popular.shruns880 bytesscripts/subreddit_stats.shruns2,393 bytesscripts/subreddit_subscribe.shruns1,332 bytesscripts/subreddit_top.shruns3,241 bytesscripts/tests/fixtures/posts.atomasset1,082 bytesscripts/tests/run.shruns668 bytesscripts/tests/test_cache_key.shruns1,361 bytesscripts/tests/test_load_config.shruns2,775 bytesscripts/tests/test_rss_mode.shruns12,278 bytesscripts/tests/test_rss_parser.shruns3,472 bytesscripts/tests/test_token_expiry.shruns2,223 bytesscripts/tests/test_url_parse.shruns2,281 bytesscripts/tests/test_write_guard.shruns3,629 bytesscripts/user_comments.shruns1,409 bytesscripts/user_info.shruns1,678 bytesscripts/user_posts.shruns1,212 bytes
Read SKILL.md
# reddit-skill
Чтение публичных списков через RSS, постов и комментариев через `.json` без ключей,
а также прямой доступ к Reddit API
через OAuth2 без PRAW. Порт MCP-сервера
[Arindam200/reddit-mcp](https://github.com/Arindam200/reddit-mcp) на shell-скрипты
по образцу yandex-metrika / yandex-search-api.
## Выбор способа чтения
Для публичного чтения по пользовательским подпискам, в том числе RSS-мониторинга,
бери список из [config/subscriptions.txt](config/subscriptions.txt): одно название
сабреддита на строку, без `r/`. Сабреддиты, явно заданные в запросе, имеют приоритет
над сохранённым списком. Не ищи подписки в `.env` или аккаунте и не подключайView the complete source on GitHubscrapedo-web-scraper
When your agent uses it
Веб-скрапинг через Scrape.do. Обходит блокировки и CAPTCHA. АВТОМАТИЧЕСКИ используй при ошибках WebFetch: 403, 401, 429, timeout, access denied, Cloudflare block.
What it loads into context
Frontmatter
69 tokensAlways available to the agent
SKILL.md
283 tokensWhen the skill is activated
Reference documents
134 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Использование
- Из Python
- Результат
Scripts executed separately
scripts/scrape.py
Files
.gitignoreasset246 bytesSKILL.mdcore1,341 bytesSKILL.mdcore1,341 bytesSKILL.mdcore1,341 bytesconfig/README.mddoc599 bytesconfig/token.txt.exampleasset24 bytesscripts/scrape.pyruns6,728 bytes
Read SKILL.md
# Scrape.do Web Scraper
Скрапинг веб-страниц через Scrape.do API. Используй когда обычный fetch не работает (блокировка, JavaScript).
## Использование
```bash
# Получить текст страницы
python scripts/scrape.py https://example.com
# Получить HTML
python scripts/scrape.py --html https://example.com
```
View the complete source on GitHubsourcecraft-publisher
When your agent uses it
Publish static page artifacts to SourceCraft Sites (Yandex infrastructure, works in Russia), with advisory image optimization and an original-image path. Use when a static page/React artifact needs to be deployed to SourceCraft under YYYY/YYYY-MM/page-slug directory layout.
What it loads into context
Frontmatter
61 tokensAlways available to the agent
SKILL.md
906 tokensWhen the skill is activated
Reference documents
457 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Required repository layout
- What this skill expects
- Config
- Workflow
- Publishing command
- Image optimization
- Slug rules
- URL contract
- Pre-publish validation
- Safety rules
- References
Scripts executed separately
scripts/optimize_images.pyscripts/publish_static.py
Files
.gitignoreasset12 bytesSKILL.mdcore3,962 bytesSKILL.mdcore3,962 bytesSKILL.mdcore3,962 bytesSKILL.mdcore3,962 bytesconfig/.env.exampleasset470 bytesconfig/README.mddoc1,712 bytesreferences/publish-checklist.mddoc390 bytesscripts/optimize_images.pyruns6,899 bytesscripts/publish_static.pyruns5,719 bytes
Read SKILL.md
# SourceCraft Publisher
Publish already-built static artifacts to a SourceCraft Sites repository. Works from Russia (Yandex infrastructure).
This skill is the **deployment/output layer** for page artifacts created by other skills (e.g. `telegram-channel-parser` digest).
## Required repository layout
Every published artifact must go into this path shape inside the target repo:
`<year>/<year>-<month>/<page-slug>/`
Example:
- `2026/2026-03/ai-digest-week/`View the complete source on GitHubssh-remote-connection
When your agent uses it
SSH connection to remote servers. Use when you need to execute commands on a remote server, check logs, restart services, or manage Docker containers.
What it loads into context
Frontmatter
39 tokensAlways available to the agent
SKILL.md
578 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Usage
- Setup
- Important Notes
- Example Commands
Scripts executed separately
scripts/connect.sh
Files
.gitignoreasset59 bytesSKILL.mdcore2,475 bytesSKILL.mdcore2,475 bytesSKILL.mdcore2,475 bytesSKILL.mdcore2,475 bytesSKILL.mdcore2,475 bytesSKILL.mdcore2,475 bytesSKILL.mdcore2,475 bytesSKILL.mdcore2,475 bytesSKILL.mdcore2,475 bytesSKILL.mdcore2,475 bytesSKILL.mdcore2,475 bytesSKILL.mdcore2,475 bytesSKILL.mdcore2,475 bytesconfig/.env.exampleasset827 bytesscripts/connect.shruns5,914 bytes
Read SKILL.md
# SSH Remote Connection
Universal skill for connecting to remote servers via SSH.
## Usage
```bash
# Interactive shell
scripts/connect.sh
# Run command directly
scripts/connect.sh "docker compose logs backend --tail 50"
```
View the complete source on GitHubtelegram-channel-parser
When your agent uses it
Парсинг публичных Telegram-каналов через веб-превью t.me/s/. Посты, метрики, аналитика, дайджесты, конкурентный анализ. Cache-first подход для гигиены контекстного окна. Triggers: telegram канал, telegram channel, парсинг телеграм, дайджест каналов, telegram digest, анализ канала, шер-парад, telegram analytics, мониторинг каналов.
What it loads into context
Frontmatter
104 tokensAlways available to the agent
SKILL.md
2,335 tokensWhen the skill is activated
Reference documents
462 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Перед запуском
- Config
- Philosophy
- Workflow
- React-артифакт для дайджеста
- Scripts
- Общие параметры
- Ввод канала
- Ограничения
Scripts executed separately
assets/digest-feed.tsxscripts/channel_info.shscripts/common.shscripts/compare_channels.shscripts/digest.shscripts/digest_json.shscripts/export_csv.shscripts/fetch_posts.shscripts/parse_tg_posts.awkscripts/posting_schedule.shscripts/prepare_runtime.shscripts/sanitize_env.shscripts/search_posts.shscripts/tests/run.shscripts/tests/test_config_loader.shscripts/tests/test_parse_tg_posts.shscripts/tests/test_reuse_latest.shscripts/top_posts.sh
Files
.gitignoreasset28 bytesSKILL.mdcore11,083 bytesSKILL.mdcore11,083 bytesSKILL.mdcore11,083 bytesSKILL.mdcore11,083 bytesSKILL.mdcore11,083 bytesSKILL.mdcore11,083 bytesSKILL.mdcore11,083 bytesSKILL.mdcore11,083 bytesSKILL.mdcore11,083 bytesSKILL.mdcore11,083 bytesSKILL.mdcore11,083 bytesSKILL.mdcore11,083 bytesSKILL.mdcore11,083 bytesSKILL.mdcore11,083 bytesSKILL.mdcore11,083 bytesassets/digest-feed.tsxruns9,149 bytesconfig/.env.exampleasset1,523 bytesconfig/README.mddoc2,298 bytesscripts/channel_info.shruns768 bytesscripts/common.shruns7,133 bytesscripts/compare_channels.shruns2,379 bytesscripts/digest.shruns2,061 bytesscripts/digest_json.shruns3,240 bytesscripts/export_csv.shruns1,101 bytesscripts/fetch_posts.shruns1,325 bytesscripts/parse_tg_posts.awkruns5,736 bytesscripts/posting_schedule.shruns2,439 bytesscripts/prepare_runtime.shruns673 bytesscripts/sanitize_env.shruns650 bytesscripts/search_posts.shruns1,116 bytesscripts/tests/run.shruns234 bytesscripts/tests/test_config_loader.shruns863 bytesscripts/tests/test_parse_tg_posts.shruns6,909 bytesscripts/tests/test_reuse_latest.shruns5,953 bytesscripts/top_posts.shruns2,315 bytes
Read SKILL.md
# telegram-channel-parser
Парсинг публичных Telegram-каналов через веб-превью (t.me/s/). Без API-ключей, без MTProto, zero config.
## Перед запуском
Перед любым запуском скриптов создай рабочую копию скилла в `/home/claude/telegram-channel-parser` и работай уже из неё:
```bash
bash scripts/prepare_runtime.sh
cd /home/claude/telegram-channel-parser
```
`prepare_runtime.sh` копирует скилл и, если есть `config/.env`, нормализует его через `sed -i`: некавыченные значения с пробелами или кириллицей оборачиваются в кавычки в рабочей копии.View the complete source on GitHubtelegraph-publisher
When your agent uses it
Publish and manage Telegraph pages with media, page-view statistics, and auto-split for long articles. ALWAYS read SKILL.md before first use.
What it loads into context
Frontmatter
39 tokensAlways available to the agent
SKILL.md
3,920 tokensWhen the skill is activated
Reference documents
6,495 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- STOP — Read Before Acting
- Quick Start
- Account & Ownership
- Compatibility
- Config
- Content Format
- Scripts
- Media Support
- Optional: Illustrations with fal-ai-image
- Limitations (v1)
Scripts executed separately
scripts/account_info.shscripts/common.shscripts/content_converter.pyscripts/create_account.shscripts/create_page.shscripts/diagram_encode.pyscripts/edit_page.shscripts/github_delete_page_assets.shscripts/github_manifest.pyscripts/github_upload.shscripts/list_pages.shscripts/page_views.shscripts/parse_response.pyscripts/render_diagram.shscripts/tests/test_author_defaults.shscripts/upload.sh
Files
.gitignoreasset12 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesSKILL.mdcore15,992 bytesconfig/.env.exampleasset670 bytesconfig/README.mddoc7,138 bytesreferences/CONTENT_FORMAT.mddoc6,252 bytesreferences/DIAGRAMS.mddoc3,749 bytesreferences/FAL_AI_INTEGRATION.mddoc2,627 bytesreferences/IMAGE_WORKFLOWS.mddoc5,028 bytesreferences/YOUTUBE_EMBEDS.mddoc1,732 bytesscripts/account_info.shruns1,184 bytesscripts/common.shruns3,789 bytesscripts/content_converter.pyruns11,761 bytesscripts/create_account.shruns3,048 bytesscripts/create_page.shruns6,140 bytesscripts/diagram_encode.pyruns3,225 bytesscripts/edit_page.shruns2,707 bytesscripts/github_delete_page_assets.shruns5,638 bytesscripts/github_manifest.pyruns2,438 bytesscripts/github_upload.shruns6,140 bytesscripts/list_pages.shruns602 bytesscripts/page_views.shruns3,403 bytesscripts/parse_response.pyruns2,772 bytesscripts/render_diagram.shruns4,823 bytesscripts/tests/test_author_defaults.shruns10,615 bytesscripts/upload.shruns3,389 bytes
Read SKILL.md
# telegraph-publisher
Publish content to Telegraph via API with media support.
Best for: articles, research reports, documentation, illustrated content.
## STOP — Read Before Acting
- **DO NOT** pass raw markdown — convert to HTML fragment first (Telegraph API accepts Node JSON, the converter accepts HTML)
- **DO NOT** pass content larger than 64KB without using auto-split — the script handles this automatically
- **DO NOT** hardcode access tokens — use `config/.env`
- **DO NOT** skip account setup before publishing, editing, listing pages, or reading account details — page-view lookup is public
## Quick Start
View the complete source on GitHubx-research
When your agent uses it
X/Twitter research via xAI Grok API with x_search tool. Digests, thread analysis, trending topics, custom search. Designed for finding Telegram post ideas from X discussions. Triggers: x research, twitter research, x digest, twitter digest, что в твиттере, дайджест твиттера, тренды x, trending x, analyze tweet, анализ твита, x search, поиск в твиттере.
What it loads into context
Frontmatter
105 tokensAlways available to the agent
SKILL.md
1,923 tokensWhen the skill is activated
Reference documents
1,554 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Перед запуском
- Config
- Philosophy
- Workflow
- Scripts
- Common parameters
- Artifact store
- API limits
- Limitations
Scripts executed separately
scripts/analyze.shscripts/common.shscripts/digest.shscripts/find_latest.shscripts/prepare_runtime.shscripts/sanitize_env.shscripts/search.shscripts/tests/run.shscripts/tests/test_config_loader.shscripts/trending.sh
Files
.gitignoreasset42 bytesSKILL.mdcore7,663 bytesSKILL.mdcore7,663 bytesSKILL.mdcore7,663 bytesSKILL.mdcore7,663 bytesSKILL.mdcore7,663 bytesSKILL.mdcore7,663 bytesSKILL.mdcore7,663 bytesSKILL.mdcore7,663 bytesSKILL.mdcore7,663 bytesSKILL.mdcore7,663 bytesSKILL.mdcore7,663 bytesSKILL.mdcore7,663 bytesSKILL.mdcore7,663 bytesconfig/.env.exampleasset2,070 bytesconfig/README.mddoc2,128 bytesreferences/API_REFERENCE.mddoc3,661 bytesscripts/analyze.shruns4,347 bytesscripts/common.shruns14,849 bytesscripts/digest.shruns6,340 bytesscripts/find_latest.shruns3,141 bytesscripts/prepare_runtime.shruns661 bytesscripts/sanitize_env.shruns649 bytesscripts/search.shruns3,823 bytesscripts/tests/run.shruns135 bytesscripts/tests/test_config_loader.shruns1,284 bytesscripts/trending.shruns3,657 bytes
Read SKILL.md
# x-research
Research X/Twitter via xAI Grok API. Grok's `x_search` tool searches X in real-time and returns synthesized analysis with citations.
## Перед запуском
Перед любым запуском скриптов создай рабочую копию скилла в `/home/claude/x-research` и работай уже из неё:
```bash
sh scripts/prepare_runtime.sh
cd /home/claude/x-research
```
`prepare_runtime.sh` копирует скилл и, если есть `config/.env`, нормализует его через `sed -i`: некавыченные значения с пробелами оборачиваются в кавычки в рабочей копии. Не выводи содержимое `.env` в ответ; при ошибке формата подскажи пользователю, какие строки нужно заключить в кавычки.View the complete source on GitHubyandex-direct
When your agent uses it
Работа с рекламой в Яндекс Директе через официальный API: анализ статистики, конверсий и поисковых запросов, аудит, создание и изменение кампаний, объявлений, фраз, ставок, условий ретаргетинга и настроек, выгрузки и предпросмотр. Используй для задач о рекламе Директа, ЕПК, расходах, эффективности, позициях в поиске, модерации, минус-фразах и управлении рекламным кабинетом.
What it loads into context
Frontmatter
117 tokensAlways available to the agent
SKILL.md
5,690 tokensWhen the skill is activated
Reference documents
90,719 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1. Определи задачу и объекты
- 2. Определи, что считать результатом
- 3. Собери данные нужного уровня
- 4. Рассчитай и объясни показатели
- 5. Отдели наблюдение от решения
- 6. Подготовь действие и проверь результат
- Команды и справочники
- Если часть задачи выполняется в интерфейсе
- Регулярные проверки и управление через ZoomKit
- Как представить результат
Scripts executed separately
scripts/account_budget.pyscripts/accounts.pyscripts/adgroups.pyscripts/ads.pyscripts/ads_generate.pyscripts/ads_write.pyscripts/audit_combinatorial.pyscripts/bids.pyscripts/cache.pyscripts/campaign_dump.pyscripts/campaign_write.pyscripts/campaigns.pyscripts/cross_negative.pyscripts/extensions.pyscripts/feeds.pyscripts/images.pyscripts/keywords.pyscripts/keywords_write.pyscripts/lib/accounts.pyscripts/lib/ad_extensions.pyscripts/lib/cache.pyscripts/lib/combinatorial.pyscripts/lib/config.pyscripts/lib/constants.pyscripts/lib/diff.pyscripts/lib/direct.pyscripts/lib/errors.pyscripts/lib/extension_writes.pyscripts/lib/feed_objects.pyscripts/lib/incoming.pyscripts/lib/money.pyscripts/lib/objects.pyscripts/lib/payload.pyscripts/lib/phrases.pyscripts/lib/policy.pyscripts/lib/preferences.pyscripts/lib/preview_media.pyscripts/lib/preview_source.pyscripts/lib/protocol.pyscripts/lib/rendering.pyscripts/lib/reports.pyscripts/lib/responsive.pyscripts/lib/retargeting_lists.pyscripts/lib/templates.pyscripts/lib/ui_links.pyscripts/lib/writer.pyscripts/preview.pyscripts/report.pyscripts/retargeting.pyscripts/shopping.pyscripts/tests/test_campaign_goals.pyscripts/tests/test_campaign_placements.pyscripts/tests/test_constants.pyscripts/tests/test_extensions.pyscripts/tests/test_feeds.pyscripts/tests/test_payload.pyscripts/tests/test_report_attribution.pyscripts/tests/test_retargeting.pyscripts/tests/test_shopping.pyscripts/whoami.py
Files
.gitignoreasset191 bytesSKILL.mdcore35,393 bytesSKILL.mdcore35,393 bytesSKILL.mdcore35,393 bytesSKILL.mdcore35,393 bytesassets/previews/page.htmlasset9,777 bytesconfig/.env.exampleasset880 bytesconfig/API_ACCESS.mddoc12,409 bytesconfig/README.mddoc5,303 bytesreferences/AD_CONTENT.mddoc8,331 bytesreferences/API_MAP.mddoc11,765 bytesreferences/API_OBJECTS.mddoc73,799 bytesreferences/AUTOTARGETING.mddoc11,998 bytesreferences/BUDGETS.mddoc23,319 bytesreferences/CHANGES.mddoc18,576 bytesreferences/CLIENT_LOGIN.mddoc4,912 bytesreferences/COMBINATORIAL_COPY.mddoc7,221 bytesreferences/ERRORS_AND_LIMITS.mddoc45,899 bytesreferences/EXTENSIONS.mddoc11,650 bytesreferences/FEEDS.mddoc16,021 bytesreferences/GOALS.mddoc10,050 bytesreferences/MANUAL_SETUP.mddoc25,275 bytesreferences/PLACEMENTS.mddoc10,685 bytesreferences/PLAYBOOK.mddoc76,155 bytesreferences/PREVIEW.mddoc12,173 bytesreferences/REPORTS.mddoc20,604 bytesreferences/RETARGETING.mddoc8,634 bytesreferences/TEMPLATES.mddoc10,578 bytesreferences/UI_MAP.mddoc45,562 bytesreferences/ZOOMKIT.mddoc8,988 bytesreferences/ad_content.jsonasset58,399 bytesreferences/api_map.jsonasset137,437 bytesreferences/campaign_defaults.jsonasset12,687 bytesreferences/coverage.jsonasset239,381 bytesreferences/health_checks.jsonasset155,449 bytesreferences/hypotheses.mddoc20,112 bytesreferences/limits.jsonasset54,866 bytesreferences/naming.mddoc7,170 bytesreferences/report_presets.jsonasset72,013 bytesreferences/ui_deeplinks.jsonasset51,292 bytesreferences/url_macros.mddoc7,826 bytesscripts/account_budget.pyruns13,046 bytesscripts/accounts.pyruns11,894 bytesscripts/adgroups.pyruns18,654 bytesscripts/ads.pyruns31,351 bytesscripts/ads_generate.pyruns43,682 bytesscripts/ads_write.pyruns102,112 bytesscripts/audit_combinatorial.pyruns124,719 bytesscripts/bids.pyruns95,518 bytesscripts/cache.pyruns6,994 bytesscripts/campaign_dump.pyruns12,736 bytesscripts/campaign_write.pyruns124,823 bytesscripts/campaigns.pyruns83,420 bytesscripts/cross_negative.pyruns25,347 bytesscripts/extensions.pyruns20,748 bytesscripts/feeds.pyruns16,823 bytesscripts/images.pyruns11,675 bytesscripts/keywords.pyruns17,394 bytesscripts/keywords_write.pyruns104,662 bytesscripts/lib/accounts.pyruns76,000 bytesscripts/lib/ad_extensions.pyruns6,540 bytesscripts/lib/cache.pyruns83,616 bytesscripts/lib/combinatorial.pyruns49,082 bytesscripts/lib/config.pyruns17,752 bytesscripts/lib/constants.pyruns14,547 bytesscripts/lib/diff.pyruns17,146 bytesscripts/lib/direct.pyruns85,673 bytesscripts/lib/errors.pyruns23,643 bytesscripts/lib/extension_writes.pyruns11,060 bytesscripts/lib/feed_objects.pyruns3,598 bytesscripts/lib/incoming.pyruns28,260 bytesscripts/lib/money.pyruns7,838 bytesscripts/lib/objects.pyruns59,081 bytesscripts/lib/payload.pyruns1,129 bytesscripts/lib/phrases.pyruns98,816 bytesscripts/lib/policy.pyruns3,989 bytesscripts/lib/preferences.pyruns46,670 bytesscripts/lib/preview_media.pyruns9,640 bytesscripts/lib/preview_source.pyruns10,732 bytesscripts/lib/protocol.pyruns23,597 bytesscripts/lib/rendering.pyruns44,981 bytesscripts/lib/reports.pyruns56,244 bytesscripts/lib/responsive.pyruns37,287 bytesscripts/lib/retargeting_lists.pyruns1,667 bytesscripts/lib/templates.pyruns61,562 bytesscripts/lib/ui_links.pyruns1,507 bytesscripts/lib/writer.pyruns116,988 bytesscripts/preview.pyruns25,077 bytesscripts/report.pyruns54,062 bytesscripts/retargeting.pyruns11,757 bytesscripts/shopping.pyruns22,735 bytesscripts/tests/test_campaign_goals.pyruns9,720 bytesscripts/tests/test_campaign_placements.pyruns11,726 bytesscripts/tests/test_constants.pyruns2,583 bytesscripts/tests/test_extensions.pyruns14,517 bytesscripts/tests/test_feeds.pyruns16,985 bytesscripts/tests/test_payload.pyruns1,552 bytesscripts/tests/test_report_attribution.pyruns3,178 bytesscripts/tests/test_retargeting.pyruns20,062 bytesscripts/tests/test_shopping.pyruns18,408 bytesscripts/whoami.pyruns38,101 bytes
Read SKILL.md
# Яндекс Директ
Скилл помогает исследовать рекламу, объяснять её результаты, готовить материалы
и управлять рекламным кабинетом. Выбирай команды по задаче пользователя.
Один и тот же порядок подходит для отдельного объявления, кампании и кабинета:
**Задача → нужные данные → расчёт и объяснение → действие → проверка результата.**
Все пути ниже относятся к каталогу этого файла. Запуск: `uv run scripts/…`.
Также подходит `python3 scripts/…` с Python 3.11 и новее; сторонних библиотек нет.
Параметры конкретной команды доступны через `--help`.
## 1. Определи задачу и объекты
View the complete source on GitHubyandex-metrika
When your agent uses it
Яндекс Метрика: детализация трафика по источникам и UTM-меткам, отчёты по конверсиям и поисковым системам, API-сегменты и доступы к счётчикам. Cache-first подход для гигиены контекстного окна. Triggers: яндекс метрика, yandex metrika, metrika analytics, метрика трафик, метрика конверсии, метрика отчёт, создать сегмент, доступ к счётчику, выдать доступ рекламному кабинету.
What it loads into context
Frontmatter
130 tokensAlways available to the agent
SKILL.md
2,581 tokensWhen the skill is activated
Reference documents
8,383 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Config
- Philosophy
- Workflow
- Сегменты и доступы
- Scripts
- Общие параметры отчётных скриптов
- Кеш-стратегия
- Расширенные сценарии
- Лимиты API
Scripts executed separately
scripts/common.shscripts/comparison.shscripts/conversions.shscripts/counter_info.shscripts/counters.shscripts/direct_clients.shscripts/direct_costs.shscripts/ecommerce.shscripts/goals.shscripts/grants.shscripts/management_json.pyscripts/search_engines.shscripts/segments.shscripts/tests/test_conversions.pyscripts/tests/test_management.pyscripts/traffic_summary.shscripts/utm_report.sh
Files
.gitignoreasset36 bytesSKILL.mdcore12,392 bytesSKILL.mdcore12,392 bytesSKILL.mdcore12,392 bytesSKILL.mdcore12,392 bytesSKILL.mdcore12,392 bytesSKILL.mdcore12,392 bytesSKILL.mdcore12,392 bytescache/.gitkeepasset0 bytesconfig/.env.exampleasset43 bytesconfig/README.mddoc2,933 bytesreferences/ACCESS.mddoc6,503 bytesreferences/API_REFERENCE.mddoc6,462 bytesreferences/CUSTOM_REPORTS.mddoc3,016 bytesreferences/DIRECT_COSTS.mddoc5,459 bytesreferences/PERIOD_COMPARISON.mddoc2,592 bytesreferences/SEARCH_QUERIES.mddoc1,629 bytesreferences/SEGMENTS.mddoc9,895 bytesscripts/common.shruns18,888 bytesscripts/comparison.shruns3,785 bytesscripts/conversions.shruns6,617 bytesscripts/counter_info.shruns2,360 bytesscripts/counters.shruns2,648 bytesscripts/direct_clients.shruns2,498 bytesscripts/direct_costs.shruns4,866 bytesscripts/ecommerce.shruns3,380 bytesscripts/goals.shruns2,117 bytesscripts/grants.shruns11,179 bytesscripts/management_json.pyruns7,221 bytesscripts/merge_conversions.awkasset4,460 bytesscripts/search_engines.shruns2,293 bytesscripts/segments.shruns10,045 bytesscripts/tests/test_conversions.pyruns17,173 bytesscripts/tests/test_management.pyruns24,450 bytesscripts/traffic_summary.shruns2,278 bytesscripts/utm_report.shruns2,219 bytes
Read SKILL.md
# yandex-metrika
Работа с API Яндекс Метрики: детализация трафика по источникам и UTM-меткам,
отчёты по конверсиям и поисковым системам, API-сегменты и прямые доступы к
счётчикам.
## Config
Требуется `YANDEX_METRIKA_TOKEN` в `config/.env`. Для чтения нужен доступ
`metrika:read`, для создания сегментов и управления доступами — `metrika:write`.
Инструкция: `config/README.md`.
## Philosophy
View the complete source on GitHubyandex-search-api
When your agent uses it
Поиск в Яндексе через Yandex Cloud Search API v2 с содержательными выдержками найденных страниц (smart snippets) — материал для ответа, а не только ссылки. Синхронный и асинхронный режимы, кэш результатов. Triggers: yandex search api, поиск в яндексе, выдача яндекса, serp яндекс, парсинг выдачи, smart snippets, смарт-сниппеты, инфоконтексты, выдержки страниц, найди в яндексе, что пишут в рунете.
What it loads into context
Frontmatter
141 tokensAlways available to the agent
SKILL.md
3,581 tokensWhen the skill is activated
Reference documents
4,756 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Инфоконтексты (Smart Snippets)
- Config
- Workflow
- Scripts
- Output Format
- Tests
- Popular Region IDs
- Pricing
- Example Session
Scripts executed separately
scripts/common.shscripts/iam_token_get.shscripts/regions_tree.shscripts/search_region.shscripts/tests/helpers.shscripts/tests/run.shscripts/tests/test_api_key_auth.shscripts/tests/test_api_key_scripts.shscripts/tests/test_build_search_body.shscripts/tests/test_cache.shscripts/tests/test_cli.shscripts/tests/test_config.shscripts/tests/test_iam_token_get.shscripts/tests/test_parse_response.shscripts/tests/test_render.shscripts/tests/test_search_region.shscripts/web_search_async.shscripts/web_search_sync.sh
Files
.gitignoreasset189 bytesSKILL.mdcore16,650 bytesSKILL.mdcore16,650 bytesSKILL.mdcore16,650 bytesSKILL.mdcore16,650 bytesSKILL.mdcore16,650 bytesSKILL.mdcore16,650 bytesSKILL.mdcore16,650 bytesSKILL.mdcore16,650 bytesSKILL.mdcore16,650 bytesSKILL.mdcore16,650 bytesSKILL.mdcore16,650 bytesSKILL.mdcore16,650 bytesSKILL.mdcore16,650 bytesSKILL.mdcore16,650 bytesSKILL.mdcore16,650 bytescache/.gitkeepasset0 bytesconfig/.env.exampleasset183 bytesconfig/README.mddoc10,483 bytesconfig/config.example.jsonasset551 bytesreferences/SMART_SNIPPETS.mddoc13,377 bytesscripts/common.shruns29,585 bytesscripts/iam_token_get.shruns4,709 bytesscripts/regions_tree.shruns1,523 bytesscripts/search_region.shruns2,355 bytesscripts/tests/fixtures/broken_response.xmlasset197 bytesscripts/tests/fixtures/config.jsonasset564 bytesscripts/tests/fixtures/infocontext_live.jsonasset1,856 bytesscripts/tests/fixtures/infocontext_response.jsonasset1,101 bytesscripts/tests/fixtures/search_response.xmlasset2,022 bytesscripts/tests/helpers.shruns1,394 bytesscripts/tests/run.shruns1,594 bytesscripts/tests/test_api_key_auth.shruns5,802 bytesscripts/tests/test_api_key_scripts.shruns4,602 bytesscripts/tests/test_build_search_body.shruns5,952 bytesscripts/tests/test_cache.shruns3,539 bytesscripts/tests/test_cli.shruns4,920 bytesscripts/tests/test_config.shruns2,018 bytesscripts/tests/test_iam_token_get.shruns2,092 bytesscripts/tests/test_parse_response.shruns7,761 bytesscripts/tests/test_render.shruns9,053 bytesscripts/tests/test_search_region.shruns1,122 bytesscripts/web_search_async.shruns12,547 bytesscripts/web_search_sync.shruns8,733 bytes
Read SKILL.md
# yandex-search-api
Parse Yandex SERP via Yandex Cloud Search API v2 (sync + async).
## Инфоконтексты (Smart Snippets)
Search API отдаёт не только ссылку и сниппет в пару предложений, а фрагмент
найденной страницы примерно на 500 токенов — релевантный запросу и с цитатами
из документа. Информации уже достаточно, чтобы ответить, а обрабатывать
страницу самому не нужно.
Это то, ради чего скилл ставят в агента: одного запроса хватает на ответ, а не
только на список ссылок.
View the complete source on GitHubyandex-webmaster
When your agent uses it
Управление сайтами через Yandex Webmaster API: индексация, поисковые запросы, сайтмапы, переобход, ссылки, фиды, диагностика. Плюс scraping раздела Alice / Share of Voice (нет публичного API). Triggers: яндекс вебмастер, yandex webmaster, webmaster api, вебмастер индексация, вебмастер запросы, вебмастер переобход, share of voice, sov, алиса, alice efficiency, конкуренты в алисе.
What it loads into context
Frontmatter
123 tokensAlways available to the agent
SKILL.md
2,408 tokensWhen the skill is activated
Reference documents
8,194 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Config
- Philosophy
- Workflow
- Scripts
- Общие параметры
- Кеш-стратегия
- Расширенные сценарии
- Лимиты API
Scripts executed separately
scripts/add_site.shscripts/alice.shscripts/alice_efficiency.pyscripts/archive_export.shscripts/common.shscripts/diagnostics.shscripts/external_links.shscripts/feeds.shscripts/host_info.shscripts/hosts.shscripts/important_urls.shscripts/indexing.shscripts/insearch.shscripts/internal_links.shscripts/popular_queries.shscripts/queries_history.shscripts/query_analytics.shscripts/recrawl.shscripts/regions.shscripts/search_events.shscripts/search_export.shscripts/sitemaps.shscripts/sqi_history.shscripts/summary.shscripts/tests/test_alice_efficiency.pyscripts/tests/test_alice_network.pyscripts/tests/test_host_search.pyscripts/verify.sh
Files
.gitignoreasset36 bytesSKILL.mdcore10,591 bytesSKILL.mdcore10,591 bytesSKILL.mdcore10,591 bytesSKILL.mdcore10,591 bytesSKILL.mdcore10,591 bytesSKILL.mdcore10,591 bytescache/.gitkeepasset0 bytesconfig/.env.exampleasset540 bytesconfig/README.mddoc2,828 bytesreferences/ALICE_EFFICIENCY.mddoc9,142 bytesreferences/DOCTORS_SCHEDULE.mddoc2,020 bytesreferences/EXTERNAL_LINKS.mddoc1,359 bytesreferences/FEEDS.mddoc2,374 bytesreferences/INTERNAL_LINKS.mddoc1,809 bytesreferences/PAGES_IN_SEARCH.mddoc2,294 bytesreferences/RECRAWL.mddoc1,563 bytesreferences/SEARCH_EXPORT.mddoc1,876 bytesreferences/SEARCH_QUERIES.mddoc3,604 bytesreferences/SITEMAPS.mddoc2,100 bytesreferences/SITE_MANAGEMENT.mddoc2,623 bytesreferences/SITE_STATS.mddoc3,543 bytesscripts/add_site.shruns1,030 bytesscripts/alice.shruns2,056 bytesscripts/alice_efficiency.pyruns17,086 bytesscripts/archive_export.shruns1,773 bytesscripts/common.shruns15,171 bytesscripts/diagnostics.shruns1,035 bytesscripts/external_links.shruns3,147 bytesscripts/feeds.shruns4,407 bytesscripts/host_info.shruns1,481 bytesscripts/hosts.shruns2,050 bytesscripts/important_urls.shruns2,567 bytesscripts/indexing.shruns4,835 bytesscripts/insearch.shruns3,109 bytesscripts/internal_links.shruns4,514 bytesscripts/popular_queries.shruns2,750 bytesscripts/queries_history.shruns3,283 bytesscripts/query_analytics.shruns6,051 bytesscripts/recrawl.shruns3,833 bytesscripts/regions.shruns1,157 bytesscripts/search_events.shruns4,033 bytesscripts/search_export.shruns4,051 bytesscripts/sitemaps.shruns5,058 bytesscripts/sqi_history.shruns1,450 bytesscripts/summary.shruns1,595 bytesscripts/tests/test_alice_efficiency.pyruns15,218 bytesscripts/tests/test_alice_network.pyruns8,910 bytesscripts/tests/test_host_search.pyruns9,521 bytesscripts/verify.shruns3,091 bytes
Read SKILL.md
# yandex-webmaster
Работа с Yandex Webmaster API v4. Управление сайтами, анализ индексации, поисковые запросы, переобход страниц, ссылки, фиды.
## Config
Требуется `YANDEX_WEBMASTER_TOKEN` в `config/.env`.
Scope: `webmaster:hostinfo` + `webmaster:verify`.
Инструкция: `config/README.md`.
Для `alice.sh` (Share of Voice, без публичного API) дополнительно нужен
`SESSION_ID` — cookie из браузера. Подробности в `config/README.md` и
[references/ALICE_EFFICIENCY.md](references/ALICE_EFFICIENCY.md).
View the complete source on GitHubyandex-wordstat
When your agent uses it
Анализ поискового спроса через Yandex Wordstat API. Используй когда нужно: исследовать спрос, семантическое ядро, частотность запросов, сезонность или региональный спрос. Топ до 2000 запросов, ассоциации, динамика, экспорт CSV. Поиск упущенного спроса: анализ XLSX-выгрузки из Яндекс Директ, сегментация фраз, расширение семантики, сравнение OR-запросов. Triggers: упущенный спрос.
What it loads into context
Frontmatter
129 tokensAlways available to the agent
SKILL.md
2,915 tokensWhen the skill is activated
Reference documents
6,463 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Настройка
- Philosophy
- CRITICAL: Intent Verification
- Workflow
- Scripts
- Wordstat Operators
- Analysis Strategy
- Popular Region IDs
- Квоты и лимиты
- Example Session
- Расширенные сценарии
Scripts executed separately
scripts/common.shscripts/dynamics.shscripts/missed_demand.pyscripts/query_total.shscripts/quota.shscripts/regions_stats.shscripts/regions_tree.shscripts/search_region.shscripts/tests/helpers.shscripts/tests/run.shscripts/tests/test_api_key_auth.shscripts/tests/test_cloud_phrase_length.shscripts/tests/test_dynamics_preflight.shscripts/tests/test_iam_tmpdir_cleanup.shscripts/tests/test_missed_demand_query.shscripts/tests/test_normalize.shscripts/tests/test_selector.shscripts/tests/test_translate.shscripts/top_requests.sh
Files
.gitignoreasset211 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytesSKILL.mdcore12,785 bytescache/.gitkeepasset0 bytesconfig/.env.exampleasset250 bytesconfig/README.mddoc10,408 bytesconfig/config.example.jsonasset154 bytesreferences/MISSED_DEMAND.mddoc23,401 bytesscripts/common.shruns28,855 bytesscripts/dynamics.shruns3,078 bytesscripts/missed_demand.pyruns25,650 bytesscripts/query_total.shruns1,617 bytesscripts/quota.shruns745 bytesscripts/regions_stats.shruns2,513 bytesscripts/regions_tree.shruns1,262 bytesscripts/search_region.shruns1,704 bytesscripts/tests/fixtures/cloud-dynamics-request-expected.jsonasset200 bytesscripts/tests/fixtures/cloud-dynamics-response.jsonasset168 bytesscripts/tests/fixtures/cloud-regions-request-expected.jsonasset121 bytesscripts/tests/fixtures/cloud-regions-response.jsonasset176 bytesscripts/tests/fixtures/cloud-topRequests-request-expected.jsonasset137 bytesscripts/tests/fixtures/cloud-topRequests-response.jsonasset247 bytesscripts/tests/fixtures/legacy-dynamics-expected.jsonasset133 bytesscripts/tests/fixtures/legacy-dynamics-params.jsonasset120 bytesscripts/tests/fixtures/legacy-regions-expected.jsonasset126 bytesscripts/tests/fixtures/legacy-regions-params.jsonasset73 bytesscripts/tests/fixtures/legacy-topRequests-expected.jsonasset200 bytesscripts/tests/fixtures/legacy-topRequests-params.jsonasset83 bytesscripts/tests/helpers.shruns443 bytesscripts/tests/run.shruns750 bytesscripts/tests/test_api_key_auth.shruns2,980 bytesscripts/tests/test_cloud_phrase_length.shruns4,380 bytesscripts/tests/test_dynamics_preflight.shruns3,705 bytesscripts/tests/test_iam_tmpdir_cleanup.shruns7,290 bytesscripts/tests/test_missed_demand_query.shruns5,330 bytesscripts/tests/test_normalize.shruns2,630 bytesscripts/tests/test_selector.shruns5,810 bytesscripts/tests/test_translate.shruns2,521 bytesscripts/top_requests.shruns5,780 bytes
Read SKILL.md
# yandex-wordstat
Analyze search demand and keyword statistics using Yandex Wordstat API.
## Настройка
Скилл работает через Wordstat API в Yandex Cloud Search API v2. Для авторизации выберите IAM через авторизованный JSON-ключ сервисного аккаунта или API-ключ сервисного аккаунта. IAM-токен скрипты получают и обновляют автоматически; API-ключ автоматически не обновляется.
Единая инструкция по настройке, переходу со старого API и устранению ошибок: [config/README.md](config/README.md).
⚠<U+FE0F> **Операторы в `dynamics`**: при `--period weekly|monthly` поддерживается только оператор `+`. Минус-слова, кавычки, группировки и точные формы работают только при `--period daily`. Скилл проверяет фразу и сообщает об ошибке до отправки запроса. Подробнее — в README.
## Philosophy
View the complete source on GitHubzoomkit
When your agent uses it
Набор утилит и инструкций для автоматизации Яндекс.Директа через ZoomKit: проверка рекламных ссылок и страниц на ошибки, настройка зануления автотаргетинга на поиске и управление ставками с пересчётом каждые 30 минут. Используй, когда нужно настроить или использовать ZoomKit для работы с Яндекс.Директом, получить список подключённых проектов или аккаунтов, отчёты и состояние кабинетов или кампаний, либо узнать тарифы, баланс и счета сервиса.
What it loads into context
Frontmatter
132 tokensAlways available to the agent
SKILL.md
2,823 tokensWhen the skill is activated
Reference documents
9,102 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Первое знакомство и подключение
- Проверки кабинетов и кампаний
- Важное ограничение по счетам
- Команды чтения
- Команды изменения
- Справочники
Scripts executed separately
scripts/report-wait.shscripts/tests/fake_curl.shscripts/tests/run.shscripts/tests/test_cli.shscripts/zoomkit.sh
Files
.gitignoreasset36 bytesSKILL.mdcore17,063 bytesSKILL.mdcore17,063 bytesSKILL.mdcore17,063 bytesSKILL.mdcore17,063 bytesSKILL.mdcore17,063 bytesSKILL.mdcore17,063 bytesSKILL.mdcore17,063 bytesSKILL.mdcore17,063 bytesassets/bidrule-keywords.example.jsonasset235 bytesassets/bidrule-update.example.jsonasset156 bytesassets/report-request.example.jsonasset144 bytesassets/url-check-product-protection.example.jsonasset371 bytesassets/url-check-settings-update.example.jsonasset95 bytescache/.gitkeepasset1 bytesconfig/.env.exampleasset266 bytesconfig/README.mddoc7,320 bytesreferences/API_REFERENCE.mddoc6,496 bytesreferences/AUDIT_WORKFLOWS.mddoc12,553 bytesreferences/BILLING.mddoc3,320 bytesreferences/GETTING_STARTED.mddoc9,076 bytesreferences/REPORTS.mddoc4,237 bytesreferences/YANDEX_DIRECT.mddoc12,014 bytesscripts/report-wait.shruns6,689 bytesscripts/tests/fake_curl.shruns5,285 bytesscripts/tests/run.shruns875 bytesscripts/tests/test_cli.shruns38,447 bytesscripts/zoomkit.shruns47,278 bytes
Read SKILL.md
# ZoomKit
Работай через единый POSIX-сценарий `scripts/zoomkit.sh`. Определи каталог навыка по пути загруженного `SKILL.md` и запускай команды из него:
```sh
sh scripts/zoomkit.sh <команда> [параметры]
```
Зависимости: `curl` для всех сетевых команд; `jq` для проверки тел запросов и краткого разбора JSON. Команды чтения без `jq` всё равно сохраняют полный ответ в файл.
## Первое знакомство и подключение
Если пользователь ещё не зарегистрирован, не знает, нужен ли ему ZoomKit, или у него нет ключа, сначала прочитай [GETTING_STARTED.md](references/GETTING_STARTED.md) и выполни:
View the complete source on GitHubWhen your agent uses it
What it loads into context
Frontmatter
0 tokensAlways available to the agent
SKILL.md
150 tokensWhen the skill is activated
Reference documents
440 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Быстрая установка
Files
../plugins/scrapedo-web-scraper/skills/scrapedo-web-scraper/SKILL.mddoc1,341 bytesREADME.mddoc604 bytesSKILL.mdcore501 bytesSKILL.mdcore501 bytes
Read SKILL.md
# scrapedo-web-scraper
> **Этот скилл переехал!**
Новое расположение: [plugins/scrapedo-web-scraper/skills/scrapedo-web-scraper/SKILL.md](../plugins/scrapedo-web-scraper/skills/scrapedo-web-scraper/SKILL.md)
## Быстрая установка
```bash
# Глобально
cp -r plugins/scrapedo-web-scraper/skills/scrapedo-web-scraper ~/.claude/skills/
# Для проекта
cp -r plugins/scrapedo-web-scraper/skills/scrapedo-web-scraper .claude/skills/
```View the complete source on GitHubSkills included
- agent-deck
- blogger-ads-skill
- codex-review
- crawl4ai-seo
- docx-contracts
- fal-ai-image
- genome-analyzer
- github-pages-publisher
- knowledge-compiler
- perplexity-search
- reddit-skill
- scrapedo-web-scraper
- sourcecraft-publisher
- ssh-remote-connection
- telegram-channel-parser
- telegraph-publisher
- x-research
- yandex-direct
- yandex-metrika
- yandex-search-api
- yandex-webmaster
- yandex-wordstat
- zoomkit
Repository facts
- License
- MIT
- Created
- Nov 7, 2025
- Last pushed
- Nov 5, 2026
- Forks
- 58
- Open issues
- 9
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 5, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 215 notes
docx-contracts/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/codex-review/skills/codex-review/scripts/auto-approve-plan.sh:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/codex-review/skills/codex-review/scripts/auto-approve-plan.sh:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/codex-review/skills/codex-review/scripts/auto-approve-plan.sh:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/codex-review/skills/codex-review/scripts/auto-approve-plan.sh:1Analysis incomplete: Referenced executable target unavailable; not analyzedgenome-analizer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/agent-deck/skills/agent-deck/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/agent-deck/skills/agent-deck/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/agent-deck/skills/agent-deck/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/agent-deck/skills/agent-deck/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/agent-deck/skills/agent-deck/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/agent-deck/skills/agent-deck/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/agent-deck/skills/agent-deck/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/codex-review/skills/codex-review/scripts/auto-approve-plan.sh:1Plugin-wide analysis incomplete; see repository notesplugins/codex-review/skills/codex-review/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/codex-review/skills/codex-review/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/codex-review/skills/codex-review/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/codex-review/skills/codex-review/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/codex-review/skills/codex-review/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/codex-review/skills/codex-review/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 257 dangerous shell commandsin 119 files: zoomkit/scripts/tests/test_cli.sh:12 yandex-metrika/scripts/common.sh:121 yandex-webmaster/scripts/common.sh:42 and 116 more
- 2,736 network referencesin 200 files: yandex-direct/references/api_map.json:5 yandex-direct/references/ui_deeplinks.json:2 blogger-ads-skill/tests/test_links.py:28 and 197 more
- 7 obfuscation signalsin 7 files: blogger-ads-skill/scripts/render_contract.py:592 telegraph-publisher/scripts/github_delete_page_assets.sh:64 telegraph-publisher/scripts/github_upload.sh:155 and 4 more
- 2 instruction override signalsin 1 file: agent-deck/references/config-reference.md:27
- 305 executable scriptsin 300 files: plugins/codex-review/skills/codex-review/scripts/auto-approve-plan.sh:1 agent-deck/scripts/launch-subagent.sh:1 blogger-ads-skill/scripts/accounting.py:1 and 297 more
- 659 references to secretsin 144 files: x-research/scripts/common.sh:9 perplexity-search/scripts/common.sh:92 yandex-search-api/scripts/common.sh:87 and 141 more
- No requests to vote in Hot
Show all 3,966 signals by file
.claude-plugin/marketplace.json
plugins/agent-deck/skills/agent-deck/SKILL.md
- Dangerous shell operationline 118
agent-deck rm "Название"
plugins/agent-deck/skills/agent-deck/references/config-reference.md
- Instruction override signalline 27
[claude] config_dir = "~/.claude-work" # Path to Claude config directory dangerous_mode = true # Enable --dangerously-skip-permissions - Instruction override signalline 29
dangerous_mode = true # Enable --dangerously-skip-permissions - Access to secretsline 131
[Credential-related source omitted] - Network accessline 145
[mcps.remote] url = "https://api.example.com/mcp" - Network accessline 146
url = "https://api.example.com/mcp" - Access to secretsline 158
[Credential-related source omitted] - Access to secretsline 164
[Credential-related source omitted] - Access to secretsline 235
[Credential-related source omitted] - Access to secretsline 241
[Credential-related source omitted]
plugins/agent-deck/skills/agent-deck/references/mcp-management.md
- Access to secretsline 53
[Credential-related source omitted]
plugins/agent-deck/skills/agent-deck/references/troubleshooting.md
- Network accessline 126
Go to: **https://github.com/asheshgoplani/agent-deck/issues/new**
plugins/agent-deck/skills/agent-deck/scripts/launch-subagent.sh
- Executable scriptline 1
#!/bin/bash
plugins/blogger-ads-skill/skills/blogger-ads-skill/assets/accounting/xsd/SOURCE.md
- Network accessline 3
- Приказ ФНС от 19.12.2023 № ЕД-7-26/970@, приложение № 1, версия формата 5.03. - [Официальная страница приказа](https://www.nalog.gov.ru/rn77/about_fts/docs/14414412/). - Network accessline 4
- [Официальная страница приказа](https://www.nalog.gov.ru/rn77/about_fts/docs/14414412/). - Network accessline 5
- [Архив «xsd-схема, действующая с 01.01.2026»](https://www.nalog.gov.ru/html/sites/www.new.nalog.ru/files/about_fts/docs/xsd/14414412.zip).
plugins/blogger-ads-skill/skills/blogger-ads-skill/assets/template-fields.json
- Network accessline 177
"example": "https://example.org/community", - Network accessline 630
"example": "https://example.org", - Network accessline 678
"example": "Это демонстрационный текст рекламного поста.\n\nПодробности: https://example.org\n\nРеклама. ООО «Пример Заказчик», ИНН 0000000000.", - Network accessline 732
"example": "https://example.org",
plugins/blogger-ads-skill/skills/blogger-ads-skill/assets/templates/Montserrat-OFL.txt
- Network accessline 1
Copyright 2024 The Montserrat.Git Project Authors (https://github.com/JulietaUla/Montserrat.git) - Network accessline 3
This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: https://openfontlicense.org - Network accessline 5
https://openfontlicense.org
plugins/blogger-ads-skill/skills/blogger-ads-skill/assets/templates/NotoEmoji-OFL.txt
plugins/blogger-ads-skill/skills/blogger-ads-skill/references/accounting.md
- Network accessline 97
1. [ФНС: приказ № ЕД-7-26/970@ и XSD 2026](https://www.nalog.gov.ru/rn77/about_fts/docs/14414412/) — действующая схема 5.03. - Network accessline 98
2. [ФНС: НДС при УСН](https://www.nalog.gov.ru/rn77/taxation/taxes/nds_usn/) — УСН сама по себе не означает отсутствие НДС; [изменения 2026](https://www.nalog.gov.ru/new2026/). - Network accessline 99
3. [ФНС: обязательные реквизиты счёта-фактуры с 01.04.2026](https://www.nalog.gov.ru/rn25/ifns/r25_14/info/16621052/) — строка 5б для авансовых счетов-фактур. - Network accessline 100
4. [Документация Диадока по рекомендациям ФНС от 16.12.2025 № ЕА-4-26/11336@](https://www.diadoc.ru/articles/82777-rekomendacii_fns_po_zapolneniyu_schetov_faktur_i_upd) и [скан письма ФНС](https://services.kontur.ru/Files/Modules/Article/82 - Network accessline 101
5. [ФНС об отмене старых электронных форматов актов](https://www.nalog.gov.ru/rn77/news/activities_fts/16543959/) — бумажные акты и допустимый неформализованный обмен не запрещены. Не повторять тезис «все акты запрещены».
plugins/blogger-ads-skill/skills/blogger-ads-skill/references/legal.md
- Network accessline 11
1. Определи роль пользователя: рекламодатель, посредник или площадка. Установи конечного рекламодателя и всю цепочку договоров. Агентский договор и перепродажа услуг — разные схемы. 2. Посмотри сам продукт, посадочную страницу, предложение - Network accessline 12
2. Посмотри сам продукт, посадочную страницу, предложение и будущий текст. Проверяй фактическое содержание, включая обещания в ссылках. Цена, размер канала и способ оплаты не освобождают от рекламных требований. 3. Проверь статус площадки и - Network accessline 13
3. Проверь статус площадки и конкретного канала на дату размещения. Для страницы с аудиторией **более 10 000** пользователей нужна проверка включения в перечень РКН. Номер заявки не заменяет запись. Не называй эту регистрацию лицензией на р - Network accessline 14
4. Сверь стороны по ИНН в [ЕГРЮЛ/ЕГРИП ФНС](https://egrul.nalog.ru/), при необходимости — в [«Прозрачном бизнесе»](https://pb.nalog.ru/). Сохрани выписку и дату. Сверь действующий статус, ФИО/название, полномочия подписанта и связь получате - Network accessline 18
Базовый источник — [38-ФЗ «О рекламе»](http://pravo.gov.ru/proxy/ips/?docbody=&nd=102105292): ст. 3 и 5 — квалификация и общие требования, ст. 7 — запрещённые объекты, профильные статьи — ограничения отдельных категорий. Статья 19 относится - Network accessline 20
- **Ограниченные ресурсы.** Часть 10.7 ст. 5 запрещает рекламу на перечисленных в ней ресурсах, включая ресурсы с ограниченным доступом. Проверяй и размещение, и объект продвижения; работающий сайт ещё не означает отсутствие запрета. - **Te - Network accessline 21
- **Telegram в 2026 году.** [ФАС 25.03.2026](https://fas.gov.ru/news/34584) указала на переходный период до конца 2026 года без применения мер ответственности за рекламу в Telegram и YouTube. Это позиция о применении ответственности, а не о - Network accessline 28
Для интернет-рекламы применяются ст. 18.1 и 38 38-ФЗ, а для административной ответственности — [ст. 14.3 КоАП](https://www.consultant.ru/document/cons_doc_LAW_34661/2d50fc1c4013ea9ab20b8b2666c1650b1dc4c982/). Не обещай единый штраф «2500 ру - Network accessline 42
Для сроков отчётности читай действующий [п. 10 Правил по ПП РФ № 974](https://www.consultant.ru/document/cons_doc_LAW_418000/044cb7cb4857f2a9907d69072ea6f0df3054eb49/): помимо обычных 30 календарных дней после месяца он содержит оговорку о - Network accessline 48
[Постановление Правительства № 1224 от 15.08.2025](https://publication.pravo.gov.ru/document/0001202508150004) определяет распределение по цепочке. В пп. 3–6 различаются договор услуг и агентское поручение; нельзя начислять 3% каждому участ - Network accessline 56
Начисление делает РКН по переданным сведениям. В ЕРИР проверяют квартал, базу, сумму и УИН. По № 1224 расчёт формируется до 15-го числа второго месяца следующего квартала; для проверки/уточнения предусмотрены следующие 10 календарных дней; - Network accessline 60
По [ФНС «Налоги 2026»](https://www.nalog.gov.ru/new2026/) основная ставка НДС с 01.01.2026 — **22%**. Для обычных рекламных услуг на ОСНО это стандартная ветка; специальное освобождение нельзя выдумывать. - Network accessline 62
УСН сама по себе не означает отсутствие НДС. В 2026 году освобождение по ст. 145 НК связано с пределом доходов 20 млн рублей за предыдущий и текущий год; при превышении в течение года обязанность возникает с первого числа следующего месяца. - Network accessline 72
Пользовательский [обзор СберБизнес](https://sberbusiness.live/publications/markirovka-reklamy-v-internete) прочитан как вторичный материал. Для решения о публикации используй действующий акт, официальное разъяснение и факты сделки. Не перен
plugins/blogger-ads-skill/skills/blogger-ads-skill/references/ord-edo.md
- Network accessline 45
2. Получи от ответственного за маркировку: название ОРД, **значение поля ERID/«Токен»**, конечного рекламодателя и ИНН, исходный договор, подтверждение выдачи и копию зарегистрированного материала. Внутренний ID карточки, номер договора и т - Network accessline 47
4. Проверь сведения в доступном кабинете [ЕРИР](https://erir.grfc.ru/). Это полезное дополнительное подтверждение. Отсутствие результата само по себе не доказывает подделку: проверь введённое значение, статус передачи у ОРД, ошибки, права д - Network accessline 49
**Ждать универсальные «двое суток» не требуется.** [Яндекс ОРД прямо поясняет](https://yandex.ru/support/ord/ru/marking-stages): после выдачи токена проверка ЕРИР может продолжаться, но это не препятствует размещению. Условие ст. 18.1 ч. 17 - Network accessline 53
Справки операторов: [Яндекс — вопросы о токенах и передаче данных](https://yandex.ru/support/ord/ru/faq), [ОРД-А — карточка и редактирование креатива](https://ord-a.ru/help/wiki/creatives/). Эти инструкции описывают работу конкретных систем - Network accessline 61
ERID размещают в соответствии с [приказом РКН от 25.03.2025 № 68](https://publication.pravo.gov.ru/document/0001202504140029). Он заменил приказ № 191. Пункты 10–12 предусматривают параметр `erid` в ссылке, а также пометку `erid: …` в начал - Network accessline 67
Не утверждай, что любой пробел автоматически требует нового ERID. Существенная замена содержания, объекта, материала — основание оформить новый креатив и получить новый токен. Возможность технических правок и правок до первого размещения за - Network accessline 75
Отчётность не заканчивается выдачей токена. Зафиксируй исполнителя подачи статистики, доходного акта и связи с исходным договором. Один акт не следует задваивать разными участниками. По [этапам Яндекс ОРД](https://yandex.ru/support/ord/ru/m - Network accessline 77
[Пункт 10 ПП РФ № 974 в редакции от 18.09.2025](https://www.consultant.ru/document/cons_doc_LAW_418000/044cb7cb4857f2a9907d69072ea6f0df3054eb49/) содержит обычный 30-дневный срок и оговорку о предоставлении информации в течение года со дня - Network accessline 85
[ФНС разъяснила](https://www.nalog.gov.ru/rn77/news/activities_fts/16543959/): с 01.01.2026 отменены прежние утверждённые XML-форматы акта выполненных работ и товарной накладной из приказов № ММВ-7-10/551@ и № ММВ-7-10/552@. Для формализова - Network accessline 99
Скрипт создаёт **неподписанный файл**. Для реального обмена нужны проверка действующей XSD и правил оператора, загрузка, подпись уполномоченного лица, при необходимости МЧД, ответный титул/приёмка и квитанции. Успешная XSD-проверка не подтв
plugins/blogger-ads-skill/skills/blogger-ads-skill/references/templates.md
- Network accessline 30
В DOCX встроены Montserrat Regular и Bold, поэтому не требуется системная установка. Источник — [официальный репозиторий Montserrat](https://github.com/JulietaUla/Montserrat/tree/master/fonts/ttf), лицензия — `assets/templates/Montserrat-OF - Network accessline 43
"CONTRACT_DATE": "«20» октября 2026 г.", "CHANNEL_NAME": "Название согласованной рекламной площадки", "CHANNEL_URL": "https://example.org/community" - Network accessline 44
"CHANNEL_NAME": "Название согласованной рекламной площадки", "CHANNEL_URL": "https://example.org/community" } - Network accessline 45
"CHANNEL_URL": "https://example.org/community" - Network accessline 121
| `channel` | `telegram`, `email`, `other` или `unknown`; уже выбранную переписку не объявляй неизвестной | | `channel_name` | Название только для `other`; иначе `null` | | `contractor_contact`, `customer_contact` | Контакты только в выбран - Network accessline 122
| `channel_name` | Название только для `other`; иначе `null` | | `contractor_contact`, `customer_contact` | Контакты только в выбранном канале или `null`. Telegram: `@username`, `https://t.me/username` либо международный номер. Email не под - Network accessline 123
| `contractor_contact`, `customer_contact` | Контакты только в выбранном канале или `null`. Telegram: `@username`, `https://t.me/username` либо международный номер. Email не подставляется в Telegram. При `unknown` оба контакта — `null` | - Network accessline 217
"part": "word/document.xml", "paragraph": 27, "find": "https://example.org/old", - Network accessline 218
"paragraph": 27, "find": "https://example.org/old", "replace": "https://example.org/new" - Network accessline 219
"find": "https://example.org/old", - Network accessline 220
"replace": "https://example.org/new" - Network accessline 242
Шрифт поставляется в `assets/templates/NotoEmoji.ttf`, лицензия OFL — рядом. Источник: [официальные файлы Noto Emoji](https://github.com/google/fonts/tree/main/ofl/notoemoji). Сборка не требует сети или установки шрифта. Если шрифт не содер - Network accessline 273
Поле PDF `anchor_hint` показывает текст из области той же аннотации рядом с `target`. Это подсказка для чтения: область иногда захватывает соседнюю строку, а у скана текстового слоя может не быть. Сопоставь её с изображением страницы; пусто
plugins/blogger-ads-skill/skills/blogger-ads-skill/references/workflow.md
- Network accessline 60
Для выбранных файлов материала используй `deal.py import-creative --state … --text … --links …`. В `--links` передай JSON-файл карты: список URL, список объектов `{"anchor":"…","url":"https://…"}` или таблицу `[номер, якорь, адрес]` / `[яко - Network accessline 192
По [ПП РФ № 1224, пп. 8, 9, 13, 15](https://publication.pravo.gov.ru/document/0001202508150004) `plan` создаёт `fee-YYYY-QN-assessment` (расчёт РКН к 15-му второго месяца следующего квартала), `fee-YYYY-QN-review` (проверка/уточнение в след - Network accessline 194
Для первого платёжного периода 2025-Q2 действовали те же контрольные даты: 15.08, 25.08 и 05.09.2025; они прямо указаны в [сообщении Роскомнадзора](https://t.me/rkn_tg/1547). Отдельный переходный срок для этого периода в расчёт не добавляет
plugins/blogger-ads-skill/skills/blogger-ads-skill/scripts/accounting.py
- Executable scriptline 1
#!/usr/bin/env -S uv run --script
plugins/blogger-ads-skill/skills/blogger-ads-skill/scripts/creative_links.py
- Executable scriptline 1
Executable file
plugins/blogger-ads-skill/skills/blogger-ads-skill/scripts/deal.py
plugins/blogger-ads-skill/skills/blogger-ads-skill/scripts/handoff.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/blogger-ads-skill/skills/blogger-ads-skill/scripts/inspect_links.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 27
W = "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}" - Network accessline 28
A = "{http://schemas.openxmlformats.org/drawingml/2006/main}" - Network accessline 29
V = "{urn:schemas-microsoft-com:vml}" R = "{http://schemas.openxmlformats.org/officeDocument/2006/relationships}" REL = "{http://schemas.openxmlformats.org/package/2006/relationships}" - Network accessline 30
R = "{http://schemas.openxmlformats.org/officeDocument/2006/relationships}" - Network accessline 31
REL = "{http://schemas.openxmlformats.org/package/2006/relationships}" - Network accessline 32
STRICT_NAMESPACES = { "http://purl.oclc.org/ooxml/wordprocessingml/main": W[1:-1], "http://purl.oclc.org/ooxml/drawingml/main": A[1:-1], - Network accessline 33
"http://purl.oclc.org/ooxml/wordprocessingml/main": W[1:-1], - Network accessline 34
"http://purl.oclc.org/ooxml/drawingml/main": A[1:-1], - Network accessline 35
"http://purl.oclc.org/ooxml/officeDocument/relationships": R[1:-1], - Network accessline 36
"http://purl.oclc.org/ooxml/package/relationships": REL[1:-1], - Network accessline 222
node.attrib = attributes if node.tag == REL + "Relationship": strict_prefix = "http://purl.oclc.org/ooxml/officeDocument/relationships/" - Network accessline 223
if node.tag == REL + "Relationship": strict_prefix = "http://purl.oclc.org/ooxml/officeDocument/relationships/" relation_type = node.get("Type", "") - Network accessline 224
strict_prefix = "http://purl.oclc.org/ooxml/officeDocument/relationships/" - Network accessline 270
target = relationship.get("Target") if relationship is not None else None if relationship is not None and ( relationship.get("Type") != "http://schemas.openxmlformats.org/officeDocument/2006/relations - Network accessline 271
if relationship is not None and ( relationship.get("Type") != "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" or relationship.get("TargetMode") != "External"): - Network accessline 272
relationship.get("Type") != "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"
plugins/blogger-ads-skill/skills/blogger-ads-skill/scripts/print_html.py
plugins/blogger-ads-skill/skills/blogger-ads-skill/scripts/render_contract.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 22
W = "http://schemas.openxmlformats.org/wordprocessingml/2006/main" - Network accessline 178
raise ValueError("--exchange-file: при неизвестном канале контакты в нём тоже неизвестны; укажите null") for contact in filter(None, contacts): if channel == "telegram" and not re.fullmatch(r"(?:@[A-Za-z0-9_]+|https://t\.me/[A-Z - Network accessline 179
for contact in filter(None, contacts): if channel == "telegram" and not re.fullmatch(r"(?:@[A-Za-z0-9_]+|https://t\.me/[A-Za-z0-9_]+|\+[1-9][0-9]{6,14})", contact): raise ValueError("--exchange-file: контакт Telegram — @ - Network accessline 180
if channel == "telegram" and not re.fullmatch(r"(?:@[A-Za-z0-9_]+|https://t\.me/[A-Za-z0-9_]+|\+[1-9][0-9]{6,14})", contact): - Network accessline 181
raise ValueError("--exchange-file: контакт Telegram — @username, https://t.me/username или международный номер; email сюда не подставляется") - Network accessline 421
rel_ns = "http://schemas.openxmlformats.org/package/2006/relationships" - Network accessline 422
rid_ns = "http://schemas.openxmlformats.org/officeDocument/2006/relationships" - Possible obfuscationline 592
if re.search(r"[\x00-\x08\x0b\x0c\x0e-\x1f]", value):
plugins/blogger-ads-skill/skills/blogger-ads-skill/tests/test_accounting.py
- Executable scriptline 1
Executable file
plugins/blogger-ads-skill/skills/blogger-ads-skill/tests/test_contract.py
- Executable scriptline 1
Executable file - Network accessline 15
module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) W = "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}" - Network accessline 17
W = "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}" - Network accessline 25
self.schema = json.loads((ROOT / "assets/template-fields.json").read_text()) self.fields = {key: value["example"] for key, value in self.schema["fields"].items() if "<N>" not in key} self.fields.update(LINK_1_ANCHOR="Пример - Network accessline 27
self.fields.update(LINK_1_ANCHOR="Пример & проверка", LINK_1_URL="https://example.org/?a=1&b=2") - Network accessline 286
'<w:p><w:r><w:t>{{PARTY_INFO}}</w:t></w:r></w:p>') post = Path(self.temp.name) / "approved.txt" text = ": Дословно:: пауза.. г. Москва; И. И. Иванов.\nhttps://example.org./path.v2?next=a..b&end=." - Network accessline 287
post = Path(self.temp.name) / "approved.txt" text = ": Дословно:: пауза.. г. Москва; И. И. Иванов.\nhttps://example.org./path.v2?next=a..b&end=." post.write_text(text, encoding="utf-8") - Network accessline 288
text = ": Дословно:: пауза.. г. Москва; И. И. Иванов.\nhttps://example.org./path.v2?next=a..b&end=." - Network accessline 289
post.write_text(text, encoding="utf-8") fields = {"PRODUCT_URL": "https://example.org./path.v2?next=a..b&end=.", "PARTY_INFO": "г. Москва, ул. Примерная, д. 1; Иванов И. И."} - Network accessline 290
fields = {"PRODUCT_URL": "https://example.org./path.v2?next=a..b&end=.", - Network accessline 306
def test_links_expand_without_losing_addresses(self): self.fields.update(LINK_COUNT="3", LINK_2_ANCHOR="Второй", LINK_2_URL="https://example.org/2", LINK_3_ANCHOR="Третий", LINK_3_URL="https://example.org/3") - Network accessline 307
self.fields.update(LINK_COUNT="3", LINK_2_ANCHOR="Второй", LINK_2_URL="https://example.org/2", LINK_3_ANCHOR="Третий", LINK_3_URL="https://example.org/3") - Network accessline 310
root = ET.fromstring(z.read("word/document.xml")) self.assertEqual(len(list(root.iter(W + "tr"))), 4) self.assertIn("https://example.org/?a=1&b=2", "".join(root.itertext())) - Network accessline 312
self.assertIn("https://example.org/?a=1&b=2", "".join(root.itertext())) - Network accessline 333
def test_separate_erid_is_only_in_marking_block_and_does_not_change_material(self): post = Path(self.temp.name) / "approved-material.txt" text = "✅ Согласованный текст\nПодробности: https://example.org/?utm_source=TG\n" - Network accessline 334
post = Path(self.temp.name) / "approved-material.txt" text = "✅ Согласованный текст\nПодробности: https://example.org/?utm_source=TG\n" post.write_bytes(text.encode("utf-8")) - Network accessline 335
text = "✅ Согласованный текст\nПодробности: https://example.org/?utm_source=TG\n" - Network accessline 469
def test_patch_multiline_creative_and_exact_table_cell(self): self.fields["POST_TEXT"] = "🔒 Старый заголовок\n✅ Старый текст\nhttps://example.org/" - Network accessline 470
self.fields["POST_TEXT"] = "🔒 Старый заголовок\n✅ Старый текст\nhttps://example.org/" - Network accessline 473
info = module.inspect_document(self.output) table_url = next(p for p in info["paragraphs"] if p["text"] == self.fields["LINK_1_URL"]) text = "🔒 Новый заголовок\n✅ Точный текст\n📊🚀💸\nhttps://example.org/" - Network accessline 474
table_url = next(p for p in info["paragraphs"] if p["text"] == self.fields["LINK_1_URL"]) text = "🔒 Новый заголовок\n✅ Точный текст\n📊🚀💸\nhttps://example.org/" module.patch_document(self.output, self.patch_data(self.output, - Network accessline 475
text = "🔒 Новый заголовок\n✅ Точный текст\n📊🚀💸\nhttps://example.org/" - Network accessline 476
module.patch_document(self.output, self.patch_data(self.output, [ {"find": self.fields["POST_TEXT"], "replace": text}, {"paragraph": table_url["paragraph"], "find": self.fields["LINK_1_URL"], "replace": "https://exam - Network accessline 477
{"find": self.fields["POST_TEXT"], "replace": text}, {"paragraph": table_url["paragraph"], "find": self.fields["LINK_1_URL"], "replace": "https://example.org/correct"} ]), revised) - Network accessline 478
{"paragraph": table_url["paragraph"], "find": self.fields["LINK_1_URL"], "replace": "https://example.org/correct"} - Network accessline 480
paragraphs = [p["text"] for p in module.inspect_document(revised)["paragraphs"]] self.assertIn(text, paragraphs) self.assertIn("https://example.org/correct", paragraphs) - Network accessline 481
self.assertIn(text, paragraphs) self.assertIn("https://example.org/correct", paragraphs) self.assertTrue(module.audit_document(revised)["ok"]) - Network accessline 482
self.assertIn("https://example.org/correct", paragraphs) - Network accessline 510
def test_strict_docx_is_rejected_before_inspection_audit_or_patch(self): source = self.synthetic("<w:p><w:r><w:t>Текст без шрифта</w:t></w:r></w:p>", namespace="http://purl.oclc.org/ooxml/wordprocessi - Network accessline 511
source = self.synthetic("<w:p><w:r><w:t>Текст без шрифта</w:t></w:r></w:p>", namespace="http://purl.oclc.org/ooxml/wordprocessingml/main") changes = {"source_sha256": hashlib.sha256(source.read_bytes( - Network accessline 512
namespace="http://purl.oclc.org/ooxml/wordprocessingml/main")
plugins/blogger-ads-skill/skills/blogger-ads-skill/tests/test_contract_dates.py
- Executable scriptline 1
Executable file - Network accessline 178
with ZipFile(path) as archive: xml = ET.fromstring(archive.read('word/document.xml')) text = ''.join(node.text or '' for node in xml.iter('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t')) - Network accessline 179
xml = ET.fromstring(archive.read('word/document.xml')) text = ''.join(node.text or '' for node in xml.iter('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t')) self.assertIn('14.10.2026', text) - Network accessline 180
text = ''.join(node.text or '' for node in xml.iter('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t'))
plugins/blogger-ads-skill/skills/blogger-ads-skill/tests/test_creative_links.py
- Executable scriptline 1
Executable file - Network accessline 24
links, deal, render, inspect = [module(name) for name in ("creative_links", "deal", "render_contract", "inspect_links")] W = "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}" - Network accessline 25
W = "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}" - Network accessline 39
self.table = [ ["№", "Фраза-ссылка (якорь)", "Адрес (URL)"], ["1", "«Сервис» (первое упоминание)", "https://Example.test/?b=2&a=1&a=2#top"], - Network accessline 40
["№", "Фраза-ссылка (якорь)", "Адрес (URL)"], ["1", "«Сервис» (первое упоминание)", "https://Example.test/?b=2&a=1&a=2#top"], ["2", " Открытый код и SDK ", "https://example.test/security/"], - Network accessline 41
["1", "«Сервис» (первое упоминание)", "https://Example.test/?b=2&a=1&a=2#top"], - Network accessline 42
["2", " Открытый код и SDK ", "https://example.test/security/"], - Network accessline 43
["3", "«Провайдер» (абзац о тарифах)", "https://provider.test/pricing"], - Network accessline 44
["4", "«Сервис» (абзац с расчётом)", "https://Example.test/?b=2&a=1&a=2#top"], - Network accessline 45
["5", "«Сервис» (призыв в конце)", "https://Example.test/?b=2&a=1&a=2#top"], - Network accessline 46
["6", "https://t.me/example", "https://t.me/example"], - Network accessline 80
def test_pair_objects_two_column_table_and_legacy_urls_are_supported(self): self.assertEqual(links.parse_links(self.expected), self.expected) self.assertEqual(links.parse_links([["Якорь", "URL"], ["Сервис", "https://example. - Network accessline 81
self.assertEqual(links.parse_links(self.expected), self.expected) self.assertEqual(links.parse_links([["Якорь", "URL"], ["Сервис", "https://example.test"]]), [{"anchor": "Сервис", "url": "https://example.tes - Network accessline 82
self.assertEqual(links.parse_links([["Якорь", "URL"], ["Сервис", "https://example.test"]]), - Network accessline 83
[{"anchor": "Сервис", "url": "https://example.test"}]) - Network accessline 84
urls = ["https://example.test/?a=1", "https://example.test/?a=1"] - Network accessline 89
for anchor in ("anchor", "якорь"): with self.subTest(anchor=anchor): rows = [[anchor, "https://example.test/url"], ["Следующая", "https://example.test/next"]] - Network accessline 90
with self.subTest(anchor=anchor): rows = [[anchor, "https://example.test/url"], ["Следующая", "https://example.test/next"]] expected = [{"anchor": row[0], "url": row[1]} for row in rows] - Network accessline 91
rows = [[anchor, "https://example.test/url"], ["Следующая", "https://example.test/next"]] - Network accessline 103
invalid = [ [["№", "Якорь", "URL"], ["1", "Название", "Ссылка в тексте"]], [["1", "https://example.test", "видимая ссылка в тексте"]], - Network accessline 104
[["№", "Якорь", "URL"], ["1", "Название", "Ссылка в тексте"]], [["1", "https://example.test", "видимая ссылка в тексте"]], [["№", "Якорь", "URL"], ["1", "https://example.test", "см. https://other.test"]], - Network accessline 105
[["1", "https://example.test", "видимая ссылка в тексте"]], - Network accessline 106
[["№", "Якорь", "URL"], ["1", "https://example.test", "см. https://other.test"]], - Network accessline 107
[["1", "https://example.test", "https://broken address"]], - Network accessline 108
[["1", "https://example.test", ""]], - Network accessline 109
[["1", "", "https://example.test"]], - Network accessline 110
[{"anchor": "Якорь", "url": "https://bad address"}], - Network accessline 156
def test_legacy_digest_is_unchanged_until_new_import_adds_link_map(self): creative = {"text": "Пост", "links": ["https://example.test"], "media_sha256": []} - Network accessline 157
creative = {"text": "Пост", "links": ["https://example.test"], "media_sha256": []} - Network accessline 188
for key, value in [("LINK_3_ANCHOR", self.expected[2]["url"]), ("LINK_3_URL", self.expected[5]["url"]), ("LINK_COUNT", "5"), ("LINK_7_URL", "https://extra.test")]: - Network accessline 189
("LINK_3_URL", self.expected[5]["url"]), ("LINK_COUNT", "5"), ("LINK_7_URL", "https://extra.test")]: with self.subTest(key=key): - Network accessline 190
("LINK_7_URL", "https://extra.test")]: - Network accessline 219
self.assertFalse(changed.exists()) new_map = self.base / "new-map.json" new_map.write_text(json.dumps([{"anchor": "Новая карта", "url": "https://new.test"}])) - Network accessline 220
new_map = self.base / "new-map.json" new_map.write_text(json.dumps([{"anchor": "Новая карта", "url": "https://new.test"}])) render.revise_document(self.output, {}, changed, links_file=new_map) - Network accessline 221
new_map.write_text(json.dumps([{"anchor": "Новая карта", "url": "https://new.test"}]))
plugins/blogger-ads-skill/skills/blogger-ads-skill/tests/test_deal.py
- Executable scriptline 1
Executable file - Network accessline 249
self.state["stage"] = stage if actual: self.state["publication"].update(actual_at=actual, url="https://t.me/example/123", - Network accessline 250
if actual: self.state["publication"].update(actual_at=actual, url="https://t.me/example/123", evidence=["Скриншот фактического размещения"]) - Network accessline 251
self.state["publication"].update(actual_at=actual, url="https://t.me/example/123", - Network accessline 549
self.assertNotIn(completed["uid"], deal.ics(result, self.now)) self.assertIn(completed["uid"], deal.changes(old, result)["cancel"]) self.state["creative"]["links"] = ["https://example.org/changed"] - Network accessline 550
self.assertIn(completed["uid"], deal.changes(old, result)["cancel"]) self.state["creative"]["links"] = ["https://example.org/changed"] reopened = deal.plan(self.state, self.now) - Network accessline 551
self.state["creative"]["links"] = ["https://example.org/changed"] - Network accessline 1353
*(("completed", 0, key) for key in ("title", "completed_at", "completion_source"))] payload = ('[договор](</tmp/missing.docx>)  ' '<a href="/tmp/missing.html">ссылка</a> <https://example - Network accessline 1354
payload = ('[договор](</tmp/missing.docx>)  ' '<a href="/tmp/missing.html">ссылка</a> <https://example.org> ' '<img src=x> **условия** `текст`\n# заголовок\n- пункт\n' - Network accessline 1355
'<a href="/tmp/missing.html">ссылка</a> <https://example.org> ' - Network accessline 1737
self.state["publication"]["scheduled_message_id"] = None self.state["checks"]["scheduled_message"] = queue_proof self.state["creative"]["links"] = ["https://example.org/new"] - Network accessline 1738
self.state["checks"]["scheduled_message"] = queue_proof self.state["creative"]["links"] = ["https://example.org/new"] self.assertFalse(deal.check(self.state, self.now)["ready"]) - Network accessline 1739
self.state["creative"]["links"] = ["https://example.org/new"] - Network accessline 1914
def test_check_rejects_invalid_legacy_creative_links(self): self.assertIsNone(self.state["creative"].get("provenance")) for links in ("not-a-list", {"url": "https://example.org/"}, None, - Network accessline 1915
self.assertIsNone(self.state["creative"].get("provenance")) for links in ("not-a-list", {"url": "https://example.org/"}, None, [123], ["not-a-url"], ["https://example.org/a b"]): - Network accessline 1916
for links in ("not-a-list", {"url": "https://example.org/"}, None, - Network accessline 1917
[123], ["not-a-url"], ["https://example.org/a b"]): - Network accessline 2050
self.links_path = self.folder / "post-links.json" self.raw_text = " 🧩 Согласованный пост\r\n\r\nerid: test-token \r\n".encode("utf-8") self.links = ["https://example.org/a?utm_source=TG&x=1&x=2#section", - Network accessline 2051
self.raw_text = " 🧩 Согласованный пост\r\n\r\nerid: test-token \r\n".encode("utf-8") self.links = ["https://example.org/a?utm_source=TG&x=1&x=2#section", "https://example.org/a?utm_source=TG&x=1&x=2#section", - Network accessline 2052
self.links = ["https://example.org/a?utm_source=TG&x=1&x=2#section", - Network accessline 2053
"https://example.org/a?utm_source=TG&x=1&x=2#section", - Network accessline 2054
"http://EXAMPLE.org:8080/b?next=%2Fpage%3Fa%3D1&space=a+b"] - Network accessline 2127
def test_inspect_preserves_mixed_order_repeats_and_raw_query_values(self): text = ("https://example.org/?x=1&erid=A%2FB%5B+Z&erid=repeat#fragment\n" - Network accessline 2128
text = ("https://example.org/?x=1&erid=A%2FB%5B+Z&erid=repeat#fragment\n" - Network accessline 2129
"erid: repeat\nhttps://example.org/?erid=A%2FB%5B+Z\nERID: other[\n" - Network accessline 2130
"https://example.org/?erid=repeat)") - Network accessline 2143
for text in ("Обычный пост без идентификаторов.", "", "noterid: wrong _erid: wrong erid_suffix: wrong еrid: wrong erid=plain " "https://example.org/?myerid=wrong&erid_suffix=wrong&%65rid=wrong"): - Network accessline 2144
"noterid: wrong _erid: wrong erid_suffix: wrong еrid: wrong erid=plain " "https://example.org/?myerid=wrong&erid_suffix=wrong&%65rid=wrong"): with self.subTest(text=text): - Network accessline 2145
"https://example.org/?myerid=wrong&erid_suffix=wrong&%65rid=wrong"): - Network accessline 2180
self.assertEqual(first["text_sha256"], second["text_sha256"]) self.save_state() self.links_path.write_text(json.dumps(["https://example.org/new"]), encoding="utf-8") - Network accessline 2181
self.save_state() self.links_path.write_text(json.dumps(["https://example.org/new"]), encoding="utf-8") third = self.import_source()["inspection"] - Network accessline 2182
self.links_path.write_text(json.dumps(["https://example.org/new"]), encoding="utf-8") - Network accessline 2436
self.import_source() self.assertEqual(self.state["creative"]["links"], [ "https://example.org/a?utm_source=TG&x=1&x=2#section", - Network accessline 2437
self.assertEqual(self.state["creative"]["links"], [ "https://example.org/a?utm_source=TG&x=1&x=2#section", "https://example.org/a?utm_source=TG&x=1&x=2#section", - Network accessline 2438
"https://example.org/a?utm_source=TG&x=1&x=2#section", - Network accessline 2439
"https://example.org/a?utm_source=TG&x=1&x=2#section", - Network accessline 2440
"http://EXAMPLE.org:8080/b?next=%2Fpage%3Fa%3D1&space=a+b"]) - Network accessline 2619
[1, "Якорь без адреса", "неизвестный переход"]], ["видимая ссылка в тексте"], [""], [None], ["/relative"], ["//example.org/"], ["mailto:mail@example.org"], ["https://"], ["https:///path"], - Network accessline 2620
["видимая ссылка в тексте"], [""], [None], ["/relative"], ["//example.org/"], ["mailto:mail@example.org"], ["https://"], ["https:///path"], ["https://example.org/a b"], ["https://example.org/\npat - Network accessline 2621
["mailto:mail@example.org"], ["https://"], ["https:///path"], - Network accessline 2622
["https://example.org/a b"], ["https://example.org/\npath"], ["https://[bad"]): - Network accessline 2630
def test_recorded_source_rejects_non_urls_but_legacy_state_remains_compatible(self): self.import_source() links = [["Якорь", "URL"], ["видимая ссылка в тексте", "https://example.org/"]] - Network accessline 2631
self.import_source() links = [["Якорь", "URL"], ["видимая ссылка в тексте", "https://example.org/"]] raw = json.dumps(links, ensure_ascii=False).encode("utf-8") - Network accessline 2632
links = [["Якорь", "URL"], ["видимая ссылка в тексте", "https://example.org/"]]
plugins/blogger-ads-skill/skills/blogger-ads-skill/tests/test_document_backup.py
- Executable scriptline 1
Executable file
plugins/blogger-ads-skill/skills/blogger-ads-skill/tests/test_edo_recovery_dates.py
- Executable scriptline 1
Executable file
plugins/blogger-ads-skill/skills/blogger-ads-skill/tests/test_erir_policy.py
- Executable scriptline 1
Executable file
plugins/blogger-ads-skill/skills/blogger-ads-skill/tests/test_exchange.py
- Executable scriptline 1
Executable file
plugins/blogger-ads-skill/skills/blogger-ads-skill/tests/test_handoff.py
- Executable scriptline 1
Executable file - Network accessline 130
def test_received_link_report_with_matching_urls_passes_readonly(self): urls = ['https://example.test/?b=2&a=1', 'https://example.test/?a=1&b=2'] * 2 - Network accessline 131
urls = ['https://example.test/?b=2&a=1', 'https://example.test/?a=1&b=2'] * 2 - Network accessline 156
def test_outgoing_docx_and_pdf_each_require_current_compared_link_report(self): from pypdf.annotations import Link url = 'https://example.test/product' - Network accessline 157
from pypdf.annotations import Link url = 'https://example.test/product' self.import_post('Продукт', [{'anchor': 'Продукт', 'url': url}]) - Network accessline 158
url = 'https://example.test/product' - Network accessline 161
with ZipFile(docx, 'w') as archive: archive.writestr('word/document.xml', '<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" ' - Network accessline 162
archive.writestr('word/document.xml', '<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" ' 'xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><w:bo - Network accessline 163
'<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" ' - Network accessline 164
'xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><w:body>' - Network accessline 166
'</w:body></w:document>') archive.writestr('word/_rels/document.xml.rels', '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' - Network accessline 167
archive.writestr('word/_rels/document.xml.rels', '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' '<Relationship Id="r1" Type="http://schemas.openxmlformats.org/officeDoc - Network accessline 168
'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' - Network accessline 169
'<Relationship Id="r1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" ' - Network accessline 207
self.register_link_report(report) data = self.data() data['creative']['links'] = ['https://example.test/expected'] - Network accessline 208
data = self.data() data['creative']['links'] = ['https://example.test/expected'] handoff.save(self.state, data) - Network accessline 209
data['creative']['links'] = ['https://example.test/expected'] - Network accessline 216
writer = PdfWriter() writer.add_blank_page(300, 300) writer.add_annotation(0, Link(rect=(10, 10, 100, 20), url='https://example.test/product')) - Network accessline 217
writer.add_blank_page(300, 300) writer.add_annotation(0, Link(rect=(10, 10, 100, 20), url='https://example.test/product')) writer.pages[0]['/Annots'][0].get_object()['/A'].pop('/URI') - Network accessline 218
writer.add_annotation(0, Link(rect=(10, 10, 100, 20), url='https://example.test/product')) - Network accessline 233
import inspect_links from pypdf.annotations import Link wanted, actual = 'https://example.test/product', 'https://example.test/wrong-target' - Network accessline 234
from pypdf.annotations import Link wanted, actual = 'https://example.test/product', 'https://example.test/wrong-target' data = self.data() - Network accessline 235
wanted, actual = 'https://example.test/product', 'https://example.test/wrong-target' - Network accessline 249
with ZipFile(source, 'w') as archive: archive.writestr('word/document.xml', '<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" ' - Network accessline 250
archive.writestr('word/document.xml', '<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" ' 'xmlns:r="http://schemas.openxmlformats.org/officeDocument/2 - Network accessline 251
'<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" ' - Network accessline 252
'xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 254
'</w:p></w:body></w:document>') archive.writestr('word/_rels/document.xml.rels', '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' - Network accessline 255
archive.writestr('word/_rels/document.xml.rels', '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' f'<Relationship Id="r1" Type="http://schemas.ope - Network accessline 256
'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' - Network accessline 257
f'<Relationship Id="r1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" ' - Network accessline 306
def test_link_report_rejects_tampered_comparison_and_malformed_rows(self): url = 'https://example.test/product' - Network accessline 307
url = 'https://example.test/product' - Network accessline 563
before, mtime = self.state.read_bytes(), self.state.stat().st_mtime_ns for text in ('План ещё не выдаю.', f'План готов: {files[1]}', '[План](https://example.org/plan.md)', '[План](#plan)'): - Network accessline 564
for text in ('План ещё не выдаю.', f'План готов: {files[1]}', '[План](https://example.org/plan.md)', '[План](#plan)'): with self.subTest(text=text): - Network accessline 565
'[План](https://example.org/plan.md)', '[План](#plan)'): - Network accessline 596
literal = self.file('document.txt?download=1', 'Зарегистрированная версия') handoff.register(self.state, [literal], 'prepared', 'v1', self.at, group='reference') for query in ('download=1', 'next=https://example.org'): - Network accessline 597
handoff.register(self.state, [literal], 'prepared', 'v1', self.at, group='reference') for query in ('download=1', 'next=https://example.org'): with self.subTest(query=query): - Network accessline 598
for query in ('download=1', 'next=https://example.org'): - Network accessline 1120
def test_history_cannot_call_text_hash_a_full_creative_hash(self): text = self.file('post.txt', 'Точный пост https://example.org') - Network accessline 1121
text = self.file('post.txt', 'Точный пост https://example.org') - Network accessline 1122
links = self.file('links.json', '["https://example.org"]') - Network accessline 1134
text.write_text('Новая согласуемая редакция https://example.org') - Network accessline 1586
def test_unregistered_accounting_files_are_checked_without_deal_state(self): self.response.write_text(f'Учебный [счёт](<{self.artifact}>), [справка](https://example.com/guide), ' - Network accessline 1587
self.response.write_text(f'Учебный [счёт](<{self.artifact}>), [справка](https://example.com/guide), ' - Network accessline 1641
f' [пример]({missing})\n\n' f'[unused]: {missing}\n\n' '[Справка][web]\n\n[web]: https://example.org/help "Справка"\n\n' - Network accessline 1642
f'[unused]: {missing}\n\n' '[Справка][web]\n\n[web]: https://example.org/help "Справка"\n\n' f':codex-file-citation{{path="{self.artifact}" purpose="source"}}') - Network accessline 1643
'[Справка][web]\n\n[web]: https://example.org/help "Справка"\n\n' - Network accessline 1692
encoded = str(literal).replace('?', '%3F') cases = ((f'{actual}?download=1#page', actual), (f'{actual}?next=https://example.org#page', actual), - Network accessline 1693
cases = ((f'{actual}?download=1#page', actual), (f'{actual}?next=https://example.org#page', actual), (f'{actual}#page?download=1', actual), - Network accessline 1694
(f'{actual}?next=https://example.org#page', actual), (f'{actual}#page?download=1', actual), (f'{actual}:12?download=1#page', actual), - Network accessline 1707
self.assertEqual(data['local_links'], [str(expected.resolve())]) actual.unlink() for query in ('download=1', 'next=https://example.org'): - Network accessline 1708
actual.unlink() for query in ('download=1', 'next=https://example.org'): self.response.write_text(f'[Файл](<{actual}?{query}>)') - Network accessline 1709
for query in ('download=1', 'next=https://example.org'):
plugins/blogger-ads-skill/skills/blogger-ads-skill/tests/test_links.py
- Executable scriptline 1
Executable file - Network accessline 28
path = self.base / "received.pdf" writer = PdfWriter() for targets in [["https://example.test/?a=1&b=2", "https://example.test/?a=1&b=2"], - Network accessline 29
writer = PdfWriter() for targets in [["https://example.test/?a=1&b=2", "https://example.test/?a=1&b=2"], ["https://example.test/?b=2&a=1"]]: - Network accessline 30
for targets in [["https://example.test/?a=1&b=2", "https://example.test/?a=1&b=2"], - Network accessline 31
["https://example.test/?b=2&a=1"]]: - Network accessline 45
path = self.base / "received.docx" with ZipFile(path, "w") as archive: archive.writestr("word/document.xml", '''<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.o - Network accessline 46
with ZipFile(path, "w") as archive: archive.writestr("word/document.xml", '''<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relat - Network accessline 47
archive.writestr("word/document.xml", '''<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><w:body> - Network accessline 48
<w:p><w:hyperlink r:id="r1"><w:r><w:t>При</w:t></w:r><w:r><w:t>мер</w:t></w:r></w:hyperlink></w:p> <w:p><w:r><w:t>https://plain.example.test/</w:t></w:r><w:hyperlink r:id="r1"><w:r><w:t>OpenAI</w:t><w:tab/><w:t>тарифы</w:t><w:br/><w:t>подро - Network accessline 49
<w:p><w:r><w:t>https://plain.example.test/</w:t></w:r><w:hyperlink r:id="r1"><w:r><w:t>OpenAI</w:t><w:tab/><w:t>тарифы</w:t><w:br/><w:t>подробнее</w:t></w:r></w:hyperlink><w:hyperlink r:id="r2"><w:r><w:t>Пример</w:t></w:r></w:hyperlink></w: - Network accessline 50
</w:body></w:document>'''.replace("</w:body>", extra + "</w:body>")) archive.writestr("word/_rels/document.xml.rels", '''<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="r1" - Network accessline 51
archive.writestr("word/_rels/document.xml.rels", '''<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> - Network accessline 52
<Relationship Id="r1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Target="https://pricing.example.test/?a=1&b=2" TargetMode="External"/> - Network accessline 53
<Relationship Id="r2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Target="https://product.example.test/?a=1&b=2" TargetMode="External"/> - Network accessline 65
rect = page.search_for('Product')[0] page.insert_link({'kind': pymupdf.LINK_URI, 'from': rect, 'uri': 'https://pricing.example.test/'}) - Network accessline 66
page.insert_link({'kind': pymupdf.LINK_URI, 'from': rect, 'uri': 'https://pricing.example.test/'}) page.set_cropbox(pymupdf.Rect(10, 10, 290, 290)) - Network accessline 67
'uri': 'https://pricing.example.test/'}) - Network accessline 74
self.assertEqual(len(result['links']), 1) self.assertEqual(result['links'][0]['anchor_hint'].strip(), 'Product') self.assertEqual(result['links'][0]['target'], 'https://pricing.example.test/') - Network accessline 75
self.assertEqual(result['links'][0]['anchor_hint'].strip(), 'Product') self.assertEqual(result['links'][0]['target'], 'https://pricing.example.test/') self.assertEqual(path.read_bytes(), original) - Network accessline 76
self.assertEqual(result['links'][0]['target'], 'https://pricing.example.test/') - Network accessline 96
self.assertEqual(len(actual), 3) # Plain URL is not a relationship. self.assertEqual(actual[0]["anchor"], "Пример") self.assertEqual(actual[0]["target"], "https://pricing.example.test/?a=1&b=2") - Network accessline 97
self.assertEqual(actual[0]["anchor"], "Пример") self.assertEqual(actual[0]["target"], "https://pricing.example.test/?a=1&b=2") self.assertEqual(actual[1]["anchor"], "OpenAI\tтарифы\nподробнее") - Network accessline 98
self.assertEqual(actual[0]["target"], "https://pricing.example.test/?a=1&b=2") - Network accessline 105
def test_docx_target_requires_external_hyperlink_relationship(self): expected = ["https://pricing.example.test/?a=1&b=2"] * 2 + ["https://product.example.test/?a=1&b=2"] - Network accessline 106
expected = ["https://pricing.example.test/?a=1&b=2"] * 2 + ["https://product.example.test/?a=1&b=2"] - Network accessline 107
hyperlink_type = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" - Network accessline 145
def test_counts_expose_swapped_anchor_without_declaring_document_invalid(self): expected = ["https://product.example.test/?a=1&b=2"] * 2 + ["https://pricing.example.test/?a=1&b=2"] - Network accessline 146
expected = ["https://product.example.test/?a=1&b=2"] * 2 + ["https://pricing.example.test/?a=1&b=2"] - Network accessline 154
def test_docx_hyperlink_fields_warn_even_when_relationship_urls_match(self): expected = ["https://pricing.example.test/?a=1&b=2"] * 2 + ["https://product.example.test/?a=1&b=2"] - Network accessline 155
expected = ["https://pricing.example.test/?a=1&b=2"] * 2 + ["https://product.example.test/?a=1&b=2"] - Network accessline 156
for field in ( '<w:fldSimple w:instr=\' HYPERLINK "https://hidden.example.test/" \'>\n' '<w:r><w:t>Другой адрес</w:t></w:r></w:fldSimple>', - Network accessline 157
'<w:fldSimple w:instr=\' HYPERLINK "https://hidden.example.test/" \'>\n' - Network accessline 158
'<w:r><w:t>Другой адрес</w:t></w:r></w:fldSimple>', '<w:r><w:fldChar w:fldCharType="begin"/><w:instrText> HYPERLINK "https://hidden.example.test/" </w:instrText>' '<w:fldChar w:fldCharType="separate"/><w:t>Др - Network accessline 159
'<w:r><w:fldChar w:fldCharType="begin"/><w:instrText> HYPERLINK "https://hidden.example.test/" </w:instrText>' - Network accessline 160
'<w:fldChar w:fldCharType="separate"/><w:t>Другой адрес</w:t><w:fldChar w:fldCharType="end"/></w:r>', '<w:r><w:fldChar w:fldCharType="begin"/><w:instrText> HYPER</w:instrText></w:r>' '<w:r><w:instrText>LINK " - Network accessline 161
'<w:r><w:fldChar w:fldCharType="begin"/><w:instrText> HYPER</w:instrText></w:r>' '<w:r><w:instrText>LINK "https://hidden.example.test/" </w:instrText>' '<w:fldChar w:fldCharType="separate"/><w:t>Другой адрес< - Network accessline 162
'<w:r><w:instrText>LINK "https://hidden.example.test/" </w:instrText>' - Network accessline 167
if part != "word/document.xml": with ZipFile(path, "a") as archive: archive.writestr(part, '<w:hdr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">' - Network accessline 168
with ZipFile(path, "a") as archive: archive.writestr(part, '<w:hdr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">' '<w:p>' + field + '</w:p></ - Network accessline 169
archive.writestr(part, '<w:hdr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">' - Network accessline 180
def test_docx_other_fields_and_separate_instructions_do_not_warn(self): fields = '<w:fldSimple w:instr=" PAGE "><w:r><w:t>1</w:t></w:r></w:fldSimple>' for instruction in (' MERGEFIELD "HYPERLINK" ', ' HYPER', 'LINK "https:// - Network accessline 181
fields = '<w:fldSimple w:instr=" PAGE "><w:r><w:t>1</w:t></w:r></w:fldSimple>' for instruction in (' MERGEFIELD "HYPERLINK" ', ' HYPER', 'LINK "https://example.test/" ', ' HYPERLINKED '): fields += ('<w:r><w:fldChar w:fl - Network accessline 182
for instruction in (' MERGEFIELD "HYPERLINK" ', ' HYPER', 'LINK "https://example.test/" ', ' HYPERLINKED '): - Network accessline 190
def test_docx_drawingml_links_warn_in_every_word_part(self): expected = ["https://pricing.example.test/?a=1&b=2"] * 2 + ["https://product.example.test/?a=1&b=2"] - Network accessline 191
expected = ["https://pricing.example.test/?a=1&b=2"] * 2 + ["https://product.example.test/?a=1&b=2"] - Network accessline 192
for tag in ("hlinkClick", "hlinkHover", "no_link"): drawing = ('<w:p><w:r><w:drawing xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" ' 'xmlns:wp="http://schemas.openxmlformats.org/drawingml - Network accessline 193
drawing = ('<w:p><w:r><w:drawing xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" ' - Network accessline 194
'xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" ' - Network accessline 195
'xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' - Network accessline 202
if part != "word/document.xml": with ZipFile(path, "a") as archive: archive.writestr(part, '<w:hdr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">' - Network accessline 203
with ZipFile(path, "a") as archive: archive.writestr(part, '<w:hdr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">' + drawing + '</w:hdr>') - Network accessline 204
archive.writestr(part, '<w:hdr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">' - Network accessline 206
rel_path = str(Path(part).parent / "_rels" / (Path(part).name + ".rels")) archive.writestr(rel_path, '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relations - Network accessline 207
archive.writestr(rel_path, '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' '<Relationship Id="r1" Type="http://schemas.openxmlformats.org - Network accessline 208
'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' - Network accessline 209
'<Relationship Id="r1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" ' - Network accessline 210
'Target="https://hidden.example.test/" TargetMode="External"/></Relationships>') - Network accessline 221
def test_docx_vml_href_warns_in_every_word_part(self): url = "https://example.test/product" - Network accessline 222
url = "https://example.test/product" - Network accessline 228
ordinary = ('<w:p><w:hyperlink r:id="r1"><w:r><w:t>Продукт</w:t></w:r>' '</w:hyperlink></w:p>') if with_links else '' vml = (f'<w:p><w:r><w:pict><v:{tag} {attribute}="https://hidde - Network accessline 229
'</w:hyperlink></w:p>') if with_links else '' vml = (f'<w:p><w:r><w:pict><v:{tag} {attribute}="https://hidden.example.test/"/>' '</w:pict></w:r></w:p>') - Network accessline 230
vml = (f'<w:p><w:r><w:pict><v:{tag} {attribute}="https://hidden.example.test/"/>' - Network accessline 231
'</w:pict></w:r></w:p>') start = ('<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" ' 'xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006 - Network accessline 232
start = ('<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" ' - Network accessline 233
'xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" ' - Network accessline 241
archive.writestr(part, start + vml + end) archive.writestr('word/_rels/document.xml.rels', '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' - Network accessline 242
archive.writestr('word/_rels/document.xml.rels', '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' '<Relationship Id="r1" Type="http://sche - Network accessline 243
'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' - Network accessline 244
'<Relationship Id="r1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" ' - Network accessline 268
with ZipFile(path, "w") as archive: archive.writestr("word/document.xml", '''<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" - Network accessline 269
archive.writestr("word/document.xml", '''<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" - Network accessline 270
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" - Network accessline 271
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" - Network accessline 281
relationships = ''.join( f'<Relationship Id="{name}" ' 'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" ' - Network accessline 282
f'<Relationship Id="{name}" ' 'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" ' f'Target="https://example.test/{name}" TargetMode="External"/>' - Network accessline 283
'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" ' - Network accessline 284
f'Target="https://example.test/{name}" TargetMode="External"/>' - Network accessline 285
for name in ("before", "inside", "after", "last")) archive.writestr("word/_rels/document.xml.rels", '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' - Network accessline 286
archive.writestr("word/_rels/document.xml.rels", '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' + relationships + '</Relationships>') - Network accessline 287
'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' - Network accessline 288
+ relationships + '</Relationships>') expected = [f"https://example.test/{name}" for name in ("before", "inside", "inside", "after", "last")] original = path.read_bytes() - Network accessline 289
expected = [f"https://example.test/{name}" for name in ("before", "inside", "inside", "after", "last")] - Network accessline 302
def test_expected_list_keeps_order_duplicates_and_exact_parameters(self): path = self.base / "expected.json" expected = ["https://example.test/?b=2&a=1", "https://example.test/?a=1&b=2"] * 2 - Network accessline 303
path = self.base / "expected.json" expected = ["https://example.test/?b=2&a=1", "https://example.test/?a=1&b=2"] * 2 path.write_text(json.dumps(expected), encoding="utf-8") - Network accessline 304
expected = ["https://example.test/?b=2&a=1", "https://example.test/?a=1&b=2"] * 2 - Network accessline 305
path.write_text(json.dumps(expected), encoding="utf-8") self.assertEqual(links.expected_urls(path), expected) for invalid in [{"links": expected}, [["anchor", "неизвестный переход"]], ["https://bad example.test/"]]: - Network accessline 306
self.assertEqual(links.expected_urls(path), expected) for invalid in [{"links": expected}, [["anchor", "неизвестный переход"]], ["https://bad example.test/"]]: path.write_text(json.dumps(invalid), encoding="utf-8") - Network accessline 307
for invalid in [{"links": expected}, [["anchor", "неизвестный переход"]], ["https://bad example.test/"]]: - Network accessline 349
result = links.inspect_links(path) self.assertEqual(len(result["links"]), 3) self.assertEqual(result["links"][0]["target"], "https://example.test/?a=1&b=2") - Network accessline 350
self.assertEqual(len(result["links"]), 3) self.assertEqual(result["links"][0]["target"], "https://example.test/?a=1&b=2") self.assertIsNone(result["links"][0]["rect"]) - Network accessline 351
self.assertEqual(result["links"][0]["target"], "https://example.test/?a=1&b=2") - Network accessline 356
def test_pdf_unparsed_actions_warn_even_when_urls_match(self): expected = ["https://example.test/?a=1&b=2"] * 2 + ["https://example.test/?b=2&a=1"] - Network accessline 357
expected = ["https://example.test/?a=1&b=2"] * 2 + ["https://example.test/?b=2&a=1"] - Network accessline 363
page = writer.pages[0] action = DictionaryObject({NameObject("/S"): NameObject(kind if not kind.startswith("/Next") else "/Launch"), NameObject("/F"): TextStringObject("https://hidd - Network accessline 364
action = DictionaryObject({NameObject("/S"): NameObject(kind if not kind.startswith("/Next") else "/Launch"), NameObject("/F"): TextStringObject("https://hidden.example.test/remote.pdf"), - Network accessline 365
NameObject("/F"): TextStringObject("https://hidden.example.test/remote.pdf"), - Network accessline 384
def test_pdf_additional_annotation_actions_warn(self): expected = ["https://example.test/?a=1&b=2"] * 2 + ["https://example.test/?b=2&a=1"] - Network accessline 385
expected = ["https://example.test/?a=1&b=2"] * 2 + ["https://example.test/?b=2&a=1"] - Network accessline 399
page["/Annots"].append(writer._add_object(annotation)) action = DictionaryObject({NameObject("/S"): NameObject(kind), NameObject("/F"): TextStringObject("https://hidden.example.test/remote.pdf"), - Network accessline 400
action = DictionaryObject({NameObject("/S"): NameObject(kind), NameObject("/F"): TextStringObject("https://hidden.example.test/remote.pdf"), NameObject("/D"): TextStringObject("section")}) - Network accessline 401
NameObject("/F"): TextStringObject("https://hidden.example.test/remote.pdf"), - Network accessline 413
def test_pdf_non_link_primary_actions_warn(self): expected = ["https://example.test/?a=1&b=2"] * 2 + ["https://example.test/?b=2&a=1"] - Network accessline 414
expected = ["https://example.test/?a=1&b=2"] * 2 + ["https://example.test/?b=2&a=1"] - Network accessline 427
annotation[NameObject("/A")] = writer._add_object(DictionaryObject({ NameObject("/S"): NameObject("/URI"), NameObject("/URI"): TextStringObject("https://hidden.example.test/")})) - Network accessline 428
NameObject("/S"): NameObject("/URI"), NameObject("/URI"): TextStringObject("https://hidden.example.test/")})) writer.pages[0]["/Annots"].append(writer._add_object(annotation)) - Network accessline 429
NameObject("/URI"): TextStringObject("https://hidden.example.test/")})) - Network accessline 450
path = self.pdf() writer.clone_document_from_reader(PdfReader(path)) expected = ["https://example.test/?a=1&b=2"] * 2 + ["https://example.test/?b=2&a=1"] - Network accessline 451
writer.clone_document_from_reader(PdfReader(path)) expected = ["https://example.test/?a=1&b=2"] * 2 + ["https://example.test/?b=2&a=1"] else: - Network accessline 452
expected = ["https://example.test/?a=1&b=2"] * 2 + ["https://example.test/?b=2&a=1"] - Network accessline 456
expected = [] action = DictionaryObject({NameObject("/S"): NameObject("/URI"), NameObject("/URI"): TextStringObject("https://hidden.example.test/")}) - Network accessline 457
action = DictionaryObject({NameObject("/S"): NameObject("/URI"), NameObject("/URI"): TextStringObject("https://hidden.example.test/")}) if kind in ("catalog /AA", "/Names/JavaScript"): - Network accessline 458
NameObject("/URI"): TextStringObject("https://hidden.example.test/")}) - Network accessline 508
rel_path=None, relationship_type=None): path = self.base / 'imported.docx' url = 'https://example.test/product' - Network accessline 509
path = self.base / 'imported.docx' url = 'https://example.test/product' ordinary = ('<w:p><w:hyperlink r:id="r1"><w:r><w:t>Продукт</w:t></w:r>' - Network accessline 510
url = 'https://example.test/product' - Network accessline 512
'</w:hyperlink></w:p>') if with_links else '' chunk = '<w:altChunk r:id="import1"/>' if element else '' start = ('<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" ' - Network accessline 513
chunk = '<w:altChunk r:id="import1"/>' if element else '' start = ('<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" ' 'xmlns:r="http://schemas.openxmlformats.org/officeDocument/200 - Network accessline 514
start = ('<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" ' - Network accessline 515
'xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><w:body>') - Network accessline 519
parts[part] = start + chunk + end rels = {'word/_rels/document.xml.rels': ( '<Relationship Id="r1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" ' - Network accessline 520
rels = {'word/_rels/document.xml.rels': ( '<Relationship Id="r1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" ' f'Target="{url}" TargetMode="External"/>')} - Network accessline 521
'<Relationship Id="r1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" ' - Network accessline 523
if relationship: rel_path = rel_path or str(Path(part).parent / '_rels' / (Path(part).name + '.rels')) relationship_type = relationship_type or 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFC - Network accessline 524
rel_path = rel_path or str(Path(part).parent / '_rels' / (Path(part).name + '.rels')) relationship_type = relationship_type or 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk' target = f' - Network accessline 525
relationship_type = relationship_type or 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk' - Network accessline 526
target = f'https://remote.example.test/import.{extension}' if external else f'import.{extension}' - Network accessline 530
if not external: parts[str(Path(part).parent / ('import.' + extension))] = ( '<html><body><a href="https://hidden.example.test/">Дополнительный переход</a></body></html>' - Network accessline 531
parts[str(Path(part).parent / ('import.' + extension))] = ( '<html><body><a href="https://hidden.example.test/">Дополнительный переход</a></body></html>' if extension == 'html' else - Network accessline 532
'<html><body><a href="https://hidden.example.test/">Дополнительный переход</a></body></html>' - Network accessline 533
if extension == 'html' else 'MIME-Version: 1.0\r\nContent-Type: text/html\r\n\r\n' '<a href="https://hidden.example.test/">Дополнительный переход</a>') - Network accessline 534
'MIME-Version: 1.0\r\nContent-Type: text/html\r\n\r\n' '<a href="https://hidden.example.test/">Дополнительный переход</a>') with ZipFile(path, 'w') as archive: - Network accessline 535
'<a href="https://hidden.example.test/">Дополнительный переход</a>') - Network accessline 538
archive.writestr(name, content) for name, content in rels.items(): archive.writestr(name, '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' - Network accessline 539
for name, content in rels.items(): archive.writestr(name, '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' + content + '</Relationships>') - Network accessline 540
archive.writestr(name, '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' - Network accessline 576
for rel_path in ('word/_rels/document.xml.rels', 'word/_rels/header1.xml.rels', 'customXml/_rels/item1.xml.rels'): for prefix in ('http://schemas.openxmlformats.org/officeDocument/2006/relationships/', - Network accessline 577
'customXml/_rels/item1.xml.rels'): for prefix in ('http://schemas.openxmlformats.org/officeDocument/2006/relationships/', 'http://purl.oclc.org/ooxml/officeDocument/relationships/'): - Network accessline 578
for prefix in ('http://schemas.openxmlformats.org/officeDocument/2006/relationships/', - Network accessline 579
'http://purl.oclc.org/ooxml/officeDocument/relationships/'): - Network accessline 604
def as_strict(self, path, strict_package=False): replacements = { 'xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"': - Network accessline 605
replacements = { 'xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"': 'xmlns:w="http://purl.oclc.org/ooxml/wordprocessingml/main"', - Network accessline 606
'xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"': - Network accessline 607
'xmlns:w="http://purl.oclc.org/ooxml/wordprocessingml/main"', - Network accessline 608
'xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"': - Network accessline 609
'xmlns:a="http://purl.oclc.org/ooxml/drawingml/main"', - Network accessline 610
'xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"': - Network accessline 611
'xmlns:r="http://purl.oclc.org/ooxml/officeDocument/relationships"', - Network accessline 612
'Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/': - Network accessline 613
'Type="http://purl.oclc.org/ooxml/officeDocument/relationships/', - Network accessline 614
} if strict_package: replacements['xmlns="http://schemas.openxmlformats.org/package/2006/relationships"'] = ( - Network accessline 615
if strict_package: replacements['xmlns="http://schemas.openxmlformats.org/package/2006/relationships"'] = ( 'xmlns="http://purl.oclc.org/ooxml/package/relationships"') - Network accessline 616
replacements['xmlns="http://schemas.openxmlformats.org/package/2006/relationships"'] = ( - Network accessline 617
'xmlns="http://purl.oclc.org/ooxml/package/relationships"') - Network accessline 627
def test_strict_links_match_transitional_anchors_locations_and_duplicate_urls(self): expected = ['https://pricing.example.test/?a=1&b=2'] * 2 + ['https://product.example.test/?a=1&b=2'] - Network accessline 628
expected = ['https://pricing.example.test/?a=1&b=2'] * 2 + ['https://product.example.test/?a=1&b=2'] - Network accessline 649
def test_strict_internal_anchor_and_literal_namespace_urls_are_preserved(self): literal = 'http://purl.oclc.org/ooxml/officeDocument/relationships/hyperlink?b=2&a=1&a=2#raw' - Network accessline 650
literal = 'http://purl.oclc.org/ooxml/officeDocument/relationships/hyperlink?b=2&a=1&a=2#raw' - Network accessline 656
parts['word/document.xml'] = parts['word/document.xml'].replace('<w:t>При</w:t>'.encode(), b'<w:t>' + escaped + b'</w:t>') parts['word/_rels/document.xml.rels'] = parts['word/_rels/document.xml.rels'].replace( b'https:// - Network accessline 657
parts['word/_rels/document.xml.rels'] = parts['word/_rels/document.xml.rels'].replace( b'https://pricing.example.test/?a=1&b=2', escaped) with ZipFile(path, 'w') as archive: - Network accessline 658
b'https://pricing.example.test/?a=1&b=2', escaped) - Network accessline 671
def test_strict_unparsed_features_keep_warnings(self): features = { 'HYPERLINK': '<w:p><w:fldSimple w:instr=\' HYPERLINK "https://hidden.example.test/" \'> ' - Network accessline 672
features = { 'HYPERLINK': '<w:p><w:fldSimple w:instr=\' HYPERLINK "https://hidden.example.test/" \'> ' '<w:r><w:t>Импорт</w:t></w:r></w:fldSimple></w:p>', - Network accessline 673
'HYPERLINK': '<w:p><w:fldSimple w:instr=\' HYPERLINK "https://hidden.example.test/" \'> ' - Network accessline 674
'<w:r><w:t>Импорт</w:t></w:r></w:fldSimple></w:p>', 'split-field': '<w:p><w:r><w:fldChar w:fldCharType="begin"/><w:instrText> HYPER</w:instrText></w:r>' '<w:r><w:instrText>LINK "https://hidden.example. - Network accessline 675
'split-field': '<w:p><w:r><w:fldChar w:fldCharType="begin"/><w:instrText> HYPER</w:instrText></w:r>' '<w:r><w:instrText>LINK "https://hidden.example.test/" </w:instrText>' '<w:fldChar w: - Network accessline 676
'<w:r><w:instrText>LINK "https://hidden.example.test/" </w:instrText>' - Network accessline 677
'<w:fldChar w:fldCharType="end"/></w:r></w:p>', 'hlinkClick': '<w:p><w:r><w:drawing xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">' '<a:hlinkClick r:id="r1"/></w:drawing></w:r></w:p>', - Network accessline 678
'hlinkClick': '<w:p><w:r><w:drawing xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">' - Network accessline 679
'<a:hlinkClick r:id="r1"/></w:drawing></w:r></w:p>', 'hlinkHover': '<w:p><w:r><w:drawing xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">' '<a:hlinkHover r:id="r1"/></w:drawing></w:r></w - Network accessline 680
'hlinkHover': '<w:p><w:r><w:drawing xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">' - Network accessline 706
path = self.pdf() writer.clone_document_from_reader(PdfReader(path)) expected = ["https://example.test/?a=1&b=2"] * 2 + ["https://example.test/?b=2&a=1"] - Network accessline 707
writer.clone_document_from_reader(PdfReader(path)) expected = ["https://example.test/?a=1&b=2"] * 2 + ["https://example.test/?b=2&a=1"] else: - Network accessline 708
expected = ["https://example.test/?a=1&b=2"] * 2 + ["https://example.test/?b=2&a=1"] - Network accessline 717
NameObject("/Parent"): outline_ref, NameObject("/A"): DictionaryObject({NameObject("/S"): NameObject("/URI"), NameObject("/URI"): TextStringObject("https://hidden.example.test/bookmark")})}) - Network accessline 718
NameObject("/A"): DictionaryObject({NameObject("/S"): NameObject("/URI"), NameObject("/URI"): TextStringObject("https://hidden.example.test/bookmark")})}) item_ref = writer._add_object(item) - Network accessline 719
NameObject("/URI"): TextStringObject("https://hidden.example.test/bookmark")})}) - Network accessline 724
elif kind == "/AcroForm": action = DictionaryObject({NameObject("/S"): NameObject("/JavaScript"), NameObject("/JS"): TextStringObject("app.launchURL('https://hidden.example.test/form')")}) - Network accessline 725
action = DictionaryObject({NameObject("/S"): NameObject("/JavaScript"), NameObject("/JS"): TextStringObject("app.launchURL('https://hidden.example.test/form')")}) field = DictionaryObject({NameObject("/FT"): Name - Network accessline 726
NameObject("/JS"): TextStringObject("app.launchURL('https://hidden.example.test/form')")}) - Network accessline 748
catalog = PdfReader(path).trailer["/Root"] if kind == "/Outlines": self.assertEqual(catalog[kind]["/First"]["/A"]["/URI"], "https://hidden.example.test/bookmark") - Network accessline 749
if kind == "/Outlines": self.assertEqual(catalog[kind]["/First"]["/A"]["/URI"], "https://hidden.example.test/bookmark") else: - Network accessline 750
self.assertEqual(catalog[kind]["/First"]["/A"]["/URI"], "https://hidden.example.test/bookmark")
plugins/blogger-ads-skill/skills/blogger-ads-skill/tests/test_print_html.py
- Executable scriptline 1
Executable file
plugins/codex-review/skills/codex-review/.gitignore
- Access to secretsline 1
[Credential-related source omitted]
plugins/codex-review/skills/codex-review/README.md
- Dangerous shell operationline 56
git rm -r --cached --ignore-unmatch .codex-review/
plugins/codex-review/skills/codex-review/scripts/auto-approve-plan.sh
- Executable scriptline 1
#!/bin/sh - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 92
rm -f "$verdict_file" "$phase_file" - Dangerous shell operationline 92
rm -f "$verdict_file" "$phase_file" - Dangerous shell operationline 101
rm -f "$verdict_file" "$phase_file" - Dangerous shell operationline 101
rm -f "$verdict_file" "$phase_file" - Dangerous shell operationline 130
rm -f "$verdict_file" "$phase_file" - Dangerous shell operationline 130
rm -f "$verdict_file" "$phase_file" - Dangerous shell operationline 138
rm -f "$verdict_file" "$phase_file" - Dangerous shell operationline 138
rm -f "$verdict_file" "$phase_file"
plugins/codex-review/skills/codex-review/scripts/codex-review.sh
plugins/codex-review/skills/codex-review/scripts/codex-state.sh
- Executable scriptline 1
#!/bin/bash
plugins/codex-review/skills/codex-review/scripts/common.sh
- Executable scriptline 1
#!/bin/bash - Dangerous shell operationline 395
rm -f "$orphan" - Dangerous shell operationline 399
rm -f "$tmp_file" - Dangerous shell operationline 404
rm -f "$tmp_file" - Dangerous shell operationline 448
rm -f "$STATE_DIR/STATUS.md" - Dangerous shell operationline 567
if ! rm -rf "$dir"; then - Dangerous shell operationline 595
rm -f "$tmp_file" - Dangerous shell operationline 598
if rm -rf "$lock_dir"; then
plugins/crawl4ai-seo/skills/crawl4ai-seo/SKILL.md
- Network accessline 63
# 1. Создать job python3 scripts/init_job.py --domain https://example.com --project client-a --label full-audit - Network accessline 64
python3 scripts/init_job.py --domain https://example.com --project client-a --label full-audit - Network accessline 85
python3 scripts/seed_urls.py --domain https://example.com --project client-a --label quick-check
plugins/crawl4ai-seo/skills/crawl4ai-seo/config/README.md
plugins/crawl4ai-seo/skills/crawl4ai-seo/config/defaults.example.json
- Network accessline 37
"enabled": false, "token_file": "../scrapedo-web-scraper/config/token.txt", "api_base": "http://api.scrape.do" - Network accessline 38
"token_file": "../scrapedo-web-scraper/config/token.txt", "api_base": "http://api.scrape.do" } - Network accessline 39
"api_base": "http://api.scrape.do"
plugins/crawl4ai-seo/skills/crawl4ai-seo/references/WORKFLOWS.md
- Network accessline 10
python3 scripts/init_job.py --domain https://example.com --project client-a --label site-inventory - Network accessline 33
uv run --script scripts/crawl_batch.py \ --domain https://example.com \ - Network accessline 34
--domain https://example.com \ - Network accessline 35
--label serp-shortlist \ --url https://example.com/page-a \ --url https://competitor.com/page-b - Network accessline 36
--url https://example.com/page-a \ - Network accessline 37
--url https://competitor.com/page-b
plugins/crawl4ai-seo/skills/crawl4ai-seo/scripts/build_navigation_report.py
plugins/crawl4ai-seo/skills/crawl4ai-seo/scripts/common.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 87
if not value: return "" parsed = urlparse(value if "://" in value else f"https://{value}") - Network accessline 88
return "" parsed = urlparse(value if "://" in value else f"https://{value}") return (parsed.netloc or parsed.path).lower().strip() - Network accessline 89
parsed = urlparse(value if "://" in value else f"https://{value}") - Network accessline 95
if not value: return value parsed = urlparse(value if "://" in value else f"https://{value}") - Network accessline 96
return value parsed = urlparse(value if "://" in value else f"https://{value}") scheme = parsed.scheme or "https" - Network accessline 97
parsed = urlparse(value if "://" in value else f"https://{value}")
plugins/crawl4ai-seo/skills/crawl4ai-seo/scripts/compare_pages.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/crawl4ai-seo/skills/crawl4ai-seo/scripts/crawl_batch.py
- Executable scriptline 1
#!/usr/bin/env -S uv run --script
plugins/crawl4ai-seo/skills/crawl4ai-seo/scripts/doctor.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/crawl4ai-seo/skills/crawl4ai-seo/scripts/seed_urls.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 35
def fetch_text(url: str, timeout: int) -> str | None: req = urllib.request.Request(url, headers={"User-Agent": USER_AGENT}) - Network accessline 36
req = urllib.request.Request(url, headers={"User-Agent": USER_AGENT}) - Network accessline 37
try: with urllib.request.urlopen(req, timeout=timeout) as response: content_type = response.headers.get("Content-Type", "") - Network accessline 38
with urllib.request.urlopen(req, timeout=timeout) as response: - Network accessline 138
parser.add_argument("--params", help="Path to JSON launch params") parser.add_argument("--job-id", help="Existing job_id to reuse, or new one to create") parser.add_argument("--domain", help="Domain or site root, e.g. https://exampl - Network accessline 139
parser.add_argument("--job-id", help="Existing job_id to reuse, or new one to create") parser.add_argument("--domain", help="Domain or site root, e.g. https://example.com") parser.add_argument("--site", help="Optional site slug over - Network accessline 140
parser.add_argument("--domain", help="Domain or site root, e.g. https://example.com") - Network accessline 246
context = existing_job else: target_domain = domain_hint or f"https://{domain_host}" - Network accessline 247
else: target_domain = domain_hint or f"https://{domain_host}" launch_params = deep_merge( - Network accessline 248
target_domain = domain_hint or f"https://{domain_host}"
plugins/docx-contracts/skills/docx-contracts/scripts/extract_schema.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/docx-contracts/skills/docx-contracts/scripts/fill_template.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/fal-ai-image/skills/fal-ai-image/.gitignore
- Access to secretsline 2
[Credential-related source omitted]
plugins/fal-ai-image/skills/fal-ai-image/SKILL.md
- Network accessline 192
sh scripts/edit.sh --model "gemini" --prompt "combine these into a collage" --image-urls "https://example.com/img1.png,https://example.com/img2.png" - Network accessline 193
--model "gemini" \ --prompt "combine these into a collage" \ --image-urls "https://example.com/img1.png,https://example.com/img2.png" \ - Network accessline 194
--prompt "combine these into a collage" \ --image-urls "https://example.com/img1.png,https://example.com/img2.png" \ --aspect-ratio "16:9" \ - Network accessline 195
--image-urls "https://example.com/img1.png,https://example.com/img2.png" \ - Network accessline 204
sh scripts/edit.sh --model "gpt" --prompt "make this product shot look like a premium studio campaign" --image-urls "https://example.com/source.png" - Network accessline 205
--model "gpt" \ --prompt "make this product shot look like a premium studio campaign" \ --image-urls "https://example.com/source.png" \ - Network accessline 206
--prompt "make this product shot look like a premium studio campaign" \ --image-urls "https://example.com/source.png" \ --mask-url "https://example.com/mask.png" \ - Network accessline 207
--image-urls "https://example.com/source.png" \ - Network accessline 208
--mask-url "https://example.com/mask.png" \
plugins/fal-ai-image/skills/fal-ai-image/config/.env.example
plugins/fal-ai-image/skills/fal-ai-image/config/README.md
- Network accessline 48
1. Get an API key at https://fal.ai/dashboard/keys - Network accessline 130
As of April 22, 2026, fal's GPT Image 2 playground shows common high-quality renders landing roughly around `$0.15-$0.22` per image depending on size, so the "about $0.18" rule of thumb is reasonable for user guidance. Verify current prices - Network accessline 199
- Nano Banana Pro API: https://fal.ai/models/fal-ai/nano-banana-pro/api - Network accessline 200
- Nano Banana Pro edit API: https://fal.ai/models/fal-ai/nano-banana-pro/edit/api - Network accessline 201
- GPT Image 2 API: https://fal.ai/models/openai/gpt-image-2/api - Network accessline 202
- GPT Image 2 edit API: https://fal.ai/models/openai/gpt-image-2/edit/api
plugins/fal-ai-image/skills/fal-ai-image/references/EDITING.md
- Network accessline 67
sh scripts/edit.sh \ --model gpt \ --image-urls "https://example.com/base.png" \ - Network accessline 68
--model gpt \ --image-urls "https://example.com/base.png" \ --mask-url "https://example.com/mask.png" \ - Network accessline 69
--image-urls "https://example.com/base.png" \ - Network accessline 70
--mask-url "https://example.com/mask.png" \ - Network accessline 78
- fal GPT edit API: https://fal.ai/models/openai/gpt-image-2/edit/api - Network accessline 79
- OpenAI image generation guide: https://platform.openai.com/docs/guides/image-generation
plugins/fal-ai-image/skills/fal-ai-image/references/MODELS.md
- Network accessline 48
- https://fal.ai/models/openai/gpt-image-2/playground
plugins/fal-ai-image/skills/fal-ai-image/scripts/common.sh
- Executable scriptline 1
#!/bin/sh - Access to secretsline 31
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 102
[Credential-related source omitted] - Network accessline 153
queue_api_base() { printf 'https://queue.fal.run/%s\n' "$(model_queue_name "$1")" - Network accessline 154
printf 'https://queue.fal.run/%s\n' "$(model_queue_name "$1")" - Network accessline 157
request_api_base() { printf 'https://queue.fal.run/%s\n' "$FAL_IMAGE_MODEL_RESOLVED" - Network accessline 158
printf 'https://queue.fal.run/%s\n' "$FAL_IMAGE_MODEL_RESOLVED" - Access to secretsline 168
[Credential-related source omitted] - Access to secretsline 208
[Credential-related source omitted] - Access to secretsline 246
[Credential-related source omitted] - Access to secretsline 247
[Credential-related source omitted] - Access to secretsline 248
[Credential-related source omitted] - Access to secretsline 249
[Credential-related source omitted] - Network accessline 375
[Credential-related source omitted] - Access to secretsline 375
[Credential-related source omitted] - Access to secretsline 376
[Credential-related source omitted] - Network accessline 387
while [ "$_attempt" -lt "$_max_attempts" ]; do _status_response=$(curl -s "$_api_base/requests/$_request_id/status" \ - Network accessline 388
[Credential-related source omitted] - Access to secretsline 388
[Credential-related source omitted] - Access to secretsline 389
[Credential-related source omitted] - Network accessline 424
[Credential-related source omitted] - Access to secretsline 424
[Credential-related source omitted] - Access to secretsline 425
[Credential-related source omitted] - Network accessline 448
if curl -s -o "$_output_path" "$_url"; then
plugins/fal-ai-image/skills/fal-ai-image/scripts/edit.sh
- Executable scriptline 1
#!/bin/sh
plugins/fal-ai-image/skills/fal-ai-image/scripts/generate.sh
- Executable scriptline 1
#!/bin/sh
plugins/fal-ai-image/skills/fal-ai-image/scripts/tests/run.sh
- Executable scriptline 1
#!/bin/sh
plugins/fal-ai-image/skills/fal-ai-image/scripts/tests/test_config_selector.sh
plugins/fal-ai-image/skills/fal-ai-image/scripts/tests/test_edit_openai_mask.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 11
rm -rf "$TMP_DIR" - Access to secretsline 16
[Credential-related source omitted] - Network accessline 23
cat > "$TMP_DIR/bin/curl" <<'EOF' - Network accessline 41
NEXT_IS_DATA="true" ;; http://*|https://*) - Network accessline 42
;; http://*|https://*) URL="$arg" - Network accessline 43
http://*|https://*) - Network accessline 55
;; */requests/req-test) printf '{"images":[{"url":"https://example.com/result.png","content_type":"image/png","file_name":"result.png"}]}' - Network accessline 56
*/requests/req-test) printf '{"images":[{"url":"https://example.com/result.png","content_type":"image/png","file_name":"result.png"}]}' ;; - Network accessline 57
printf '{"images":[{"url":"https://example.com/result.png","content_type":"image/png","file_name":"result.png"}]}' - Access to secretsline 67
[Credential-related source omitted] - Network accessline 74
sh "$SCRIPTS_DIR/edit.sh" --model gpt --prompt "targeted edit" --image-urls "https://example.com/source.png" - Network accessline 75
--model gpt \ --prompt "targeted edit" \ --image-urls "https://example.com/source.png" \ - Network accessline 76
--prompt "targeted edit" \ --image-urls "https://example.com/source.png" \ --mask-url "https://example.com/mask.png" \ - Network accessline 77
--image-urls "https://example.com/source.png" \ - Network accessline 78
--mask-url "https://example.com/mask.png" \ - Network accessline 82
grep '"mask_url":"https://example.com/mask.png"' "$FAL_TEST_LOG_DIR/payload.json" >/dev/null grep 'https://queue.fal.run/openai/gpt-image-2/edit' "$FAL_TEST_LOG_DIR/url.txt" >/dev/null grep 'https://queue.fal.run/openai/gpt-image-2/requests - Network accessline 83
grep 'https://queue.fal.run/openai/gpt-image-2/edit' "$FAL_TEST_LOG_DIR/url.txt" >/dev/null - Network accessline 84
grep 'https://queue.fal.run/openai/gpt-image-2/requests/req-test/status' "$FAL_TEST_LOG_DIR/url.txt" >/dev/null
plugins/fal-ai-image/skills/fal-ai-image/scripts/tests/test_openai_image_size.sh
plugins/fal-ai-image/skills/fal-ai-image/scripts/upload.sh
plugins/genome-analizer/skills/genome-analizer/SKILL.md
plugins/github-pages-publisher/skills/github-pages-publisher/.gitignore
- Access to secretsline 1
[Credential-related source omitted]
plugins/github-pages-publisher/skills/github-pages-publisher/config/.env.example
plugins/github-pages-publisher/skills/github-pages-publisher/config/README.md
- Network accessline 6
- `GHPAGES_REPO` — `owner/repo` - `GHPAGES_BRANCH` — target branch (usually `main` or `gh-pages`) - `GHPAGES_PAGES_BASE_URL` — public Pages base URL, for example `https://example.github.io/repo` - Network accessline 8
- `GHPAGES_PAGES_BASE_URL` — public Pages base URL, for example `https://example.github.io/repo`
plugins/github-pages-publisher/skills/github-pages-publisher/scripts/optimize_images.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/github-pages-publisher/skills/github-pages-publisher/scripts/publish_static.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 69
[Credential-related source omitted] - Access to secretsline 70
[Credential-related source omitted] - Access to secretsline 71
[Credential-related source omitted] - Network accessline 83
[Credential-related source omitted] - Network accessline 84
[Credential-related source omitted] - Network accessline 85
[Credential-related source omitted]
plugins/knowledge-compiler/skills/knowledge-compiler/references/QUALITY_GATE.md
- Network accessline 28
Совпадение `seg-*` только в пути или параметрах URL не считается указателем источника. Например, обычная ссылка с подписью «Документация» на `https://example.com/seg-999/guide` не требует сегмента `seg-999` в карте.
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/build_skill_skeleton.sh
- Executable scriptline 1
#!/bin/sh
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/doctor.sh
- Executable scriptline 1
#!/bin/sh
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/extract_docling.py
- Executable scriptline 1
#!/usr/bin/env -S uv run --script
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/extract_pdfminer.py
- Executable scriptline 1
#!/usr/bin/env -S uv run --script
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/extract_pypdf.py
- Executable scriptline 1
#!/usr/bin/env -S uv run --script
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/extract_source.py
- Executable scriptline 1
#!/usr/bin/env -S uv run --script - Access to secretsline 123
[Credential-related source omitted] - Network accessline 183
opf_dir = posixpath.dirname(rootfile) opf = ElementTree.fromstring(zf.read(rootfile)) ns = {"opf": "http://www.idpf.org/2007/opf"} - Network accessline 184
opf = ElementTree.fromstring(zf.read(rootfile)) ns = {"opf": "http://www.idpf.org/2007/opf"} manifest: dict[str, str] = {} - Network accessline 185
ns = {"opf": "http://www.idpf.org/2007/opf"}
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/outline_scout.py
- Executable scriptline 1
#!/usr/bin/env -S uv run --script
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/prepare_source.sh
- Executable scriptline 1
#!/bin/sh
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/quality_gate.py
- Executable scriptline 1
#!/usr/bin/env -S uv run --script
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/segment_text.py
- Executable scriptline 1
#!/usr/bin/env -S uv run --script
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/tests/run.sh
- Executable scriptline 1
#!/bin/sh
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/tests/test_epub_metadata.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 8
trap 'rm -rf "$TMP_DIR"' EXIT - Network accessline 29
"OEBPS/content.opf", """<?xml version="1.0"?> <package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="bookid"> - Network accessline 30
"""<?xml version="1.0"?> <package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="bookid"> <metadata xmlns:dc="http://purl.org/dc/elements/1.1/"> - Network accessline 31
<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="bookid"> - Network accessline 32
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/"> - Network accessline 49
"OEBPS/toc.ncx", """<?xml version="1.0"?> <ncx xmlns="http://www.daisy.org/z3986/2005/ncx/"> - Network accessline 50
"""<?xml version="1.0"?> <ncx xmlns="http://www.daisy.org/z3986/2005/ncx/"> <navMap> - Network accessline 51
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/"> - Network accessline 65
zf.writestr( "OEBPS/ch1.xhtml", """<html xmlns="http://www.w3.org/1999/xhtml"><body><h1>1.\u00a0First chapter</h1><p>Main content.</p></body></html>""", - Network accessline 66
"OEBPS/ch1.xhtml", """<html xmlns="http://www.w3.org/1999/xhtml"><body><h1>1.\u00a0First chapter</h1><p>Main content.</p></body></html>""", ) - Network accessline 67
"""<html xmlns="http://www.w3.org/1999/xhtml"><body><h1>1.\u00a0First chapter</h1><p>Main content.</p></body></html>""", - Network accessline 69
zf.writestr( "OEBPS/appendix.xhtml", """<html xmlns="http://www.w3.org/1999/xhtml"><body><h1>Appendix</h1><p>Short appendix.</p></body></html>""", - Network accessline 70
"OEBPS/appendix.xhtml", """<html xmlns="http://www.w3.org/1999/xhtml"><body><h1>Appendix</h1><p>Short appendix.</p></body></html>""", ) - Network accessline 71
"""<html xmlns="http://www.w3.org/1999/xhtml"><body><h1>Appendix</h1><p>Short appendix.</p></body></html>""",
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/tests/test_non_pdf_no_pdf_deps.sh
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/tests/test_outline_scout.sh
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/tests/test_quality_gate.py
- Executable scriptline 1
#!/usr/bin/env -S uv run --script - Access to secretsline 99
[Credential-related source omitted] - Access to secretsline 439
[Credential-related source omitted] - Network accessline 1001
"concepts.md#seg-001", "missing.md#seg-001", "https://example.com/source-index.md#seg-001", - Network accessline 1002
"missing.md#seg-001", "https://example.com/source-index.md#seg-001", f"{self.index.as_posix()}#seg-001", - Network accessline 1003
"https://example.com/source-index.md#seg-001", - Network accessline 1069
def test_new_html_anchor_does_not_discard_previous_unclosed_link(self): for next_link in ( '<a href="https://example.com">guide</a>', - Network accessline 1070
for next_link in ( '<a href="https://example.com">guide</a>', '<a href="source-index.md#seg-001">seg-001</a>', - Network accessline 1071
'<a href="https://example.com">guide</a>', - Network accessline 1248
'<area href="source-index.md#seg-001" alt="seg-001">', '<area href="source-index.md#seg-001" alt="Источник">', '<area href="https://example.com/help" alt="Справка">', - Network accessline 1249
'<area href="source-index.md#seg-001" alt="Источник">', '<area href="https://example.com/help" alt="Справка">', '<area alt="seg-001">', - Network accessline 1250
'<area href="https://example.com/help" alt="Справка">', - Network accessline 1336
def test_segment_names_in_url_paths_and_queries_are_not_references(self): for example in ( "[docs](https://example.com/seg-999/guide)", - Network accessline 1337
for example in ( "[docs](https://example.com/seg-999/guide)", "", - Network accessline 1338
"[docs](https://example.com/seg-999/guide)", - Network accessline 1339
"", "[docs](https://example.com/guide?section=seg-999)", "[docs][guide]\n\n[guide]: https://example.com/seg-999/guide", - Network accessline 1340
"[docs](https://example.com/guide?section=seg-999)", - Network accessline 1341
"[docs][guide]\n\n[guide]: https://example.com/seg-999/guide",
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/tests/test_quality_gate.sh
- Executable scriptline 1
#!/bin/sh
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/tests/test_segment_decision.sh
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/tests/test_toc_segmentation.sh
plugins/knowledge-compiler/skills/knowledge-compiler/scripts/tests/test_uv_override_helpers.sh
plugins/perplexity-search/skills/perplexity-search/.gitignore
- Access to secretsline 1
[Credential-related source omitted]
plugins/perplexity-search/skills/perplexity-search/SKILL.md
- Network accessline 15
Работа с [Perplexity API](https://docs.perplexity.ai) на POSIX-shell. Четыре режима: - Access to secretsline 34
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Network accessline 40
Ключ — на [perplexity.ai/account/api](https://www.perplexity.ai/account/api). - Network accessline 133
sh scripts/fetch_url.sh --url "https://example.com/pricing" - Network accessline 134
sh scripts/fetch_url.sh --url "https://a.com/post" --url "https://b.com/post" \
plugins/perplexity-search/skills/perplexity-search/config/.env.example
- Access to secretsline 2
[Credential-related source omitted] - Network accessline 5
# ─── API credentials ───────────────────────────────────────── # Create a key at https://www.perplexity.ai/account/api (Settings → API). - Network accessline 6
# Create a key at https://www.perplexity.ai/account/api (Settings → API). - Access to secretsline 8
[Credential-related source omitted] - Network accessline 49
# Default number of stdout lines before the rest is left in cache files. PPLX_PRINT_LIMIT=30 # curl --max-time per request, seconds. Raise for xhigh presets. - Network accessline 50
PPLX_PRINT_LIMIT=30 # curl --max-time per request, seconds. Raise for xhigh presets. PPLX_HTTP_TIMEOUT=300 - Network accessline 51
# curl --max-time per request, seconds. Raise for xhigh presets.
plugins/perplexity-search/skills/perplexity-search/config/README.md
- Network accessline 5
1. Открыть [perplexity.ai/account/api](https://www.perplexity.ai/account/api) - Access to secretsline 9
[Credential-related source omitted] - Access to secretsline 12
[Credential-related source omitted] - Access to secretsline 15
[Credential-related source omitted] - Access to secretsline 34
[Credential-related source omitted] - Network accessline 47
| `PPLX_RESEARCH_CACHE_TTL` | `86400` | то же для `research.sh` | | `PPLX_PRINT_LIMIT` | `30` | строк в stdout, остальное остаётся в `cache/` | | `PPLX_HTTP_TIMEOUT` | `300` | `curl --max-time`, секунды | - Network accessline 48
| `PPLX_PRINT_LIMIT` | `30` | строк в stdout, остальное остаётся в `cache/` | | `PPLX_HTTP_TIMEOUT` | `300` | `curl --max-time`, секунды | | `PPLX_MAX_RETRIES` | `3` | попыток на 429/5xx | - Network accessline 49
| `PPLX_HTTP_TIMEOUT` | `300` | `curl --max-time`, секунды | - Access to secretsline 105
[Credential-related source omitted] - Network accessline 115
Актуальное: [docs.perplexity.ai/docs/getting-started/pricing](https://docs.perplexity.ai/docs/getting-started/pricing)
plugins/perplexity-search/skills/perplexity-search/references/API_REFERENCE.md
- Network accessline 8
| Endpoint | Метод | Используется в | |---|---|---| | `https://api.perplexity.ai/search` | POST | `search.sh` | - Network accessline 9
|---|---|---| | `https://api.perplexity.ai/search` | POST | `search.sh` | | `https://api.perplexity.ai/v1/agent` | POST | `ask.sh`, `research.sh`, `fetch_url.sh` | - Network accessline 10
| `https://api.perplexity.ai/search` | POST | `search.sh` | - Network accessline 11
| `https://api.perplexity.ai/v1/agent` | POST | `ask.sh`, `research.sh`, `fetch_url.sh` | - Network accessline 12
| `https://api.perplexity.ai/v1/agent/{id}` | GET | `research.sh` (polling) | - Network accessline 13
| `https://api.perplexity.ai/v1/agent/{id}/cancel` | POST | не используется | - Network accessline 15
[Credential-related source omitted] - Access to secretsline 15
[Credential-related source omitted] - Network accessline 16
ключ в curl через `--config -` (stdin), чтобы он не появлялся в `ps` и не - Network accessline 59
"server_time": null, "results": [ {"title": "…", "url": "https://…", "snippet": "…", "date": "2026-05-01", "last_updated": "2026-06-02"} - Network accessline 60
"results": [ {"title": "…", "url": "https://…", "snippet": "…", "date": "2026-05-01", "last_updated": "2026-06-02"} ] - Network accessline 61
{"title": "…", "url": "https://…", "snippet": "…", "date": "2026-05-01", "last_updated": "2026-06-02"} - Network accessline 247
sh scripts/fetch_url.sh \ --url "https://a.example/post" \ - Network accessline 248
--url "https://a.example/post" \ - Network accessline 249
--url "https://b.example/post" \
plugins/perplexity-search/skills/perplexity-search/scripts/ask.sh
plugins/perplexity-search/skills/perplexity-search/scripts/cache_grep.sh
- Executable scriptline 1
#!/bin/sh
plugins/perplexity-search/skills/perplexity-search/scripts/common.sh
- Executable scriptline 1
#!/bin/sh - Network accessline 42
PPLX_API_BASE="${PPLX_API_BASE:-https://api.perplexity.ai}" - Network accessline 86
require_curl() { command -v curl >/dev/null 2>&1 || die "curl is required but not found" - Network accessline 87
command -v curl >/dev/null 2>&1 || die "curl is required but not found" - Access to secretsline 92
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted] - Access to secretsline 114
[Credential-related source omitted] - Dangerous shell operationline 196
rm -f "$_lc_exports" - Dangerous shell operationline 201
rm -f "$_lc_exports" - Network accessline 204
[Credential-related source omitted] - Access to secretsline 204
[Credential-related source omitted] - Access to secretsline 205
[Credential-related source omitted] - Network accessline 206
[Credential-related source omitted] - Access to secretsline 206
[Credential-related source omitted] - Network accessline 208
# The key is streamed to curl inside a quoted header value; reject anything - Access to secretsline 210
[Credential-related source omitted] - Access to secretsline 212
[Credential-related source omitted] - Access to secretsline 213
[Credential-related source omitted] - Access to secretsline 260
[Credential-related source omitted] - Access to secretsline 263
[Credential-related source omitted] - Access to secretsline 272
[Credential-related source omitted] - Dangerous shell operationline 337
rm -rf "$_la_dir" - Dangerous shell operationline 351
[ -z "$1" ] || rm -rf "$1" - Access to secretsline 360
[Credential-related source omitted] - Access to secretsline 361
[Credential-related source omitted] - Access to secretsline 362
[Credential-related source omitted] - Access to secretsline 363
[Credential-related source omitted] - Access to secretsline 365
[Credential-related source omitted] - Network accessline 370
# --- HTTP ------------------------------------------------------------ # # The API key is streamed to curl through `--config -`, so it never appears in - Network accessline 371
# # The API key is streamed to curl through `--config -`, so it never appears in # argv (visible via ps) and is never written to disk. - Network accessline 372
# The API key is streamed to curl through `--config -`, so it never appears in - Network accessline 388
# run that we cannot even adopt, because its id never reached us. So a POST is # only retried when the request provably never landed: # curl 6 — host not resolved - Network accessline 389
# only retried when the request provably never landed: # curl 6 — host not resolved # curl 7 — connection refused / could not connect - Network accessline 390
# curl 6 — host not resolved - Network accessline 391
# curl 7 — connection refused / could not connect - Dangerous shell operationline 404
rm -f "$_rq_tmp" "$_rq_hdr" - Network accessline 422
[Credential-related source omitted] - Network accessline 423
[Credential-related source omitted] - Access to secretsline 423
[Credential-related source omitted] - Network accessline 424
| curl -sS --config - \ - Network accessline 427
--max-time "$PPLX_HTTP_TIMEOUT" \ -X POST --data-binary "@$_rq_body" \ "${PPLX_API_BASE}${_rq_path}") - Network accessline 428
-X POST --data-binary "@$_rq_body" \ "${PPLX_API_BASE}${_rq_path}") then - Network accessline 429
"${PPLX_API_BASE}${_rq_path}") - Network accessline 436
[Credential-related source omitted] - Network accessline 437
[Credential-related source omitted] - Access to secretsline 437
[Credential-related source omitted] - Network accessline 438
| curl -sS --config - \ - Network accessline 439
-o "$_rq_tmp" -D "$_rq_hdr" -w '%{http_code}' \ --max-time "$PPLX_HTTP_TIMEOUT" \ "${PPLX_API_BASE}${_rq_path}") - Network accessline 440
--max-time "$PPLX_HTTP_TIMEOUT" \ "${PPLX_API_BASE}${_rq_path}") then - Network accessline 441
"${PPLX_API_BASE}${_rq_path}") - Dangerous shell operationline 453
rm -f "$_rq_hdr" - Access to secretsline 457
[Credential-related source omitted] - Access to secretsline 458
[Credential-related source omitted] - Network accessline 483
fi if [ "$_rq_method" = "POST" ] && ! _rq_retry_safe "$_rq_method" "$_rq_status" "$_rq_curl"; then _rq_fail "POST $_rq_path failed after the request was already on the wire (HTTP $_rq_status, curl exit $_ - Network accessline 484
if [ "$_rq_method" = "POST" ] && ! _rq_retry_safe "$_rq_method" "$_rq_status" "$_rq_curl"; then _rq_fail "POST $_rq_path failed after the request was already on the wire (HTTP $_rq_status, curl exit $_rq_curl)" \ - Network accessline 485
_rq_fail "POST $_rq_path failed after the request was already on the wire (HTTP $_rq_status, curl exit $_rq_curl)" \ - Network accessline 516
[Credential-related source omitted] - Network accessline 517
[Credential-related source omitted] - Access to secretsline 517
[Credential-related source omitted] - Network accessline 518
| curl -sS --config - \ - Network accessline 519
-o "$_pg_tmp" -w '%{http_code}' \ --max-time "$PPLX_HTTP_TIMEOUT" \ "${PPLX_API_BASE}$1" 2>/dev/null) || _pg_status="000" - Network accessline 521
"${PPLX_API_BASE}$1" 2>/dev/null) || _pg_status="000" - Dangerous shell operationline 525
*) rm -f "$_pg_tmp" ;; - Dangerous shell operationline 527
rm -f "$_pg_tmp" - Access to secretsline 548
[Credential-related source omitted] - Access to secretsline 566
[Credential-related source omitted] - Access to secretsline 710
[Credential-related source omitted] - Access to secretsline 754
[Credential-related source omitted] - Access to secretsline 882
[Credential-related source omitted] - Access to secretsline 892
[Credential-related source omitted] - Access to secretsline 971
[Credential-related source omitted] - Access to secretsline 1008
[Credential-related source omitted] - Access to secretsline 1036
[Credential-related source omitted] - Access to secretsline 1049
[Credential-related source omitted] - Access to secretsline 1059
[Credential-related source omitted] - Access to secretsline 1073
[Credential-related source omitted]
plugins/perplexity-search/skills/perplexity-search/scripts/fetch_url.sh
- Executable scriptline 1
#!/bin/sh - Network accessline 2
# fetch_url.sh — pull the contents of specific URLs through the Agent API's # fetch_url tool. Useful when search.sh gave you the link and you now need the # page itself, or when a page resists plain curl (JS, soft paywalls, redirects). - Network accessline 3
# fetch_url tool. Useful when search.sh gave you the link and you now need the # page itself, or when a page resists plain curl (JS, soft paywalls, redirects). # - Network accessline 4
# page itself, or when a page resists plain curl (JS, soft paywalls, redirects). - Network accessline 14
usage() { cat <<'EOF' Usage: sh scripts/fetch_url.sh --url "https://..." [--url ...] [options] - Network accessline 16
Usage: sh scripts/fetch_url.sh --url "https://..." [--url ...] [options] - Network accessline 39
add_url() { case "$1" in http://*|https://*) : ;; - Network accessline 40
case "$1" in http://*|https://*) : ;; *) die "Not an http(s) URL: $1" ;; - Network accessline 41
http://*|https://*) : ;; - Dangerous shell operationline 92
trap 'rm -f "$BODY_FILE"' EXIT - Network accessline 112
echo "=== Perplexity Fetch ($SOURCE): $FIRST_URL ==="
plugins/perplexity-search/skills/perplexity-search/scripts/find_latest.sh
- Executable scriptline 1
#!/bin/sh - Access to secretsline 53
[Credential-related source omitted] - Access to secretsline 54
[Credential-related source omitted] - Access to secretsline 55
[Credential-related source omitted] - Access to secretsline 56
[Credential-related source omitted] - Access to secretsline 59
[Credential-related source omitted]
plugins/perplexity-search/skills/perplexity-search/scripts/prepare_runtime.sh
plugins/perplexity-search/skills/perplexity-search/scripts/research.sh
- Executable scriptline 1
#!/bin/sh - Access to secretsline 35
[Credential-related source omitted] - Access to secretsline 106
[Credential-related source omitted] - Access to secretsline 110
[Credential-related source omitted] - Dangerous shell operationline 187
trap 'rm -f "$BODY_FILE"; lock_release "$LOCK_DIR"' EXIT - Dangerous shell operationline 268
rm -f "$PROBE_FILE" - Dangerous shell operationline 273
rm -f "$PROBE_FILE" - Access to secretsline 326
[Credential-related source omitted]
plugins/perplexity-search/skills/perplexity-search/scripts/sanitize_env.sh
plugins/perplexity-search/skills/perplexity-search/scripts/search.sh
plugins/perplexity-search/skills/perplexity-search/scripts/tests/fixtures/agent_response.json
- Network accessline 13
"id": 1, "title": "Attention primer", "url": "https://example.com/a", - Network accessline 14
"title": "Attention primer", "url": "https://example.com/a", "snippet": "A short snippet about attention.", - Network accessline 15
"url": "https://example.com/a", - Network accessline 21
"id": 2, "title": "Attention primer (mirror)", "url": "https://example.com/a", - Network accessline 22
"title": "Attention primer (mirror)", "url": "https://example.com/a", "snippet": "Duplicate of the first source.", - Network accessline 23
"url": "https://example.com/a", - Network accessline 29
"id": 3, "title": "Sequence models", "url": "https://example.com/b", - Network accessline 30
"title": "Sequence models", "url": "https://example.com/b", "snippet": "Another snippet.", - Network accessline 31
"url": "https://example.com/b",
plugins/perplexity-search/skills/perplexity-search/scripts/tests/fixtures/search_response.json
- Network accessline 5
{ "title": "First result title", "url": "https://example.org/articles/one", - Network accessline 6
"title": "First result title", "url": "https://example.org/articles/one", "snippet": "This is the full snippet body for the first result. It is long enough that it clearly belongs in the .txt dump rather than in the ranked table - Network accessline 7
"url": "https://example.org/articles/one", - Network accessline 12
{ "title": "Messy\ttitle with tabs\nand a newline", "url": "https://news.example.com/b?utm_source=x", - Network accessline 13
"title": "Messy\ttitle with tabs\nand a newline", "url": "https://news.example.com/b?utm_source=x", "snippet": "Second snippet.", - Network accessline 14
"url": "https://news.example.com/b?utm_source=x", - Network accessline 19
{ "title": "Third result", "url": "https://docs.example.net/guide", - Network accessline 20
"title": "Third result", "url": "https://docs.example.net/guide", "snippet": "", - Network accessline 21
"url": "https://docs.example.net/guide",
plugins/perplexity-search/skills/perplexity-search/scripts/tests/run.sh
- Executable scriptline 1
#!/bin/sh
plugins/perplexity-search/skills/perplexity-search/scripts/tests/test_build_agent_body.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 13
trap 'rm -rf "$TMP_DIR"' EXIT - Access to secretsline 19
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 31
[Credential-related source omitted] - Access to secretsline 33
[Credential-related source omitted] - Access to secretsline 146
[Credential-related source omitted]
plugins/perplexity-search/skills/perplexity-search/scripts/tests/test_build_search_body.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 13
trap 'rm -rf "$TMP_DIR"' EXIT - Access to secretsline 19
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 31
[Credential-related source omitted] - Access to secretsline 34
[Credential-related source omitted]
plugins/perplexity-search/skills/perplexity-search/scripts/tests/test_cache.sh
plugins/perplexity-search/skills/perplexity-search/scripts/tests/test_cli.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 12
trap 'rm -rf "$TMP_DIR"' EXIT - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Access to secretsline 35
[Credential-related source omitted] - Dangerous shell operationline 66
expect_fail "bad resume id" sh "$SCRIPTS/research.sh" --resume 'abc;rm -rf /'
plugins/perplexity-search/skills/perplexity-search/scripts/tests/test_config_loader.sh
- Executable scriptline 1
#!/bin/sh - Access to secretsline 2
[Credential-related source omitted] - Dangerous shell operationline 13
trap 'rm -rf "$TMP_DIR"' EXIT - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted] - Access to secretsline 24
[Credential-related source omitted] - Access to secretsline 40
[Credential-related source omitted] - Access to secretsline 54
[Credential-related source omitted] - Access to secretsline 88
[Credential-related source omitted] - Access to secretsline 100
[Credential-related source omitted] - Access to secretsline 115
[Credential-related source omitted] - Access to secretsline 140
[Credential-related source omitted] - Access to secretsline 179
[Credential-related source omitted] - Access to secretsline 236
[Credential-related source omitted] - Access to secretsline 244
[Credential-related source omitted]
plugins/perplexity-search/skills/perplexity-search/scripts/tests/test_dates.sh
plugins/perplexity-search/skills/perplexity-search/scripts/tests/test_http.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 19
rm -rf "$TMP_DIR" - Network accessline 116
[Credential-related source omitted] - Network accessline 117
[Credential-related source omitted] - Access to secretsline 117
[Credential-related source omitted] - Network accessline 118
PPLX_API_BASE="http://127.0.0.1:$(cat "$PORT_FILE")" - Access to secretsline 119
[Credential-related source omitted] - Access to secretsline 131
[Credential-related source omitted]
plugins/perplexity-search/skills/perplexity-search/scripts/tests/test_render.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 14
trap 'rm -rf "$TMP_DIR"' EXIT - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Network accessline 50
grep -q 'The answer text, with a citation' "$TMP_DIR/answer.md" || { echo "answer text missing"; exit 1; } grep -q '^## Sources$' "$TMP_DIR/answer.md" || { echo "sources section missing"; exit 1; } grep -q 'https://example.com/a' "$TMP_DIR/ - Network accessline 51
grep -q '^## Sources$' "$TMP_DIR/answer.md" || { echo "sources section missing"; exit 1; } grep -q 'https://example.com/a' "$TMP_DIR/answer.md" || { echo "first source missing"; exit 1; } grep -qi 'cost: \$0\.00' "$TMP_DIR/answer.md" || { e - Network accessline 52
grep -q 'https://example.com/a' "$TMP_DIR/answer.md" || { echo "first source missing"; exit 1; }
plugins/perplexity-search/skills/perplexity-search/scripts/tests/test_research.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 17
rm -rf "$TMP_DIR" - Network accessline 88
"output": [ {"type": "search_results", "queries": ["q"], "results": [ {"id": 1, "title": "Src", "url": "https://example.com/x", - Network accessline 89
{"type": "search_results", "queries": ["q"], "results": [ {"id": 1, "title": "Src", "url": "https://example.com/x", "snippet": "s", "date": "2026-01-01", "source": "web"} - Network accessline 90
{"id": 1, "title": "Src", "url": "https://example.com/x", - Network accessline 131
[Credential-related source omitted] - Network accessline 132
[Credential-related source omitted] - Access to secretsline 132
[Credential-related source omitted] - Network accessline 133
PPLX_API_BASE="http://127.0.0.1:$(cat "$PORT_FILE")" - Access to secretsline 134
[Credential-related source omitted]
plugins/perplexity-search/skills/perplexity-search/scripts/tests/test_signals.sh
plugins/reddit-skill/skills/reddit-skill/.gitignore
- Access to secretsline 1
[Credential-related source omitted]
plugins/reddit-skill/skills/reddit-skill/SKILL.md
- Network accessline 15
а также прямой доступ к Reddit API через OAuth2 без PRAW. Порт MCP-сервера [Arindam200/reddit-mcp](https://github.com/Arindam200/reddit-mcp) на shell-скрипты - Network accessline 16
через OAuth2 без PRAW. Порт MCP-сервера [Arindam200/reddit-mcp](https://github.com/Arindam200/reddit-mcp) на shell-скрипты по образцу yandex-metrika / yandex-search-api. - Network accessline 17
[Arindam200/reddit-mcp](https://github.com/Arindam200/reddit-mcp) на shell-скрипты - Network accessline 33
- **Пост и комментарии:** используй адрес с `.json`; для обычной ссылки добавь `.json` к пути поста перед параметрами запроса, например `https://www.reddit.com/r/Python/comments/abc123/title/.json?limit=100&raw_json=1`. - Network accessline 34
`.json` к пути поста перед параметрами запроса, например `https://www.reddit.com/r/Python/comments/abc123/title/.json?limit=100&raw_json=1`. - **Список постов:** если инструмент поддерживает XML/Atom, открой RSS-ленту, - Network accessline 35
например `https://www.reddit.com/r/Python/comments/abc123/title/.json?limit=100&raw_json=1`. - Network accessline 37
например `https://www.reddit.com/r/Python/top.rss?t=day&limit=25`. - Network accessline 68
Для полного доступа через API зарегистрировать **script-app** на https://www.reddit.com/prefs/apps и заполнить `config/.env`: - Network accessline 69
https://www.reddit.com/prefs/apps и заполнить `config/.env`: - Access to secretsline 70
[Credential-related source omitted] - Network accessline 111
RSS поддерживают `subreddit_top.sh`, `search.sh`, `user_posts.sh` и `auth_check.sh`. Параметры поиска, сортировки, периода и количества передаются в публичную ленту. `submission.sh` в этом же режиме читает `https://www.reddit.com/comments/{ - Network accessline 112
Параметры поиска, сортировки, периода и количества передаются в публичную ленту. `submission.sh` в этом же режиме читает `https://www.reddit.com/comments/{id}.json` без токена. Можно передать обычную ссылку поста, ссылку с `.json` или ID. - Network accessline 113
`submission.sh` в этом же режиме читает `https://www.reddit.com/comments/{id}.json` - Network accessline 207
# 4) Пост и комментарии через публичный JSON без ключей REDDIT_RSS_MODE=1 sh scripts/submission.sh \ --url "https://www.reddit.com/r/Python/comments/abc123/some_title/" \ - Network accessline 208
REDDIT_RSS_MODE=1 sh scripts/submission.sh --url "https://www.reddit.com/r/Python/comments/abc123/some_title/" - Network accessline 209
--url "https://www.reddit.com/r/Python/comments/abc123/some_title/" \ - Network accessline 244
Оригинальный [reddit-mcp](https://github.com/Arindam200/reddit-mcp) использует PRAW + Python и зашит как MCP-сервер. Здесь публичное чтение начинается с доступного веб-инструмента агента; shell-скрипты используют curl и кеш в директории ски - Network accessline 248
- [Reddit API docs](https://www.reddit.com/dev/api/) - Network accessline 249
- [RSS Reddit](https://www.reddit.com/wiki/rss) - Network accessline 250
- [OAuth2 wiki](https://github.com/reddit-archive/reddit/wiki/OAuth2) - Network accessline 251
- [API rules / User-Agent](https://github.com/reddit-archive/reddit/wiki/API)
plugins/reddit-skill/skills/reddit-skill/config/.env.example
plugins/reddit-skill/skills/reddit-skill/config/README.md
- Access to secretsline 20
[Credential-related source omitted] - Network accessline 29
REDDIT_RSS_MODE=1 sh scripts/search.sh --query "machine learning" --subreddit Python REDDIT_RSS_MODE=1 sh scripts/user_posts.sh --username spez REDDIT_RSS_MODE=1 sh scripts/submission.sh --url "https://www.reddit.com/r/Python/comments/abc12 - Network accessline 31
REDDIT_RSS_MODE=1 sh scripts/submission.sh --url "https://www.reddit.com/r/Python/comments/abc123/title/.json" - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 74
[Credential-related source omitted] - Network accessline 76
1. Открой https://old.reddit.com/prefs/apps - Access to secretsline 79
[Credential-related source omitted] - Access to secretsline 84
[Credential-related source omitted] - Network accessline 90
1. Открой https://old.reddit.com/prefs/apps (старый интерфейс стабильнее нового) - Network accessline 95
- **Description**: пусто или короткое нейтральное описание (см. подсказки ниже про формулировки) - **About URL**: можно пусто - **Redirect URI**: `http://localhost:8080` (формально требуется; для read-only не используется) - Network accessline 96
- **About URL**: можно пусто - **Redirect URI**: `http://localhost:8080` (формально требуется; для read-only не используется) 4. Пройди капчу и **сразу же** жми **`create app`** (токен капчи живёт ~2 минуты) - Network accessline 97
- **Redirect URI**: `http://localhost:8080` (формально требуется; для read-only не используется) - Network accessline 108
1. Открой форму **Request API Access**: https://support.reddithelp.com/hc/en-us/requests/new - Network accessline 162
**Если use case действительно коммерческий** (канал/консалтинг монетизируется) — Reddit ожидает, что ты заявишь это явно через отдельный канал: https://support.reddithelp.com/hc/en-us/requests/new (выбрать commercial-вариант). Для personal - Network accessline 170
1. **Hard reload** (`⌘+Shift+R` / `Ctrl+Shift+R`) — заполни заново и пройди капчу ровно перед кликом 2. **Инкогнито-режим** — расширения (uBlock Origin, Privacy Badger, AdGuard) ломают Reddit anti-bot. В инкогнито их нет. 3. **Старый Reddit - Network accessline 171
2. **Инкогнито-режим** — расширения (uBlock Origin, Privacy Badger, AdGuard) ломают Reddit anti-bot. В инкогнито их нет. 3. **Старый Reddit** явно — `https://old.reddit.com/prefs/apps` 4. **Без VPN** — Reddit банит часть VPN-IP с определённ - Network accessline 172
3. **Старый Reddit** явно — `https://old.reddit.com/prefs/apps` - Access to secretsline 191
[Credential-related source omitted] - Access to secretsline 198
[Credential-related source omitted] - Network accessline 202
`REDDIT_USER_AGENT` обязателен по [правилам Reddit API](https://github.com/reddit-archive/reddit/wiki/API). Шаблон: `<platform>:<app-id>:<version> (by /u/<username>)`. Не используйте дефолтные строки браузеров — Reddit может банить. - Network accessline 247
Подробнее: https://www.reddit.com/wiki/api - Access to secretsline 260
[Credential-related source omitted] - Network accessline 280
### `/prefs/apps` редиректит на Responsible Builder Policy - Это новый approval-flow, а не баг формы. Технически не обходится. - Подавай заявку через https://support.reddithelp.com/hc/en-us/requests/new → «Request API Access». Шаблон описан - Network accessline 281
- Это новый approval-flow, а не баг формы. Технически не обходится. - Подавай заявку через https://support.reddithelp.com/hc/en-us/requests/new → «Request API Access». Шаблон описания — в Шаге 1 → Вариант C. - Если у тебя уже есть рабочий с - Network accessline 282
- Подавай заявку через https://support.reddithelp.com/hc/en-us/requests/new → «Request API Access». Шаблон описания — в Шаге 1 → Вариант C. - Network accessline 294
- Reddit API docs: https://www.reddit.com/dev/api/ - Network accessline 295
- OAuth2 wiki: https://github.com/reddit-archive/reddit/wiki/OAuth2 - Network accessline 296
- API rules / User-Agent: https://github.com/reddit-archive/reddit/wiki/API - Network accessline 297
- Reddit Data API Terms: https://www.redditinc.com/policies/data-api-terms - Network accessline 298
- Developer Terms: https://www.redditinc.com/policies/developer-terms - Responsible Builder Policy (что Reddit хочет видеть в use case): https://support.reddithelp.com/hc/en-us/articles/42728983564564-Responsible-Builder-Policy - Запрос API - Network accessline 299
- Responsible Builder Policy (что Reddit хочет видеть в use case): https://support.reddithelp.com/hc/en-us/articles/42728983564564-Responsible-Builder-Policy - Запрос API Access (non-commercial): https://support.reddithelp.com/hc/en-us/requ - Network accessline 300
- Запрос API Access (non-commercial): https://support.reddithelp.com/hc/en-us/requests/new — выбрать «Request API Access» - Network accessline 301
- Запрос commercial Data API: https://support.reddithelp.com/hc/en-us/requests/new — отдельный commercial-вариант
plugins/reddit-skill/skills/reddit-skill/scripts/auth_check.sh
plugins/reddit-skill/skills/reddit-skill/scripts/comment_reply.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 44
trap 'rm -f "$OUT"' EXIT - Access to secretsline 53
[Credential-related source omitted] - Network accessline 68
print(f" id : {t.get('id','?')}") print(f" name : {t.get('name','?')}") print(f" permalink : https://www.reddit.com{t.get('permalink','')}") - Network accessline 69
print(f" name : {t.get('name','?')}") print(f" permalink : https://www.reddit.com{t.get('permalink','')}") PY - Network accessline 70
print(f" permalink : https://www.reddit.com{t.get('permalink','')}")
plugins/reddit-skill/skills/reddit-skill/scripts/common.sh
- Executable scriptline 1
#!/bin/sh - Network accessline 17
# Variables exported by load_config: # REDDIT_AUTH_MODE — "app-only" | "user" | "rss" # REDDIT_OAUTH_BASE — "https://oauth.reddit.com" - Network accessline 18
# REDDIT_AUTH_MODE — "app-only" | "user" | "rss" # REDDIT_OAUTH_BASE — "https://oauth.reddit.com" # REDDIT_TOKEN_URL — "https://www.reddit.com/api/v1/access_token" - Network accessline 19
# REDDIT_OAUTH_BASE — "https://oauth.reddit.com" - Network accessline 20
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted] - Network accessline 37
REDDIT_OAUTH_BASE="https://oauth.reddit.com" - Network accessline 38
[Credential-related source omitted] - Access to secretsline 38
[Credential-related source omitted] - Access to secretsline 57
[Credential-related source omitted] - Access to secretsline 59
[Credential-related source omitted] - Access to secretsline 61
[Credential-related source omitted] - Access to secretsline 70
[Credential-related source omitted] - Access to secretsline 79
[Credential-related source omitted] - Access to secretsline 80
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted] - Access to secretsline 111
[Credential-related source omitted] - Access to secretsline 115
[Credential-related source omitted] - Access to secretsline 134
[Credential-related source omitted] - Access to secretsline 135
[Credential-related source omitted] - Access to secretsline 136
[Credential-related source omitted] - Access to secretsline 137
[Credential-related source omitted] - Access to secretsline 139
[Credential-related source omitted] - Dangerous shell operationline 152
trap "rm -f '$_resp_file' '$_hdr_file'" EXIT INT TERM - Access to secretsline 163
[Credential-related source omitted] - Access to secretsline 164
[Credential-related source omitted] - Network accessline 171
[Credential-related source omitted] - Access to secretsline 171
[Credential-related source omitted] - Access to secretsline 173
[Credential-related source omitted] - Dangerous shell operationline 179
rm -f "$_resp_file" "$_hdr_file" - Access to secretsline 190
[Credential-related source omitted] - Access to secretsline 194
[Credential-related source omitted] - Access to secretsline 199
[Credential-related source omitted] - Access to secretsline 206
[Credential-related source omitted] - Dangerous shell operationline 209
rm -f "$_resp_file" "$_hdr_file" - Network accessline 241
# --- HTTP wrappers --------------------------------------------------- # # reddit_get PATH OUTFILE [extra curl args ...] - Network accessline 242
# # reddit_get PATH OUTFILE [extra curl args ...] # reddit_post PATH OUTFILE [extra curl args ...] - Network accessline 243
# reddit_get PATH OUTFILE [extra curl args ...] - Network accessline 244
# reddit_post PATH OUTFILE [extra curl args ...] - Network accessline 272
_hdr="$REDDIT_TMPDIR/reddit_hdr.$$.txt" _url="${REDDIT_OAUTH_BASE}${_path}" - Network accessline 273
_url="${REDDIT_OAUTH_BASE}${_path}" - Network accessline 276
case "$_url" in - Network accessline 277
*\?*) _url="${_url}&raw_json=1" ;; - Network accessline 278
*) _url="${_url}?raw_json=1" ;; - Network accessline 281
if [ "$_method" = "GET" ]; then _status=$(curl -sS --connect-timeout 10 --max-time 60 -G -o "$_out" -D "$_hdr" -w '%{http_code}' \ - Network accessline 282
_status=$(curl -sS --connect-timeout 10 --max-time 60 -G -o "$_out" -D "$_hdr" -w '%{http_code}' \ - Network accessline 284
[Credential-related source omitted] - Network accessline 285
"$@" \ "$_url") || die "Request failed (network error): $_path" else - Network accessline 286
"$_url") || die "Request failed (network error): $_path" else _status=$(curl -sS --connect-timeout 10 --max-time 60 -X "$_method" -o "$_out" -D "$_hdr" -w '%{http_code}' \ - Network accessline 287
else _status=$(curl -sS --connect-timeout 10 --max-time 60 -X "$_method" -o "$_out" -D "$_hdr" -w '%{http_code}' \ -A "$REDDIT_USER_AGENT" \ - Network accessline 288
_status=$(curl -sS --connect-timeout 10 --max-time 60 -X "$_method" -o "$_out" -D "$_hdr" -w '%{http_code}' \ - Network accessline 290
[Credential-related source omitted] - Network accessline 291
"$@" \ "$_url") || die "Request failed (network error): $_path" fi - Network accessline 292
"$_url") || die "Request failed (network error): $_path" - Dangerous shell operationline 297
rm -f "$_hdr" - Dangerous shell operationline 303
rm -f "$(_token_cache_file)" - Dangerous shell operationline 304
rm -f "$_hdr" - Dangerous shell operationline 308
rm -f "$_hdr" - Dangerous shell operationline 313
rm -f "$_hdr" - Dangerous shell operationline 322
rm -f "$_hdr" - Dangerous shell operationline 334
rm -f "$_hdr" - Dangerous shell operationline 374
trap 'rm -rf "$_public_dir"' EXIT - Network accessline 375
_public_retry=0 while :; do _public_status=$(curl -sS --connect-timeout 10 --max-time 60 -G \ - Network accessline 376
while :; do _public_status=$(curl -sS --connect-timeout 10 --max-time 60 -G \ -o "$_public_dir/response" -D "$_public_dir/headers" -w '%{http_code}' \ - Network accessline 377
_public_status=$(curl -sS --connect-timeout 10 --max-time 60 -G \ - Network accessline 378
-o "$_public_dir/response" -D "$_public_dir/headers" -w '%{http_code}' \ -A "$REDDIT_USER_AGENT" "$@" \ "https://www.reddit.com${_public_path}${_public_suffix}") || die "Public $_public_format request failed (network - Network accessline 379
-A "$REDDIT_USER_AGENT" "$@" \ "https://www.reddit.com${_public_path}${_public_suffix}") || die "Public $_public_format request failed (network error)" case "$_public_status" in - Network accessline 380
"https://www.reddit.com${_public_path}${_public_suffix}") || die "Public $_public_format request failed (network error)" - Dangerous shell operationline 447
trap 'rm -f "$_listing_tmp"' EXIT - Access to secretsline 477
[Credential-related source omitted] - Access to secretsline 478
[Credential-related source omitted] - Network accessline 504
# abc123 → abc123 # t3_abc123 → abc123 # https://www.reddit.com/r/sub/comments/abc123/title/ → abc123 - Network accessline 505
# t3_abc123 → abc123 # https://www.reddit.com/r/sub/comments/abc123/title/ → abc123 # https://www.reddit.com/r/sub/comments/abc123/ → abc123 - Network accessline 506
# https://www.reddit.com/r/sub/comments/abc123/title/ → abc123 - Network accessline 507
# https://www.reddit.com/r/sub/comments/abc123/ → abc123 - Network accessline 508
# https://redd.it/abc123 → abc123 - Access to secretsline 513
[Credential-related source omitted] - Access to secretsline 545
[Credential-related source omitted] - Access to secretsline 546
[Credential-related source omitted] - Access to secretsline 549
[Credential-related source omitted] - Network accessline 576
n_comm = "?" if n_comm is None else n_comm author = cd.get("author") or "?" url = "https://www.reddit.com" + cd.get("permalink", "") - Network accessline 577
author = cd.get("author") or "?" url = "https://www.reddit.com" + cd.get("permalink", "") print(f" [{score:>5} ↑ {n_comm:>4} 💬] r/{sub} by u/{author}") - Network accessline 578
url = "https://www.reddit.com" + cd.get("permalink", "") - Network accessline 585
score = cd.get("score", 0) author = cd.get("author", "") link = "https://www.reddit.com" + cd.get("permalink", "") - Network accessline 586
author = cd.get("author", "") link = "https://www.reddit.com" + cd.get("permalink", "") print(f" [{score:>5} ↑] r/{sub} by u/{author}") - Network accessline 587
link = "https://www.reddit.com" + cd.get("permalink", "")
plugins/reddit-skill/skills/reddit-skill/scripts/me.sh
plugins/reddit-skill/skills/reddit-skill/scripts/post_create.sh
plugins/reddit-skill/skills/reddit-skill/scripts/rss_to_listing.py
plugins/reddit-skill/skills/reddit-skill/scripts/search.sh
- Executable scriptline 1
#!/bin/sh
plugins/reddit-skill/skills/reddit-skill/scripts/submission.sh
- Executable scriptline 1
#!/bin/sh - Access to secretsline 31
[Credential-related source omitted] - Access to secretsline 32
[Credential-related source omitted] - Network accessline 41
print(f" r/{post.get('subreddit','?')} by u/{post.get('author','?')}") print(f" Score: {post.get('score',0)} ↑ Comments: {post.get('num_comments',0)} 💬 UpvoteRatio: {post.get('upvote_ratio','?')}") print(f" URL: https://www.reddit.com - Network accessline 42
print(f" Score: {post.get('score',0)} ↑ Comments: {post.get('num_comments',0)} 💬 UpvoteRatio: {post.get('upvote_ratio','?')}") print(f" URL: https://www.reddit.com{post.get('permalink','')}") body = (post.get('selftext') or '').strip() - Network accessline 43
print(f" URL: https://www.reddit.com{post.get('permalink','')}")
plugins/reddit-skill/skills/reddit-skill/scripts/subreddit_info.sh
plugins/reddit-skill/skills/reddit-skill/scripts/subreddit_popular.sh
- Executable scriptline 1
#!/bin/sh
plugins/reddit-skill/skills/reddit-skill/scripts/subreddit_stats.sh
- Executable scriptline 1
#!/bin/sh - Access to secretsline 42
[Credential-related source omitted] - Access to secretsline 51
[Credential-related source omitted] - Access to secretsline 59
[Credential-related source omitted] - Access to secretsline 61
[Credential-related source omitted] - Access to secretsline 70
[Credential-related source omitted]
plugins/reddit-skill/skills/reddit-skill/scripts/subreddit_subscribe.sh
plugins/reddit-skill/skills/reddit-skill/scripts/subreddit_top.sh
- Executable scriptline 1
#!/bin/sh - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 48
[Credential-related source omitted] - Access to secretsline 53
[Credential-related source omitted] - Access to secretsline 83
[Credential-related source omitted] - Access to secretsline 84
[Credential-related source omitted] - Access to secretsline 86
[Credential-related source omitted]
plugins/reddit-skill/skills/reddit-skill/scripts/tests/fixtures/posts.atom
- Network accessline 1
<?xml version="1.0" encoding="UTF-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> - Network accessline 2
<feed xmlns="http://www.w3.org/2005/Atom"> - Network accessline 7
<author><name>/u/alice</name></author> <category term="Python" label="r/Python"/> <link href="https://www.reddit.com/r/Python/comments/abc123/python_rss/"/> - Network accessline 8
<category term="Python" label="r/Python"/> <link href="https://www.reddit.com/r/Python/comments/abc123/python_rss/"/> <published>2026-09-17T12:00:00+03:00</published> - Network accessline 9
<link href="https://www.reddit.com/r/Python/comments/abc123/python_rss/"/> - Network accessline 10
<published>2026-09-17T12:00:00+03:00</published> <updated>2026-09-17T13:00:00+03:00</updated> <content type="html"><p>Hello &amp; <strong>world</strong>!</p><p>A&nbsp;B<br/>Next line</p - Network accessline 11
<updated>2026-09-17T13:00:00+03:00</updated> <content type="html"><p>Hello &amp; <strong>world</strong>!</p><p>A&nbsp;B<br/>Next line</p><a href="https://example.com/article?a=1&a - Network accessline 12
<content type="html"><p>Hello &amp; <strong>world</strong>!</p><p>A&nbsp;B<br/>Next line</p><a href="https://example.com/article?a=1&amp;b=2">[link]</a> <a href="https://w - Network accessline 15
<id>t3_def456</id> <title>Post without optional metadata</title> <link rel="self" href="https://www.reddit.com/r/Python/comments/def456/.rss"/> - Network accessline 16
<title>Post without optional metadata</title> <link rel="self" href="https://www.reddit.com/r/Python/comments/def456/.rss"/> <link rel="alternate" href="/r/Python/comments/def456/"/> - Network accessline 17
<link rel="self" href="https://www.reddit.com/r/Python/comments/def456/.rss"/>
plugins/reddit-skill/skills/reddit-skill/scripts/tests/run.sh
- Executable scriptline 1
#!/bin/sh
plugins/reddit-skill/skills/reddit-skill/scripts/tests/test_cache_key.sh
plugins/reddit-skill/skills/reddit-skill/scripts/tests/test_load_config.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 10
trap 'rm -rf "$TMP_BASE"' EXIT - Access to secretsline 12
[Credential-related source omitted] - Access to secretsline 15
[Credential-related source omitted] - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 34
[Credential-related source omitted] - Access to secretsline 36
[Credential-related source omitted] - Access to secretsline 53
[Credential-related source omitted] - Access to secretsline 54
[Credential-related source omitted] - Access to secretsline 72
[Credential-related source omitted] - Access to secretsline 74
[Credential-related source omitted]
plugins/reddit-skill/skills/reddit-skill/scripts/tests/test_rss_mode.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 9
trap 'rm -rf "$TEST_ROOT"' EXIT - Network accessline 12
cat > "$TEST_ROOT/bin/curl" <<'PY' - Network accessline 19
args = sys.argv[1:] url = next(arg for arg in args if arg.startswith("https://")) - Network accessline 20
url = next(arg for arg in args if arg.startswith("https://")) - Access to secretsline 21
[Credential-related source omitted] - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 28
[Credential-related source omitted] - Access to secretsline 33
[Credential-related source omitted] - Access to secretsline 35
[Credential-related source omitted] - Access to secretsline 48
[Credential-related source omitted] - Network accessline 49
body = '{"kind": "Listing", "data": {"children": []}}' else: body = '''<feed xmlns="http://www.w3.org/2005/Atom"><entry> - Network accessline 50
else: body = '''<feed xmlns="http://www.w3.org/2005/Atom"><entry> <id>t3_abc123</id><title>RSS snapshot</title> - Network accessline 51
body = '''<feed xmlns="http://www.w3.org/2005/Atom"><entry> - Network accessline 52
<id>t3_abc123</id><title>RSS snapshot</title> <link href="https://www.reddit.com/r/test/comments/abc123/test/"/> <updated>2026-09-17T08:00:00Z</updated><category term="test"/> - Network accessline 53
<link href="https://www.reddit.com/r/test/comments/abc123/test/"/> - Access to secretsline 57
[Credential-related source omitted] - Dangerous shell operationline 74
rm -rf "$TEST_ROOT/config" "$TEST_ROOT/cache" "$TEST_ROOT/tmp" - Access to secretsline 90
[Credential-related source omitted] - Access to secretsline 92
[Credential-related source omitted] - Network accessline 135
import sys call = [json.loads(line) for line in open(sys.argv[1]) if json.loads(line)["kind"] == sys.argv[2]][-1] assert call["url"].split("?")[0] == "https://www.reddit.com" + sys.argv[3], call - Network accessline 136
call = [json.loads(line) for line in open(sys.argv[1]) if json.loads(line)["kind"] == sys.argv[2]][-1] assert call["url"].split("?")[0] == "https://www.reddit.com" + sys.argv[3], call args = call["args"] - Network accessline 137
assert call["url"].split("?")[0] == "https://www.reddit.com" + sys.argv[3], call - Access to secretsline 174
[Credential-related source omitted] - Access to secretsline 182
[Credential-related source omitted] - Network accessline 218
reset_case run_ok submission.sh --url https://www.reddit.com/r/test/comments/abc123/test/ --limit-comments 4 - Network accessline 219
run_ok submission.sh --url https://www.reddit.com/r/test/comments/abc123/test/ --limit-comments 4 - Network accessline 223
grep -Eqi 'more|incomplete' "$TEST_ROOT/stdout" "$TEST_ROOT/stderr" || fail "submission should report incomplete comments" run_ok submission.sh --url https://www.reddit.com/comments/abc123.json --limit-comments 4 - Network accessline 224
fail "submission should report incomplete comments" run_ok submission.sh --url https://www.reddit.com/comments/abc123.json --limit-comments 4 assert_calls JSON - Network accessline 225
run_ok submission.sh --url https://www.reddit.com/comments/abc123.json --limit-comments 4
plugins/reddit-skill/skills/reddit-skill/scripts/tests/test_rss_parser.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 8
trap 'rm -rf "$TMP_BASE"' EXIT - Network accessline 29
assert first["subreddit"] == "Python" and first["author"] == "alice" assert first["created_utc"] == datetime.fromisoformat("2026-09-17T09:00:00+00:00").timestamp() assert first["url"] == "https://example.com/article?a=1&b=2" - Network accessline 30
assert first["created_utc"] == datetime.fromisoformat("2026-09-17T09:00:00+00:00").timestamp() assert first["url"] == "https://example.com/article?a=1&b=2" assert first["selftext"] == "Hello & world!\nA B\nNext line\n[link] [comments]" - Network accessline 31
assert first["url"] == "https://example.com/article?a=1&b=2" - Network accessline 35
assert second["author"] == "" and second["subreddit"] == "" assert second["selftext"] == "" and second["selftext_html"] is None assert second["url"] == "https://www.reddit.com/r/Python/comments/def456/" - Network accessline 36
assert second["selftext"] == "" and second["selftext_html"] is None assert second["url"] == "https://www.reddit.com/r/Python/comments/def456/" assert second["created_utc"] == datetime.fromisoformat("2026-09-17T09:30:00+00:00").timestamp() - Network accessline 37
assert second["url"] == "https://www.reddit.com/r/Python/comments/def456/" - Network accessline 40
atom = "{http://www.w3.org/2005/Atom}" - Network accessline 41
empty = workdir / "empty.atom" empty.write_text('<feed xmlns="http://www.w3.org/2005/Atom"/>') subprocess.run([sys.executable, parser, str(empty), str(workdir / "empty.json")], check=True) - Network accessline 42
empty.write_text('<feed xmlns="http://www.w3.org/2005/Atom"/>') - Network accessline 51
bad_inputs.append(ET.tostring(feed, encoding="unicode")) feed = ET.parse(fixture).getroot() feed.find(atom + "entry").find(atom + "link").set("href", "https://example.com/not-a-post") - Network accessline 52
feed = ET.parse(fixture).getroot() feed.find(atom + "entry").find(atom + "link").set("href", "https://example.com/not-a-post") bad_inputs.append(ET.tostring(feed, encoding="unicode")) - Network accessline 53
feed.find(atom + "entry").find(atom + "link").set("href", "https://example.com/not-a-post") - Network accessline 54
bad_inputs.append(ET.tostring(feed, encoding="unicode")) bad_inputs.append('<feed xmlns="http://www.w3.org/2005/Atom"><entry/></feed>') bad_inputs.append('<feed xmlns="http://www.w3.org/2005/Atom"><entry xmlns=""/></feed>') - Network accessline 55
bad_inputs.append('<feed xmlns="http://www.w3.org/2005/Atom"><entry/></feed>') - Network accessline 56
bad_inputs.append('<feed xmlns="http://www.w3.org/2005/Atom"><entry xmlns=""/></feed>')
plugins/reddit-skill/skills/reddit-skill/scripts/tests/test_token_expiry.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 10
trap 'rm -rf "$TMP_BASE"' EXIT - Access to secretsline 24
[Credential-related source omitted] - Access to secretsline 35
[Credential-related source omitted] - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 55
[Credential-related source omitted] - Dangerous shell operationline 73
rm -f "$TMP_BASE/cache/token.json"
plugins/reddit-skill/skills/reddit-skill/scripts/tests/test_url_parse.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 14
trap 'rm -rf "$REDDIT_CACHE_DIR"' EXIT - Network accessline 42
got=$(parse_submission_id "https://www.reddit.com/r/Python/comments/abc123/some_title/") - Network accessline 46
got=$(parse_submission_id "https://www.reddit.com/r/Python/comments/abc123/") - Network accessline 50
got=$(parse_submission_id "https://www.reddit.com/r/Python/comments/abc123") - Network accessline 54
got=$(parse_submission_id "https://redd.it/abc123") - Network accessline 58
for url in \ "https://www.reddit.com/r/Python/comments/abc123/some_title/.json" \ - Network accessline 59
"https://www.reddit.com/r/Python/comments/abc123/some_title/.json" \ - Network accessline 60
"https://www.reddit.com/comments/abc123.json?limit=25"; do
plugins/reddit-skill/skills/reddit-skill/scripts/tests/test_write_guard.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 10
trap 'rm -rf "$TMP_BASE"' EXIT - Dangerous shell operationline 22
eval "$1" - Network accessline 69
# --- Case 5a: post_create.sh without REDDIT_ENABLE_WRITE → die, no curl --- - Network accessline 70
SENTINEL="$TMP_BASE/curl_was_called" cat > "$TMP_BASE/curl" <<EOF - Network accessline 71
cat > "$TMP_BASE/curl" <<EOF - Access to secretsline 78
[Credential-related source omitted] - Access to secretsline 80
[Credential-related source omitted] - Network accessline 102
# --- Case 5b: post_create.sh with REDDIT_ENABLE_WRITE=1 but no --confirm # → dry-run, no curl --- - Network accessline 103
# → dry-run, no curl --- - Dangerous shell operationline 104
rm -f "$SENTINEL" - Access to secretsline 106
[Credential-related source omitted] - Access to secretsline 108
[Credential-related source omitted]
plugins/reddit-skill/skills/reddit-skill/scripts/user_comments.sh
- Executable scriptline 1
#!/bin/sh
plugins/reddit-skill/skills/reddit-skill/scripts/user_info.sh
plugins/reddit-skill/skills/reddit-skill/scripts/user_posts.sh
- Executable scriptline 1
#!/bin/sh
plugins/scrapedo-web-scraper/skills/scrapedo-web-scraper/.gitignore
- Access to secretsline 5
[Credential-related source omitted]
plugins/scrapedo-web-scraper/skills/scrapedo-web-scraper/SKILL.md
- Network accessline 16
# Получить текст страницы python scripts/scrape.py https://example.com - Network accessline 16
# Получить текст страницы python scripts/scrape.py https://example.com - Network accessline 17
python scripts/scrape.py https://example.com - Network accessline 17
python scripts/scrape.py https://example.com - Network accessline 19
# Получить HTML python scripts/scrape.py --html https://example.com - Network accessline 19
# Получить HTML python scripts/scrape.py --html https://example.com - Network accessline 20
python scripts/scrape.py --html https://example.com - Network accessline 20
python scripts/scrape.py --html https://example.com - Network accessline 28
result = fetch_via_scrapedo('https://example.com') - Network accessline 28
result = fetch_via_scrapedo('https://example.com')
plugins/scrapedo-web-scraper/skills/scrapedo-web-scraper/config/README.md
plugins/scrapedo-web-scraper/skills/scrapedo-web-scraper/scripts/scrape.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 42
[Credential-related source omitted] - Access to secretsline 46
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted] - Network accessline 113
base_api = 'http://api.scrape.do' - Network accessline 121
response = requests.get(
plugins/sourcecraft-publisher/skills/sourcecraft-publisher/.gitignore
- Access to secretsline 1
[Credential-related source omitted]
plugins/sourcecraft-publisher/skills/sourcecraft-publisher/SKILL.md
- Access to secretsline 37
[Credential-related source omitted]
plugins/sourcecraft-publisher/skills/sourcecraft-publisher/config/.env.example
- Access to secretsline 2
[Credential-related source omitted] - Network accessline 4
# OAuth2 token for SourceCraft (with contents write access to the target repo) # How to get: https://sourcecraft.yandex.cloud/docs/access-tokens - Network accessline 5
# How to get: https://sourcecraft.yandex.cloud/docs/access-tokens
plugins/sourcecraft-publisher/skills/sourcecraft-publisher/config/README.md
- Access to secretsline 7
[Credential-related source omitted] - Network accessline 13
1. Откройте [SourceCraft](https://sourcecraft.yandex.cloud/) - Network accessline 25
| `SOURCECRAFT_REPO` | да | `org/repo` — целевой репозиторий | | `SOURCECRAFT_BRANCH` | нет | Ветка для push (default: `master`) | | `SOURCECRAFT_SITE_URL` | да | Публичный URL сайта, например `https://org.sourcecraft.site/repo` | - Network accessline 27
| `SOURCECRAFT_SITE_URL` | да | Публичный URL сайта, например `https://org.sourcecraft.site/repo` |
plugins/sourcecraft-publisher/skills/sourcecraft-publisher/scripts/optimize_images.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/sourcecraft-publisher/skills/sourcecraft-publisher/scripts/publish_static.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 7
[Credential-related source omitted] - Access to secretsline 81
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted] - Access to secretsline 83
[Credential-related source omitted] - Access to secretsline 84
[Credential-related source omitted] - Network accessline 96
with tempfile.TemporaryDirectory() as td: repo_dir = Path(td) / 'repo' remote = f'https://oauth2:{token}@git.sourcecraft.dev/{repo}.git' - Network accessline 98
remote = f'https://oauth2:{token}@git.sourcecraft.dev/{repo}.git'
plugins/ssh-remote-connection/skills/ssh-remote-connection/.gitignore
- Access to secretsline 2
[Credential-related source omitted]
plugins/ssh-remote-connection/skills/ssh-remote-connection/SKILL.md
- Access to secretsline 26
[Credential-related source omitted]
plugins/ssh-remote-connection/skills/ssh-remote-connection/config/.env.example
- Access to secretsline 2
[Credential-related source omitted]
plugins/ssh-remote-connection/skills/ssh-remote-connection/scripts/connect.sh
- Executable scriptline 1
#!/bin/bash - Access to secretsline 9
[Credential-related source omitted] - Access to secretsline 14
[Credential-related source omitted] - Access to secretsline 16
[Credential-related source omitted] - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 18
[Credential-related source omitted] - Access to secretsline 28
[Credential-related source omitted] - Dangerous shell operationline 161
eval "$(ssh-agent -s)" > /dev/null 2>&1
plugins/telegram-channel-parser/skills/telegram-channel-parser/.gitignore
- Access to secretsline 1
[Credential-related source omitted]
plugins/telegram-channel-parser/skills/telegram-channel-parser/SKILL.md
- Access to secretsline 31
[Credential-related source omitted] - Access to secretsline 172
[Credential-related source omitted] - Network accessline 183
- `countwithsasha` — просто username - `@countwithsasha` — с собакой - `https://t.me/countwithsasha` — прямая ссылка - Network accessline 184
- `@countwithsasha` — с собакой - `https://t.me/countwithsasha` — прямая ссылка - `https://t.me/s/countwithsasha` — ссылка на веб-превью - Network accessline 185
- `https://t.me/countwithsasha` — прямая ссылка - Network accessline 186
- `https://t.me/s/countwithsasha` — ссылка на веб-превью - Network accessline 193
- Только **публичные** каналы (у которых есть t.me/s/ превью) - Некоторые посты Telegram не отдаёт через веб-превью. Если вместо текста приходит предложение открыть Telegram, поле текста в TSV/JSON содержит `[Текст недоступен в веб-превью T - Network accessline 194
- Некоторые посты Telegram не отдаёт через веб-превью. Если вместо текста приходит предложение открыть Telegram, поле текста в TSV/JSON содержит `[Текст недоступен в веб-превью Telegram: https://t.me/<channel>/<id>]`. Это пометка скилла, а
plugins/telegram-channel-parser/skills/telegram-channel-parser/assets/digest-feed.tsx
plugins/telegram-channel-parser/skills/telegram-channel-parser/config/.env.example
plugins/telegram-channel-parser/skills/telegram-channel-parser/config/README.md
- Access to secretsline 9
[Credential-related source omitted]
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/channel_info.sh
- Executable scriptline 1
#!/usr/bin/env bash
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/common.sh
- Executable scriptline 1
#!/usr/bin/env bash - Access to secretsline 7
[Credential-related source omitted] - Network accessline 10
TG_BASE_URL="https://t.me/s" - Access to secretsline 14
[Credential-related source omitted] - Access to secretsline 16
[Credential-related source omitted] - Access to secretsline 18
[Credential-related source omitted] - Network accessline 21
# --------------- Input normalization --------------- # Accepts: username, @username, https://t.me/username, https://t.me/s/username, t.me/username - Network accessline 22
# Accepts: username, @username, https://t.me/username, https://t.me/s/username, t.me/username - Network accessline 28
input="${input#https://}" - Network accessline 29
input="${input#http://}" - Network accessline 48
tg_fetch() { sleep "$TG_REQUEST_DELAY" curl -s -L \ - Network accessline 49
sleep "$TG_REQUEST_DELAY" curl -s -L \ -H "Accept-Language: ru-RU,ru;q=0.9,en;q=0.5" \ - Network accessline 50
curl -s -L \ - Network accessline 96
local url if [ -n "$before" ]; then url="${TG_BASE_URL}/${channel}?before=${before}" - Network accessline 97
if [ -n "$before" ]; then url="${TG_BASE_URL}/${channel}?before=${before}" else - Network accessline 98
url="${TG_BASE_URL}/${channel}?before=${before}" - Network accessline 99
else url="${TG_BASE_URL}/${channel}" fi - Network accessline 100
url="${TG_BASE_URL}/${channel}" - Network accessline 105
tg_fetch "$url" > "$page_file" - Network accessline 106
if [ ! -s "$page_file" ]; then echo "Error: Empty response from $url" >&2 break - Network accessline 107
echo "Error: Empty response from $url" >&2 - Access to secretsline 204
[Credential-related source omitted] - Access to secretsline 213
[Credential-related source omitted]
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/compare_channels.sh
- Executable scriptline 1
#!/usr/bin/env bash
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/digest.sh
- Executable scriptline 1
#!/usr/bin/env bash
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/digest_json.sh
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/export_csv.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 30
awk -F'\t' -v ch="$CHANNEL" '{ gsub(/"/, "\"\"", $7) url = "https://t.me/" ch "/" $1 - Network accessline 31
gsub(/"/, "\"\"", $7) url = "https://t.me/" ch "/" $1 printf "%s,%s,%s,%s,%s,%s,\"%s\",%s,%s\n", $1, $2, $3, $4, $5, $6, $7, $8, url - Network accessline 32
url = "https://t.me/" ch "/" $1
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/fetch_posts.sh
- Executable scriptline 1
#!/usr/bin/env bash
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/parse_tg_posts.awk
- Executable scriptline 1
#!/usr/bin/awk -f - Network accessline 48
body = clean_text(text) if (body == "" && unsupported) { body = "[Текст недоступен в веб-превью Telegram: https://t.me/" post_path "]" - Network accessline 49
if (body == "" && unsupported) { body = "[Текст недоступен в веб-превью Telegram: https://t.me/" post_path "]" } - Network accessline 50
body = "[Текст недоступен в веб-превью Telegram: https://t.me/" post_path "]" - Network accessline 120
# Extract link: href="https://t.me/channel/123"
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/posting_schedule.sh
- Executable scriptline 1
#!/usr/bin/env bash
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/prepare_runtime.sh
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/sanitize_env.sh
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/search_posts.sh
- Executable scriptline 1
#!/usr/bin/env bash
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/tests/run.sh
- Executable scriptline 1
#!/usr/bin/env bash
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/tests/test_config_loader.sh
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/tests/test_parse_tg_posts.sh
- Executable scriptline 1
#!/usr/bin/env bash - Dangerous shell operationline 8
trap 'rm -rf "$TMP_DIR"' EXIT - Network accessline 16
cat > "$TMP_DIR/posts.html" <<'EOF' <div class="tgme_widget_message" data-post="channel/101"> <a class="tgme_widget_message_reply" href="https://t.me/channel/100"> - Network accessline 17
<div class="tgme_widget_message" data-post="channel/101"> <a class="tgme_widget_message_reply" href="https://t.me/channel/100"> <div class="tgme_widget_message_text js-message_reply_text" dir="auto">Чужой текст ответа</div> - Network accessline 18
<a class="tgme_widget_message_reply" href="https://t.me/channel/100"> - Network accessline 35
<div><i>внутри</i></div> конец цитаты</div> хвост <a href="https://example.com/">ссылка</a> - Network accessline 36
конец цитаты</div> хвост <a href="https://example.com/">ссылка</a> </div> - Network accessline 37
хвост <a href="https://example.com/">ссылка</a> - Network accessline 49
</div> <div class="tgme_widget_message" data-post="channel/108"> <a class="tgme_widget_message_photo_wrap" style="background-image:url('https://example.com/photo.jpg')"></a> - Network accessline 50
<div class="tgme_widget_message" data-post="channel/108"> <a class="tgme_widget_message_photo_wrap" style="background-image:url('https://example.com/photo.jpg')"></a> </div> - Network accessline 51
<a class="tgme_widget_message_photo_wrap" style="background-image:url('https://example.com/photo.jpg')"></a> - Network accessline 88
expect_text 103 'Текст без js-класса' 'потерян текст со старым набором классов' expect_text 104 'Начало <blockquote>Цитата <b>внутри</b> конец цитаты</blockquote> хвост' 'потерян хвост или неверно закрыта вложенная цитата' expect_text 105 ' - Network accessline 89
expect_text 104 'Начало <blockquote>Цитата <b>внутри</b> конец цитаты</blockquote> хвост' 'потерян хвост или неверно закрыта вложенная цитата' expect_text 105 'Начало <blockquote>Цитата <i>внутри</i> конец цитаты</blockquote> хвост <a href= - Network accessline 90
expect_text 105 'Начало <blockquote>Цитата <i>внутри</i> конец цитаты</blockquote> хвост <a href="https://example.com/">ссылка</a>' 'повреждён многострочный текст с цитатой' - Network accessline 91
expect_text 106 'Начало <blockquote>Цитата</blockquote> хвост' 'повреждён исходный blockquote' expect_text 734 '[Текст недоступен в веб-превью Telegram: https://t.me/countwithsasha/734]' 'не сообщено о недоступном тексте' expect_text 108 '' - Network accessline 92
expect_text 734 '[Текст недоступен в веб-превью Telegram: https://t.me/countwithsasha/734]' 'не сообщено о недоступном тексте' - Network accessline 94
expect_text 109 'Подпись доступна' 'подпись заменена сообщением о неподдерживаемом медиа' expect_text 110 'Следующий пост' 'состояние предыдущего поста не сброшено' expect_text 111 '[Текст недоступен в веб-превью Telegram: https://t.me/chan - Network accessline 95
expect_text 110 'Следующий пост' 'состояние предыдущего поста не сброшено' expect_text 111 '[Текст недоступен в веб-превью Telegram: https://t.me/channel/111]' 'превью ответа скрывает недоступность собственного текста' expect_text 112 "Длин - Network accessline 96
expect_text 111 '[Текст недоступен в веб-превью Telegram: https://t.me/channel/111]' 'превью ответа скрывает недоступность собственного текста' - Network accessline 99
awk -F '\t' ' $1 == 108 && $8 == "https://example.com/photo.jpg" { media_ok = 1 } - Network accessline 100
$1 == 108 && $8 == "https://example.com/photo.jpg" { media_ok = 1 }
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/tests/test_reuse_latest.sh
plugins/telegram-channel-parser/skills/telegram-channel-parser/scripts/top_posts.sh
- Executable scriptline 1
#!/usr/bin/env bash
plugins/telegraph-publisher/skills/telegraph-publisher/.gitignore
- Access to secretsline 1
[Credential-related source omitted]
plugins/telegraph-publisher/skills/telegraph-publisher/SKILL.md
- Access to secretsline 22
[Credential-related source omitted] - Access to secretsline 35
[Credential-related source omitted] - Access to secretsline 51
[Credential-related source omitted] - Network accessline 62
If the user supplies an author as `[Channel Name](https://t.me/channel)`, pass - Network accessline 63
`Channel Name` and `https://t.me/channel` as separate name and URL values. - Network accessline 119
sh scripts/create_account.sh --name "Author Name" [--author-url "https://..."] - Network accessline 319
<figure> <img src="https://telegra.ph/file/abc123.jpg"> - Network accessline 320
<img src="https://telegra.ph/file/abc123.jpg"> - Network accessline 330
<figure> <iframe src="https://www.youtube.com/watch?v=VIDEO_ID"></iframe> - Network accessline 331
<iframe src="https://www.youtube.com/watch?v=VIDEO_ID"></iframe>
plugins/telegraph-publisher/skills/telegraph-publisher/config/.env.example
- Access to secretsline 3
[Credential-related source omitted] - Network accessline 6
# Leave commented out to omit these fields. Account creation needs a nonempty name. # TELEGRAPH_AUTHOR_NAME="Your Name" # TELEGRAPH_AUTHOR_URL="https://t.me/your_channel" - Network accessline 8
# TELEGRAPH_AUTHOR_URL="https://t.me/your_channel"
plugins/telegraph-publisher/skills/telegraph-publisher/config/README.md
- Access to secretsline 9
[Credential-related source omitted] - Access to secretsline 13
[Credential-related source omitted] - Access to secretsline 14
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Access to secretsline 27
[Credential-related source omitted] - Network accessline 34
TELEGRAPH_AUTHOR_NAME="Поляков считает | Про ИИ, рекламу и аналитику данных" TELEGRAPH_AUTHOR_URL="https://t.me/polyakov_schitaet" - Network accessline 35
TELEGRAPH_AUTHOR_URL="https://t.me/polyakov_schitaet" - Network accessline 148
1. Open any of your Telegraph pages in **Chrome** 2. DevTools (F12) → **Application** → **Cookies** → `https://telegra.ph` - Network accessline 149
2. DevTools (F12) → **Application** → **Cookies** → `https://telegra.ph` - Access to secretsline 150
[Credential-related source omitted] - Access to secretsline 160
[Credential-related source omitted] - Access to secretsline 167
[Credential-related source omitted] - Access to secretsline 178
[Credential-related source omitted]
plugins/telegraph-publisher/skills/telegraph-publisher/references/CONTENT_FORMAT.md
- Network accessline 11
{ "tag": "p", "attrs": {"href": "https://...", "src": "https://..."}, - Network accessline 12
"tag": "p", "attrs": {"href": "https://...", "src": "https://..."}, "children": ["text", {"tag": "b", "children": ["bold"]}] - Network accessline 13
"attrs": {"href": "https://...", "src": "https://..."}, - Network accessline 74
[{"tag": "figure", "children": [ {"tag": "img", "attrs": {"src": "https://example.com/photo.jpg"}}, - Network accessline 75
{"tag": "img", "attrs": {"src": "https://example.com/photo.jpg"}}, - Network accessline 82
[{"tag": "figure", "children": [ {"tag": "iframe", "attrs": {"src": "https://www.youtube.com/embed/dQw4w9WgXcQ"}} - Network accessline 83
{"tag": "iframe", "attrs": {"src": "https://www.youtube.com/embed/dQw4w9WgXcQ"}} - Network accessline 96
{"tag": "p", "children": ["This article covers..."]}, {"tag": "figure", "children": [ {"tag": "img", "attrs": {"src": "https://example.com/diagram.png"}}, - Network accessline 97
{"tag": "figure", "children": [ {"tag": "img", "attrs": {"src": "https://example.com/diagram.png"}}, {"tag": "figcaption", "children": ["Architecture diagram"]} - Network accessline 98
{"tag": "img", "attrs": {"src": "https://example.com/diagram.png"}}, - Access to secretsline 187
[Credential-related source omitted] - Access to secretsline 188
[Credential-related source omitted]
plugins/telegraph-publisher/skills/telegraph-publisher/references/DIAGRAMS.md
- Network accessline 27
sh scripts/render_diagram.sh --type plantuml --file diagram.puml # → https://www.plantuml.com/plantuml/png/ENCODED - Network accessline 28
# → https://www.plantuml.com/plantuml/png/ENCODED - Network accessline 42
sh scripts/render_diagram.sh --type mermaid --file flow.mmd --upload # → https://telegra.ph/file/abc123.png - Network accessline 43
# → https://telegra.ph/file/abc123.png
plugins/telegraph-publisher/skills/telegraph-publisher/references/IMAGE_WORKFLOWS.md
- Network accessline 40
https://cdn.jsdelivr.net/gh/<owner>/<repo>@<commit>/pages/<telegraph_path>/hero.webp - Network accessline 126
<figure> <img src="https://cdn.example.com/photo.jpg"> - Network accessline 127
<img src="https://cdn.example.com/photo.jpg"> - Network accessline 163
# After fal-ai-image generates image and saves to local file: URL="https://cdn.jsdelivr.net/gh/<owner>/<repo>@<commit>/pages/<telegraph_path>/generated_hero.png" - Network accessline 164
URL="https://cdn.jsdelivr.net/gh/<owner>/<repo>@<commit>/pages/<telegraph_path>/generated_hero.png"
plugins/telegraph-publisher/skills/telegraph-publisher/references/YOUTUBE_EMBEDS.md
- Network accessline 7
| Input URL | Normalized to | |-----------|--------------| | `https://www.youtube.com/watch?v=VIDEO_ID` | `https://www.youtube.com/embed/VIDEO_ID` | - Network accessline 8
|-----------|--------------| | `https://www.youtube.com/watch?v=VIDEO_ID` | `https://www.youtube.com/embed/VIDEO_ID` | | `https://youtube.com/watch?v=VIDEO_ID` | `https://www.youtube.com/embed/VIDEO_ID` | - Network accessline 9
| `https://www.youtube.com/watch?v=VIDEO_ID` | `https://www.youtube.com/embed/VIDEO_ID` | - Network accessline 10
| `https://youtube.com/watch?v=VIDEO_ID` | `https://www.youtube.com/embed/VIDEO_ID` | - Network accessline 11
| `https://youtu.be/VIDEO_ID` | `https://www.youtube.com/embed/VIDEO_ID` | - Network accessline 12
| `https://www.youtube.com/embed/VIDEO_ID` | (unchanged) | - Network accessline 19
<figure> <iframe src="https://www.youtube.com/watch?v=dQw4w9WgXcQ"></iframe> - Network accessline 20
<iframe src="https://www.youtube.com/watch?v=dQw4w9WgXcQ"></iframe> - Network accessline 28
"tag": "figure", "children": [ {"tag": "iframe", "attrs": {"src": "https://www.youtube.com/embed/dQw4w9WgXcQ"}}, - Network accessline 29
"children": [ {"tag": "iframe", "attrs": {"src": "https://www.youtube.com/embed/dQw4w9WgXcQ"}}, {"tag": "figcaption", "children": ["Optional video description"]} - Network accessline 30
{"tag": "iframe", "attrs": {"src": "https://www.youtube.com/embed/dQw4w9WgXcQ"}}, - Network accessline 39
- Only YouTube is auto-normalized. Other iframe sources pass through unchanged. - Telegraph renders iframes with a fixed aspect ratio - URL parameters (like `?t=120` for timestamps) on watch URLs are stripped during normalization. If you ne - Network accessline 41
- URL parameters (like `?t=120` for timestamps) on watch URLs are stripped during normalization. If you need a start time, use the embed parameter format: `https://www.youtube.com/embed/VIDEO_ID?start=120` - Network accessline 48
<figure> <iframe src="https://www.example.com/embed/content"></iframe> - Network accessline 49
<iframe src="https://www.example.com/embed/content"></iframe>
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/account_info.sh
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/common.sh
- Executable scriptline 1
#!/bin/sh - Access to secretsline 8
[Credential-related source omitted] - Network accessline 10
TELEGRAPH_API="https://api.telegra.ph" - Network accessline 11
GITHUB_API="https://api.github.com" - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted] - Access to secretsline 25
[Credential-related source omitted] - Access to secretsline 26
[Credential-related source omitted] - Access to secretsline 27
[Credential-related source omitted] - Access to secretsline 34
[Credential-related source omitted] - Access to secretsline 36
[Credential-related source omitted] - Access to secretsline 43
[Credential-related source omitted] - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 52
[Credential-related source omitted] - Network accessline 68
check_curl() { if ! command -v curl >/dev/null 2>&1; then - Network accessline 69
if ! command -v curl >/dev/null 2>&1; then - Network accessline 70
echo "Error: curl is required but not found." >&2 - Network accessline 106
_tp_method="$1" shift _tp_url="${TELEGRAPH_API}/${_tp_method}" - Network accessline 107
shift _tp_url="${TELEGRAPH_API}/${_tp_method}" _tp_tmpfile="${TPH_TMPDIR}/telegraph_response_$$.json" - Network accessline 108
_tp_url="${TELEGRAPH_API}/${_tp_method}" - Dangerous shell operationline 110
trap 'rm -f "$_tp_tmpfile"' EXIT - Network accessline 112
curl -s -X POST "$@" "$_tp_url" > "$_tp_tmpfile" || { - Network accessline 113
echo "Error: curl failed for $_tp_url" >&2
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/content_converter.py
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/create_account.sh
- Executable scriptline 1
#!/bin/sh - Network accessline 3
# Usage: # sh create_account.sh # Use TELEGRAPH_AUTHOR_NAME/URL from config or environment # sh create_account.sh --name "Author Name" [--author-url "https://..."] - Network accessline 4
# sh create_account.sh # Use TELEGRAPH_AUTHOR_NAME/URL from config or environment # sh create_account.sh --name "Author Name" [--author-url "https://..."] # sh create_account.sh --revoke # Rotate token (requires existing token in - Network accessline 5
# sh create_account.sh --name "Author Name" [--author-url "https://..."] - Access to secretsline 34
[Credential-related source omitted] - Access to secretsline 35
[Credential-related source omitted] - Access to secretsline 40
[Credential-related source omitted] - Dangerous shell operationline 42
rm -f "$_tmpfile" - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 48
[Credential-related source omitted] - Access to secretsline 54
[Credential-related source omitted] - Network accessline 64
# Build curl args as proper argv - Access to secretsline 78
[Credential-related source omitted] - Dangerous shell operationline 81
rm -f "$_tmpfile" - Access to secretsline 90
[Credential-related source omitted]
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/create_page.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 73
trap 'rm -rf "$WORK_DIR"' EXIT - Access to secretsline 98
[Credential-related source omitted] - Access to secretsline 135
[Credential-related source omitted] - Access to secretsline 163
[Credential-related source omitted] - Dangerous shell operationline 182
rm -f "$_tmpfile"
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/diagram_encode.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 11
PlantUML: https://www.plantuml.com/plantuml/png/ENCODED - Network accessline 12
Mermaid: https://mermaid.ink/img/pako:ENCODED - Network accessline 74
return f'https://www.plantuml.com/plantuml/png/{result}' - Network accessline 82
Format: https://mermaid.ink/img/pako:PAYLOAD - Network accessline 97
return f'https://mermaid.ink/img/pako:{encoded}'
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/edit_page.sh
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/github_delete_page_assets.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 30
trap 'rm -rf "$TMP_DIR"' EXIT - Access to secretsline 37
[Credential-related source omitted] - Network accessline 39
[Credential-related source omitted] - Access to secretsline 39
[Credential-related source omitted] - Network accessline 40
-H "X-GitHub-Api-Version: 2022-11-28" MANIFEST_GET_CODE=$(curl -sS -o "$MANIFEST_RESPONSE" -w '%{http_code}' "$@" \ "${GITHUB_API}/repos/${GITHUB_ASSETS_REPO}/contents/${MANIFEST_REPO_PATH}?ref=${GITHUB_ASSETS_BRANCH}") - Network accessline 41
MANIFEST_GET_CODE=$(curl -sS -o "$MANIFEST_RESPONSE" -w '%{http_code}' "$@" \ - Possible obfuscationline 64
decoded = base64.b64decode(content) - Access to secretsline 79
[Credential-related source omitted] - Network accessline 81
[Credential-related source omitted] - Access to secretsline 81
[Credential-related source omitted] - Network accessline 82
-H "X-GitHub-Api-Version: 2022-11-28" ASSET_META_CODE=$(curl -sS -o "$ASSET_META_RESPONSE" -w '%{http_code}' "$@" \ "${GITHUB_API}/repos/${GITHUB_ASSETS_REPO}/contents/${ASSET_PATH}?ref=${GITHUB_ASSETS_BRANCH}") - Network accessline 83
ASSET_META_CODE=$(curl -sS -o "$ASSET_META_RESPONSE" -w '%{http_code}' "$@" \ - Access to secretsline 118
[Credential-related source omitted] - Access to secretsline 120
[Credential-related source omitted] - Network accessline 121
-H "X-GitHub-Api-Version: 2022-11-28" \ -H "Content-Type: application/json" ASSET_DELETE_CODE=$(printf '%s' "$DELETE_PAYLOAD" | curl -sS -o "$ASSET_DELETE_RESPONSE" -w '%{http_code}' "$@" \ - Network accessline 122
-H "Content-Type: application/json" ASSET_DELETE_CODE=$(printf '%s' "$DELETE_PAYLOAD" | curl -sS -o "$ASSET_DELETE_RESPONSE" -w '%{http_code}' "$@" \ -X DELETE \ - Network accessline 123
ASSET_DELETE_CODE=$(printf '%s' "$DELETE_PAYLOAD" | curl -sS -o "$ASSET_DELETE_RESPONSE" -w '%{http_code}' "$@" \ - Access to secretsline 156
[Credential-related source omitted] - Access to secretsline 158
[Credential-related source omitted] - Network accessline 159
-H "X-GitHub-Api-Version: 2022-11-28" \ -H "Content-Type: application/json" MANIFEST_DELETE_CODE=$(printf '%s' "$MANIFEST_DELETE_PAYLOAD" | curl -sS -o "$MANIFEST_DELETE_RESPONSE" -w '%{http_code}' "$@" \ - Network accessline 160
-H "Content-Type: application/json" MANIFEST_DELETE_CODE=$(printf '%s' "$MANIFEST_DELETE_PAYLOAD" | curl -sS -o "$MANIFEST_DELETE_RESPONSE" -w '%{http_code}' "$@" \ -X DELETE \ - Network accessline 161
MANIFEST_DELETE_CODE=$(printf '%s' "$MANIFEST_DELETE_PAYLOAD" | curl -sS -o "$MANIFEST_DELETE_RESPONSE" -w '%{http_code}' "$@" \
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/github_manifest.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/github_upload.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 44
trap 'rm -rf "$TMP_DIR"' EXIT - Access to secretsline 59
[Credential-related source omitted] - Network accessline 61
[Credential-related source omitted] - Access to secretsline 61
[Credential-related source omitted] - Network accessline 62
-H "X-GitHub-Api-Version: 2022-11-28" ASSET_GET_CODE=$(curl -sS -o "$ASSET_GET_RESPONSE" -w '%{http_code}' "$@" \ "${GITHUB_API}/repos/${GITHUB_ASSETS_REPO}/contents/${REPO_PATH}?ref=${GITHUB_ASSETS_BRANCH}") - Network accessline 63
ASSET_GET_CODE=$(curl -sS -o "$ASSET_GET_RESPONSE" -w '%{http_code}' "$@" \ - Access to secretsline 97
[Credential-related source omitted] - Access to secretsline 99
[Credential-related source omitted] - Network accessline 100
-H "X-GitHub-Api-Version: 2022-11-28" \ -H "Content-Type: application/json" ASSET_PUT_CODE=$(printf '%s' "$ASSET_PAYLOAD" | curl -sS -o "$ASSET_PUT_RESPONSE" -w '%{http_code}' "$@" \ - Network accessline 101
-H "Content-Type: application/json" ASSET_PUT_CODE=$(printf '%s' "$ASSET_PAYLOAD" | curl -sS -o "$ASSET_PUT_RESPONSE" -w '%{http_code}' "$@" \ -X PUT \ - Network accessline 102
ASSET_PUT_CODE=$(printf '%s' "$ASSET_PAYLOAD" | curl -sS -o "$ASSET_PUT_RESPONSE" -w '%{http_code}' "$@" \ - Network accessline 137
CDN_URL="https://cdn.jsdelivr.net/gh/${GITHUB_ASSETS_REPO}@${COMMIT_SHA}/${ASSET_PATH}" - Access to secretsline 140
[Credential-related source omitted] - Network accessline 142
[Credential-related source omitted] - Access to secretsline 142
[Credential-related source omitted] - Network accessline 143
-H "X-GitHub-Api-Version: 2022-11-28" MANIFEST_GET_CODE=$(curl -sS -o "$MANIFEST_GET_RESPONSE" -w '%{http_code}' "$@" \ "${GITHUB_API}/repos/${GITHUB_ASSETS_REPO}/contents/${MANIFEST_REPO_PATH}?ref=${GITHUB_ASSETS_BRANCH}") - Network accessline 144
MANIFEST_GET_CODE=$(curl -sS -o "$MANIFEST_GET_RESPONSE" -w '%{http_code}' "$@" \ - Possible obfuscationline 155
decoded = base64.b64decode(content) - Network accessline 168
MANIFEST_JSON=$(python3 "$SCRIPT_DIR/github_manifest.py" merge \ "$PAGE_PATH" "$ASSET_PATH" "$ASSET_SHA" "$CDN_URL" "$COMMIT_SHA" < "$MANIFEST_BODY") - Network accessline 169
"$PAGE_PATH" "$ASSET_PATH" "$ASSET_SHA" "$CDN_URL" "$COMMIT_SHA" < "$MANIFEST_BODY") - Access to secretsline 186
[Credential-related source omitted] - Access to secretsline 188
[Credential-related source omitted] - Network accessline 189
-H "X-GitHub-Api-Version: 2022-11-28" \ -H "Content-Type: application/json" MANIFEST_PUT_CODE=$(printf '%s' "$MANIFEST_PAYLOAD" | curl -sS -o "$MANIFEST_PUT_RESPONSE" -w '%{http_code}' "$@" \ - Network accessline 190
-H "Content-Type: application/json" MANIFEST_PUT_CODE=$(printf '%s' "$MANIFEST_PAYLOAD" | curl -sS -o "$MANIFEST_PUT_RESPONSE" -w '%{http_code}' "$@" \ -X PUT \ - Network accessline 191
MANIFEST_PUT_CODE=$(printf '%s' "$MANIFEST_PAYLOAD" | curl -sS -o "$MANIFEST_PUT_RESPONSE" -w '%{http_code}' "$@" \ - Network accessline 205
echo "$CDN_URL"
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/list_pages.sh
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/page_views.sh
- Executable scriptline 1
#!/bin/sh
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/parse_response.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/render_diagram.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 87
trap 'rm -rf "$_tmpdir"' EXIT - Network accessline 94
set -- "$@" -k fi _http_code=$(curl "$@" "$_render_url" 2>/dev/null) || { - Network accessline 95
fi _http_code=$(curl "$@" "$_render_url" 2>/dev/null) || { echo "Error: Failed to download diagram from rendering server." >&2 - Network accessline 96
_http_code=$(curl "$@" "$_render_url" 2>/dev/null) || {
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/tests/test_author_defaults.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 10
trap 'rm -rf "$TEST_TMP_DIR"' EXIT - Access to secretsline 15
[Credential-related source omitted] - Network accessline 21
# Копия скриптов использует только наш .env, а curl лишь записывает argv. - Network accessline 22
TPH_TEST_PYTHON="$(python3 -c 'import sys; print(sys.executable)')" export TPH_TEST_PYTHON cat > "$TEST_TMP_DIR/bin/curl" <<'CURL' - Network accessline 23
export TPH_TEST_PYTHON cat > "$TEST_TMP_DIR/bin/curl" <<'CURL' #!/bin/sh - Network accessline 24
cat > "$TEST_TMP_DIR/bin/curl" <<'CURL' - Access to secretsline 31
[Credential-related source omitted] - Network accessline 32
log.write(json.dumps(sys.argv[1:], ensure_ascii=False) + '\n') print(json.dumps({'ok': True, 'result': { 'url': 'https://telegra.ph/Test-01-01', - Network accessline 33
print(json.dumps({'ok': True, 'result': { 'url': 'https://telegra.ph/Test-01-01', 'path': 'Test-01-01', - Network accessline 34
'url': 'https://telegra.ph/Test-01-01', - Network accessline 36
[Credential-related source omitted] - Network accessline 37
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Network accessline 38
'auth_url': 'https://example.invalid/auth', - Network accessline 40
PY CURL chmod +x "$TEST_TMP_DIR/bin/curl" - Access to secretsline 48
[Credential-related source omitted] - Network accessline 50
ABSENT='__ABSENT__' AUTHOR_DEFAULT='Поляков считает | Про ИИ, рекламу и аналитику данных' URL_DEFAULT='https://t.me/polyakov_schitaet' - Network accessline 52
URL_DEFAULT='https://t.me/polyakov_schitaet' - Access to secretsline 58
[Credential-related source omitted] - Access to secretsline 66
[Credential-related source omitted] - Network accessline 90
fi if [ -s "$TPH_TEST_CURL_LOG" ]; then printf '%s: curl не должен вызываться при ошибке\n' "$TEST_CASE" >&2 - Network accessline 91
if [ -s "$TPH_TEST_CURL_LOG" ]; then printf '%s: curl не должен вызываться при ошибке\n' "$TEST_CASE" >&2 exit 1 - Network accessline 92
printf '%s: curl не должен вызываться при ошибке\n' "$TEST_CASE" >&2 - Network accessline 112
check(len(requests) == int(count), f'ожидалось {count} запросов, получено {len(requests)}') for number, argv in enumerate(requests, 1): check(argv[-1] == f'https://api.telegra.ph/{method}', f'запрос {number}: неверный метод') - Network accessline 113
for number, argv in enumerate(requests, 1): check(argv[-1] == f'https://api.telegra.ph/{method}', f'запрос {number}: неверный метод') fields = {} - Network accessline 114
check(argv[-1] == f'https://api.telegra.ph/{method}', f'запрос {number}: неверный метод') - Access to secretsline 139
[Credential-related source omitted] - Network accessline 140
TELEGRAPH_AUTHOR_NAME='Автор из окружения' TELEGRAPH_AUTHOR_URL='https://example.invalid/environment' - Network accessline 141
TELEGRAPH_AUTHOR_URL='https://example.invalid/environment' - Network accessline 142
export TELEGRAPH_AUTHOR_NAME TELEGRAPH_AUTHOR_URL write_config test-token "$AUTHOR_DEFAULT" "$URL_DEFAULT" run_case create_config ok create_page.sh --title Test --html '<p>Hello</p>' - Network accessline 143
write_config test-token "$AUTHOR_DEFAULT" "$URL_DEFAULT" - Network accessline 144
run_case create_config ok create_page.sh --title Test --html '<p>Hello</p>' assert_requests 1 createPage "author_name=$AUTHOR_DEFAULT" "author_url=$URL_DEFAULT" unset TELEGRAPH_AUTHOR_NAME TELEGRAPH_AUTHOR_URL - Network accessline 145
assert_requests 1 createPage "author_name=$AUTHOR_DEFAULT" "author_url=$URL_DEFAULT" - Access to secretsline 148
[Credential-related source omitted] - Dangerous shell operationline 149
[Credential-related source omitted] - Access to secretsline 149
[Credential-related source omitted] - Network accessline 150
[Credential-related source omitted] - Access to secretsline 150
[Credential-related source omitted] - Network accessline 151
TELEGRAPH_AUTHOR_NAME="$AUTHOR_DEFAULT" TELEGRAPH_AUTHOR_URL="$URL_DEFAULT" export TELEGRAPH_ACCESS_TOKEN TELEGRAPH_AUTHOR_NAME TELEGRAPH_AUTHOR_URL - Network accessline 152
TELEGRAPH_AUTHOR_URL="$URL_DEFAULT" - Network accessline 153
[Credential-related source omitted] - Access to secretsline 153
[Credential-related source omitted] - Network accessline 154
run_case edit_environment ok edit_page.sh --path Test-01-01 --title Test --html '<p>Hello</p>' assert_requests 1 editPage/Test-01-01 "author_name=$AUTHOR_DEFAULT" "author_url=$URL_DEFAULT" unset TELEGRAPH_ACCESS_TOKEN TELEGRAPH_AUTHOR_NAME - Network accessline 155
assert_requests 1 editPage/Test-01-01 "author_name=$AUTHOR_DEFAULT" "author_url=$URL_DEFAULT" - Access to secretsline 156
[Credential-related source omitted] - Network accessline 158
write_config test-token "$AUTHOR_DEFAULT" "$URL_DEFAULT" - Network accessline 159
run_case create_name_override ok create_page.sh --title Test --html '<p>Hello</p>' --author-name 'Явный автор' assert_requests 1 createPage 'author_name=Явный автор' "author_url=$URL_DEFAULT" run_case edit_url_override ok edit_page.sh --pat - Network accessline 160
assert_requests 1 createPage 'author_name=Явный автор' "author_url=$URL_DEFAULT" - Network accessline 161
run_case edit_url_override ok edit_page.sh --path Test-01-01 --title Test --html '<p>Hello</p>' --author-url 'https://example.invalid/explicit' - Network accessline 162
assert_requests 1 editPage/Test-01-01 "author_name=$AUTHOR_DEFAULT" 'author_url=https://example.invalid/explicit' - Access to secretsline 170
[Credential-related source omitted] - Network accessline 175
run_case edit_name_only ok edit_page.sh --path Test-01-01 --title Test --html '<p>Hello</p>' assert_requests 1 editPage/Test-01-01 "author_name=$AUTHOR_DEFAULT" '!author_url' write_config test-token "$AUTHOR_DEFAULT" "$URL_DEFAULT" - Network accessline 177
write_config test-token "$AUTHOR_DEFAULT" "$URL_DEFAULT" - Network accessline 187
PY run_case split_config ok create_page.sh --title Test --content-file "$TEST_TMP_DIR/large.json" assert_requests 3 createPage "author_name=$AUTHOR_DEFAULT" "author_url=$URL_DEFAULT" - Network accessline 188
run_case split_config ok create_page.sh --title Test --content-file "$TEST_TMP_DIR/large.json" assert_requests 3 createPage "author_name=$AUTHOR_DEFAULT" "author_url=$URL_DEFAULT" grep -q '^Parts: 2$' "$TEST_TMP_DIR/split_config.out" - Network accessline 189
assert_requests 3 createPage "author_name=$AUTHOR_DEFAULT" "author_url=$URL_DEFAULT" - Network accessline 196
write_config "$ABSENT" "$AUTHOR_DEFAULT" "$URL_DEFAULT" - Network accessline 198
[Credential-related source omitted] - Access to secretsline 198
[Credential-related source omitted] - Network accessline 200
[Credential-related source omitted] - Access to secretsline 200
[Credential-related source omitted] - Access to secretsline 203
[Credential-related source omitted] - Network accessline 213
ln -s "$(command -v "$command_name")" "$NO_PYTHON_BIN/$command_name" done ln -s "$TEST_TMP_DIR/bin/curl" "$NO_PYTHON_BIN/curl" - Network accessline 214
done ln -s "$TEST_TMP_DIR/bin/curl" "$NO_PYTHON_BIN/curl" write_config test-token "$AUTHOR_DEFAULT" "$URL_DEFAULT" - Network accessline 215
ln -s "$TEST_TMP_DIR/bin/curl" "$NO_PYTHON_BIN/curl" - Network accessline 216
write_config test-token "$AUTHOR_DEFAULT" "$URL_DEFAULT" - Network accessline 220
[Credential-related source omitted] - Network accessline 221
[Credential-related source omitted] - Access to secretsline 221
[Credential-related source omitted] - Network accessline 222
write_config "$ABSENT" "$AUTHOR_DEFAULT" "$URL_DEFAULT"
plugins/telegraph-publisher/skills/telegraph-publisher/scripts/upload.sh
- Executable scriptline 1
#!/bin/sh - Network accessline 7
# sh upload.sh --file /path/to/image.png --insecure # skip SSL verification # # Output: full URL (https://telegra.ph/file/...) - Network accessline 8
# # Output: full URL (https://telegra.ph/file/...) # - Network accessline 9
# Output: full URL (https://telegra.ph/file/...) - Dangerous shell operationline 82
trap 'rm -f "$_tmpfile"' EXIT - Network accessline 84
# Build curl args - Network accessline 93
set -- "$@" -F "file=@$FILE" "https://telegra.ph/upload" - Network accessline 95
_http_code=$(curl "$@") - Network accessline 119
_full_url="https://telegra.ph${_src}" - Network accessline 120
echo "$_full_url"
plugins/x-research/skills/x-research/.gitignore
- Access to secretsline 1
[Credential-related source omitted]
plugins/x-research/skills/x-research/SKILL.md
- Network accessline 29
Get an xAI API key at [console.x.ai](https://console.x.ai/), then: - Access to secretsline 31
[Credential-related source omitted] - Access to secretsline 34
[Credential-related source omitted] - Access to secretsline 76
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted] - Network accessline 94
# By URL bash scripts/analyze.sh --url "https://x.com/elonmusk/status/123456" --query "context about the post" - Network accessline 95
bash scripts/analyze.sh --url "https://x.com/elonmusk/status/123456" --query "context about the post" - Access to secretsline 106
[Credential-related source omitted] - Access to secretsline 158
[Credential-related source omitted] - Access to secretsline 159
[Credential-related source omitted] - Access to secretsline 162
[Credential-related source omitted] - Network accessline 197
- **x_search**: max 10 handles per `allowed_x_handles` (auto-batched if more) - **Rate limits**: tier-based, see [docs.x.ai/developers/rate-limits](https://docs.x.ai/developers/rate-limits) - Network accessline 198
- **Rate limits**: tier-based, see [docs.x.ai/developers/rate-limits](https://docs.x.ai/developers/rate-limits)
plugins/x-research/skills/x-research/config/.env.example
- Access to secretsline 2
[Credential-related source omitted] - Access to secretsline 3
[Credential-related source omitted] - Network accessline 6
# ─── API credentials ───────────────────────────────────────── # Get your key at https://console.x.ai/ - Network accessline 7
# Get your key at https://console.x.ai/ - Access to secretsline 8
[Credential-related source omitted] - Network accessline 10
# ─── Model ─────────────────────────────────────────────────── # Config-driven; fallback to grok-4.20-reasoning if unavailable. # Full list: https://docs.x.ai/developers/models - Network accessline 11
# Config-driven; fallback to grok-4.20-reasoning if unavailable. # Full list: https://docs.x.ai/developers/models XAI_MODEL=grok-4-1-fast-reasoning - Network accessline 12
# Full list: https://docs.x.ai/developers/models
plugins/x-research/skills/x-research/config/README.md
- Network accessline 5
1. Go to [console.x.ai](https://console.x.ai/) - Access to secretsline 10
[Credential-related source omitted] - Access to secretsline 13
[Credential-related source omitted] - Access to secretsline 16
[Credential-related source omitted] - Network accessline 65
Check available models: [docs.x.ai/developers/models](https://docs.x.ai/developers/models)
plugins/x-research/skills/x-research/references/API_REFERENCE.md
- Network accessline 6
POST https://api.x.ai/v1/responses - Access to secretsline 7
[Credential-related source omitted] - Network accessline 61
{ "type": "url_citation", "url": "https://x.com/user/status/123", - Network accessline 62
"type": "url_citation", "url": "https://x.com/user/status/123", "title": "...", - Network accessline 63
"url": "https://x.com/user/status/123", - Network accessline 91
Full model list: https://docs.x.ai/developers/models - Network accessline 104
Details: https://docs.x.ai/developers/rate-limits
plugins/x-research/skills/x-research/scripts/analyze.sh
- Executable scriptline 1
#!/bin/sh - Network accessline 2
# Analyze: deep analysis of a specific X post, thread, or topic # Usage: bash scripts/analyze.sh --query "post description or topic" [--url "https://x.com/..."] [--period today] - Network accessline 3
# Usage: bash scripts/analyze.sh --query "post description or topic" [--url "https://x.com/..."] [--period today] - Network accessline 12
if [ -z "$QUERY" ] && [ -z "$URL" ]; then echo "Error: --query or --url is required." >&2 echo "Usage: bash scripts/analyze.sh --query \"topic or post description\" [--url \"https://x.com/...\"]" >&2 - Network accessline 13
echo "Error: --query or --url is required." >&2 echo "Usage: bash scripts/analyze.sh --query \"topic or post description\" [--url \"https://x.com/...\"]" >&2 exit 1 - Network accessline 14
echo "Usage: bash scripts/analyze.sh --query \"topic or post description\" [--url \"https://x.com/...\"]" >&2 - Access to secretsline 108
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted] - Access to secretsline 110
[Credential-related source omitted] - Access to secretsline 111
[Credential-related source omitted] - Access to secretsline 112
[Credential-related source omitted]
plugins/x-research/skills/x-research/scripts/common.sh
- Executable scriptline 1
#!/bin/sh - Access to secretsline 9
[Credential-related source omitted] - Network accessline 14
XAI_API_URL="https://api.x.ai/v1/responses" - Access to secretsline 32
[Credential-related source omitted] - Access to secretsline 34
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Access to secretsline 66
[Credential-related source omitted] - Dangerous shell operationline 71
rm -f "$_exports_file" - Access to secretsline 75
[Credential-related source omitted] - Dangerous shell operationline 79
rm -f "$_exports_file" - Access to secretsline 81
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted] - Dangerous shell operationline 243
trap 'rm -f "$_body_file" "$_response_file" "$_headers_file"' EXIT - Access to secretsline 255
[Credential-related source omitted] - Access to secretsline 258
[Credential-related source omitted] - Access to secretsline 261
[Credential-related source omitted] - Access to secretsline 265
[Credential-related source omitted] - Access to secretsline 268
[Credential-related source omitted] - Access to secretsline 270
[Credential-related source omitted] - Network accessline 278
[Credential-related source omitted] - Access to secretsline 278
[Credential-related source omitted] - Network accessline 279
-X POST "$XAI_API_URL" \ - Access to secretsline 281
[Credential-related source omitted] - Access to secretsline 300
[Credential-related source omitted] - Access to secretsline 303
[Credential-related source omitted] - Access to secretsline 306
[Credential-related source omitted] - Access to secretsline 310
[Credential-related source omitted] - Access to secretsline 313
[Credential-related source omitted] - Access to secretsline 315
[Credential-related source omitted] - Network accessline 319
print(json.dumps(body, ensure_ascii=False)) " > "$_body_file" _http_code=$(curl -s -o "$_response_file" -w '%{http_code}' \ - Network accessline 320
" > "$_body_file" _http_code=$(curl -s -o "$_response_file" -w '%{http_code}' \ -X POST "$XAI_API_URL" \ - Network accessline 321
[Credential-related source omitted] - Access to secretsline 321
[Credential-related source omitted] - Network accessline 322
-X POST "$XAI_API_URL" \ - Access to secretsline 324
[Credential-related source omitted] - Access to secretsline 435
[Credential-related source omitted] - Access to secretsline 436
[Credential-related source omitted] - Access to secretsline 438
[Credential-related source omitted] - Access to secretsline 439
[Credential-related source omitted] - Access to secretsline 440
[Credential-related source omitted] - Access to secretsline 441
[Credential-related source omitted] - Access to secretsline 458
[Credential-related source omitted] - Access to secretsline 460
[Credential-related source omitted] - Access to secretsline 461
[Credential-related source omitted] - Access to secretsline 462
[Credential-related source omitted] - Access to secretsline 463
[Credential-related source omitted] - Access to secretsline 464
[Credential-related source omitted] - Dangerous shell operationline 490
rm -f "$_tmpcount"
plugins/x-research/skills/x-research/scripts/digest.sh
- Executable scriptline 1
#!/bin/sh - Network accessline 44
SYSTEM_PROMPT='You are an X/Twitter research assistant. Always respond with valid JSON matching this schema: {"items": [{"author": "@handle", "date": "ISO8601", "summary": "1-2 sentence summary", "engagement": "likes, reposts", "url": "http - Network accessline 45
{"items": [{"author": "@handle", "date": "ISO8601", "summary": "1-2 sentence summary", "engagement": "likes, reposts", "url": "https://x.com/...", "topic": "category"}], "ideas": ["Telegram post idea 1", "..."], "summary": "Overall narrativ - Dangerous shell operationline 61
trap 'rm -rf "$_merge_dir"' EXIT - Access to secretsline 137
[Credential-related source omitted] - Access to secretsline 138
[Credential-related source omitted] - Access to secretsline 139
[Credential-related source omitted] - Access to secretsline 140
[Credential-related source omitted] - Access to secretsline 141
[Credential-related source omitted]
plugins/x-research/skills/x-research/scripts/find_latest.sh
plugins/x-research/skills/x-research/scripts/prepare_runtime.sh
plugins/x-research/skills/x-research/scripts/sanitize_env.sh
plugins/x-research/skills/x-research/scripts/search.sh
- Executable scriptline 1
#!/bin/sh - Network accessline 27
SYSTEM_PROMPT='You are an X/Twitter research assistant. Always respond with valid JSON matching this schema: {"items": [{"author": "@handle", "date": "ISO8601", "summary": "1-2 sentence summary", "engagement": "likes, reposts", "url": "http - Network accessline 28
{"items": [{"author": "@handle", "date": "ISO8601", "summary": "1-2 sentence summary", "engagement": "likes, reposts", "url": "https://x.com/...", "topic": "category"}], "ideas": ["Telegram post idea 1", "..."], "summary": "Overall search r - Access to secretsline 76
[Credential-related source omitted] - Access to secretsline 78
[Credential-related source omitted] - Access to secretsline 80
[Credential-related source omitted] - Access to secretsline 81
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted]
plugins/x-research/skills/x-research/scripts/tests/run.sh
- Executable scriptline 1
#!/bin/sh
plugins/x-research/skills/x-research/scripts/tests/test_config_loader.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 11
rm -rf "$TMP_DIR" - Access to secretsline 16
[Credential-related source omitted] - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 45
[Credential-related source omitted]
plugins/x-research/skills/x-research/scripts/trending.sh
- Executable scriptline 1
#!/bin/sh - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 69
[Credential-related source omitted] - Access to secretsline 70
[Credential-related source omitted] - Access to secretsline 71
[Credential-related source omitted] - Access to secretsline 72
[Credential-related source omitted]
plugins/yandex-direct/skills/yandex-direct/.gitignore
- Access to secretsline 5
[Credential-related source omitted]
plugins/yandex-direct/skills/yandex-direct/config/API_ACCESS.md
- Network accessline 13
Войдите под Яндекс-аккаунтом владельца приложения и откройте [создание приложения](https://oauth.yandex.ru/client/new/). - Network accessline 14
[создание приложения](https://oauth.yandex.ru/client/new/). - Network accessline 28
получения токена. Для выбранного типа приложения адрес возврата уже задан Яндексом; настраивать свой сайт для получения токена вручную не требуется. Порядок регистрации: [Яндекс OAuth](https://yandex.ru/dev/id/doc/ru/register-api), - Network accessline 29
Яндексом; настраивать свой сайт для получения токена вручную не требуется. Порядок регистрации: [Яндекс OAuth](https://yandex.ru/dev/id/doc/ru/register-api), права Директа: [документация Директа](https://yandex.ru/dev/direct/doc/ru/concepts - Network accessline 30
Порядок регистрации: [Яндекс OAuth](https://yandex.ru/dev/id/doc/ru/register-api), - Network accessline 31
права Директа: [документация Директа](https://yandex.ru/dev/direct/doc/ru/concepts/register). - Network accessline 35
Под тем же аккаунтом откройте [«Мои заявки» в настройках API](https://direct.yandex.ru/registered/main.pl?cmd=apiCertificationRequestList). - Network accessline 36
[«Мои заявки» в настройках API](https://direct.yandex.ru/registered/main.pl?cmd=apiCertificationRequestList). - Network accessline 37
Если страница недоступна, проверьте наличие кабинета: Яндекс требует хотя бы одну созданную кампанию для доступа к настройкам API. Само подключение скилла не требует запуска показов. [Условия подачи заявки](https://yandex.ru/dev/direct/doc/ - Network accessline 39
требует запуска показов. [Условия подачи заявки](https://yandex.ru/dev/direct/doc/ru/access-request). - Network accessline 67
Если просят ссылку на программу, укажите [страницу скилла](https://github.com/artwist-polyakov/polyakov-claude-skills/tree/main/plugins/yandex-direct) - Network accessline 68
[страницу скилла](https://github.com/artwist-polyakov/polyakov-claude-skills/tree/main/plugins/yandex-direct) - Network accessline 73
Программа использует Python 3.11 или новее, JSON и стандартную библиотеку Python. Основной адрес — `https://api.direct.yandex.com/json/v501/`; API Live v4 используется - Network accessline 74
Основной адрес — `https://api.direct.yandex.com/json/v501/`; API Live v4 используется - Network accessline 100
Если форма требует спецификацию, приложите это описание отдельным документом. Такой состав технического описания приведён в [официальном руководстве Директа](https://yandex.com/dev/direct/doc/en/real-world). - Network accessline 102
[официальном руководстве Директа](https://yandex.com/dev/direct/doc/en/real-world). - Network accessline 105
рассмотрения до семи дней. Если заявку отклонили, исправьте замечания и отправьте повторно. Заявка относится к ClientID; каждому пользователю приложения отдельная заявка не нужна. [Порядок рассмотрения](https://yandex.ru/dev/direct/doc/ru/c - Network accessline 107
заявка не нужна. [Порядок рассмотрения](https://yandex.ru/dev/direct/doc/ru/concepts/register). - Network accessline 116
https://oauth.yandex.ru/authorize?response_type=token&client_id=CLIENT_ID - Access to secretsline 120
[Credential-related source omitted] - Network accessline 124
Этот способ подходит для собственного скрипта или небольшого числа представителей одного бизнеса. Для приложения с широкой аудиторией нужен удобный процесс авторизации пользователей. [Получение токена вручную](https://yandex.ru/dev/id/doc/r - Network accessline 125
одного бизнеса. Для приложения с широкой аудиторией нужен удобный процесс авторизации пользователей. [Получение токена вручную](https://yandex.ru/dev/id/doc/ru/tokens/debug-token), [варианты авторизации Директа](https://yandex.ru/dev/direct - Network accessline 126
авторизации пользователей. [Получение токена вручную](https://yandex.ru/dev/id/doc/ru/tokens/debug-token), - Network accessline 127
[варианты авторизации Директа](https://yandex.ru/dev/direct/doc/ru/concepts/auth-token).
plugins/yandex-direct/skills/yandex-direct/config/README.md
- Network accessline 17
посмотреть в выводе `accounts.py` или взять из параметра `ulogin` в адресе открытого кабинета. Например, для `https://direct.yandex.ru/dna/grid/campaigns?ulogin=client-shop` настройка такая: - Network accessline 19
`https://direct.yandex.ru/dna/grid/campaigns?ulogin=client-shop` настройка такая:
plugins/yandex-direct/skills/yandex-direct/references/AD_CONTENT.md
- Network accessline 41
Перед продвижением товара с особыми условиями откройте актуальные [требования по тематикам](https://yandex.ru/support/direct/ru/moderation/special-categories) и [список ограниченных категорий](https://yandex.ru/support/direct/ru/moderation/ - Network accessline 53
Машиночитаемый перечень требований и источников сохранён в [ad_content.json](ad_content.json). Актуальные правила оформления: [справка Яндекс Директа](https://yandex.ru/support/direct/ru/moderation/ad-rules).
plugins/yandex-direct/skills/yandex-direct/references/API_MAP.md
- Network accessline 7
Основной JSON API: `https://api.direct.yandex.com/json/v501/{service}`. Reports: `https://api.direct.yandex.com/json/v5/reports`. Используйте документированный адрес нужного сервиса. Существование другого отвечающего адреса не гарантирует о - Network accessline 13
| Сервис | Назначение | Методы | |---|---|---| | [AdExtensions](https://yandex.ru/dev/direct/doc/ru/adextensions/adextensions) | Работа с расширениями к объявлениям. В настоящее время доступен один тип расширения — уточнение. | `add`, `dele - Network accessline 14
|---|---|---| | [AdExtensions](https://yandex.ru/dev/direct/doc/ru/adextensions/adextensions) | Работа с расширениями к объявлениям. В настоящее время доступен один тип расширения — уточнение. | `add`, `delete`, `get` | | [AdGroups](https:/ - Network accessline 15
| [AdExtensions](https://yandex.ru/dev/direct/doc/ru/adextensions/adextensions) | Работа с расширениями к объявлениям. В настоящее время доступен один тип расширения — уточнение. | `add`, `delete`, `get` | - Network accessline 16
| [AdGroups](https://yandex.ru/dev/direct/doc/ru/adgroups/adgroups) | Работа с группами объявлений. | `add`, `delete`, `get`, `update` | - Network accessline 17
| [AdImages](https://yandex.ru/dev/direct/doc/ru/adimages/adimages) | Работа с изображениями. | `add`, `delete`, `get` | - Network accessline 18
| [Ads](https://yandex.ru/dev/direct/doc/ru/ads/ads) | Работа с объявлениями. | `add`, `archive`, `delete`, `get`, `moderate`, `resume`, `suspend`, `unarchive`, `update` | - Network accessline 19
| [AdVideos](https://yandex.ru/dev/direct/doc/ru/advideos/advideos) | Работа с видео. | `add`, `get` | - Network accessline 20
| [AgencyClients](https://yandex.ru/dev/direct/doc/ru/agencyclients/agencyclients) | Сервис предназначен для агентств и позволяет управлять клиентами агентства. | `add` (снят), `addPassportOrganization`, `addPassportOrganizationMember`, `ge - Network accessline 21
| [AudienceTargets](https://yandex.ru/dev/direct/doc/ru/audiencetargets/audiencetargets) | Работа с условиями нацеливания на аудиторию. | `add`, `delete`, `get`, `resume`, `setBids`, `suspend` | - Network accessline 22
| [Bids](https://yandex.ru/dev/direct/doc/ru/bids/bids) | Сервис предназначен для назначения ставок ключевым фразам и автотаргетингам. | `get`, `set`, `setAuto` | - Network accessline 23
| [Businesses](https://yandex.ru/dev/direct/doc/ru/businesses/businesses) | Сервис позволяет получить профили организаций бизнеса. | `get` | - Network accessline 24
| [BidModifiers](https://yandex.ru/dev/direct/doc/ru/bidmodifiers/bidmodifiers) | Сервис предназначен для управления корректировками ставок. | `add`, `delete`, `get`, `set` | - Network accessline 25
| [Campaigns](https://yandex.ru/dev/direct/doc/ru/campaigns/campaigns) | Работа с кампаниями. | `add`, `archive`, `delete`, `get`, `resume`, `suspend`, `unarchive`, `update` | - Network accessline 26
| [Changes](https://yandex.ru/dev/direct/doc/ru/changes/changes) | Сервис предназначен для проверки наличия изменений. | `checkDictionaries`, `checkCampaigns`, `check` | - Network accessline 27
| [Clients](https://yandex.ru/dev/direct/doc/ru/clients/clients) | Сервис предназначен для управления параметрами рекламодателя и настройками пользователя — представителя рекламодателя, а также для получения параметров агентства и настроек - Network accessline 28
| [Creatives](https://yandex.ru/dev/direct/doc/ru/creatives/creatives) | Работа с креативами. | `add`, `get` | - Network accessline 29
| [Dictionaries](https://yandex.ru/dev/direct/doc/ru/dictionaries/dictionaries) | Сервис предназначен для получения справочных данных: регионов, часовых поясов, курсов валют, станций метрополитена, ограничений на значения параметров и др. | - Network accessline 30
| [Feeds](https://yandex.ru/dev/direct/doc/ru/feeds/feeds) | Работа с фидами. | `add`, `delete`, `get`, `update` | - Network accessline 31
| [KeywordBids](https://yandex.ru/dev/direct/doc/ru/keywordbids/keywordbids) | Сервис предназначен для назначения ставок ключевым фразам и автотаргетингам и для получения данных, полезных при назначении ставок. | `get`, `set`, `setAuto` | - Network accessline 32
| [Keywords](https://yandex.ru/dev/direct/doc/ru/keywords/keywords) | Работа с ключевыми фразами и автотаргетингами. | `add`, `delete`, `get`, `resume`, `suspend`, `update` | - Network accessline 33
| [KeywordsResearch](https://yandex.ru/dev/direct/doc/ru/keywordsresearch/keywordsresearch) | Сервис предназначен для предварительной обработки и исследования ключевых фраз. | `deduplicate`, `hasSearchVolume` | - Network accessline 34
| [Leads](https://yandex.ru/dev/direct/doc/ru/leads/leads) | Сервис позволяет получить данные, введенные пользователями в формы на Турбо-страницах. | `get` | - Network accessline 35
| [NegativeKeywordSharedSets](https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/negativekeywordsharedsets) | Работа с наборами минус-фраз. | `add`, `delete`, `get`, `update` | - Network accessline 36
| [RetargetingLists](https://yandex.ru/dev/direct/doc/ru/retargetinglists/retargetinglists) | Работа с условиями ретаргетинга и подбора аудитории. | `add`, `delete`, `get`, `update` | - Network accessline 37
| [Sitelinks](https://yandex.ru/dev/direct/doc/ru/sitelinks/sitelinks) | Работа с наборами быстрых ссылок. | `add`, `delete`, `get` | - Network accessline 38
| [Strategies](https://yandex.ru/dev/direct/doc/ru/strategies/strategies) | Работа с пакетными стратегиями. | `add`, `archive`, `get`, `unarchive`, `update` | - Network accessline 39
| [TurboPages](https://yandex.ru/dev/direct/doc/ru/turbopages/turbopages) | Сервис позволяет получить параметры Турбо-страниц. | `get` | - Network accessline 53
Вызовы Live v4 идут на `https://api.direct.yandex.com/live/v4/json/`; некоторые методы используют `/v4/json/`. Устаревшее управление кампаниями, объявлениями и ставками не заменяет v501. - Network accessline 75
Источники: [справочник v5](https://yandex.ru/dev/direct/doc/ru/), [методы v4](https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/_AllMethods).
plugins/yandex-direct/skills/yandex-direct/references/API_OBJECTS.md
- Network accessline 324
Необязательность `DefaultTexts` у `ShoppingAdUpdate` и `ListingAdUpdate` проверена по `minOccurs=0` в [схеме v501](https://api.direct.yandex.com/v501/ads?wsdl): таблица `Ads.update` - Network accessline 325
проверена по `minOccurs=0` в [схеме v501](https://api.direct.yandex.com/v501/ads?wsdl): таблица `Ads.update` помечает поле обязательным, но схема допускает частичное обновление без него. - Network accessline 326
[схеме v501](https://api.direct.yandex.com/v501/ads?wsdl): таблица `Ads.update` - Network accessline 782
**Уточнения.** `AdExtensions` умеет добавлять, читать и удалять уточнения; редактирование текста требует нового объекта и перепривязки. Длина одного уточнения — до 25 символов, к объявлению привязывается до 50. Общая длина показанных уточне - Network accessline 790
Актуальные определения: [справочник API Директа](https://yandex.ru/dev/direct/doc/ru/), [метод Ads.update](https://yandex.ru/dev/direct/doc/ru/ads/update).
plugins/yandex-direct/skills/yandex-direct/references/AUTOTARGETING.md
- Network accessline 117
Источники: [автотаргетинг](https://yandex.ru/support/direct/ru/impression-criteria/autotargeting), - Network accessline 118
[создание группы ЕПК](https://yandex.ru/support/direct/ru/unified-performance-campaign/create-group), - Network accessline 119
[Keywords.add](https://yandex.ru/dev/direct/doc/ru/keywords/add), - Network accessline 120
[Keywords.update](https://yandex.ru/dev/direct/doc/ru/keywords/update), - Network accessline 121
[поля Reports API](https://yandex.ru/dev/direct/doc/ru/report-format).
plugins/yandex-direct/skills/yandex-direct/references/BUDGETS.md
- Network accessline 65
Путь и отображение текущей суммы описаны в [гиде по интерфейсу](https://yandex.ru/support/direct/ru/new-interface/guide). - Network accessline 71
Связь проверена 11.09.2026 в рублёвом тестовом кабинете: запись `Amount = 7000` дала **49 000 ₽ в неделю** в интерфейсе, снятие вернуло `null` в API. [Справка API](https://yandex.ru/dev/direct/doc/dg-v4/ru/live/AccountManagement_Update.html - Network accessline 73
**Повторная проверка — раз в три календарных месяца.** Порядок, результаты и следующая дата ведутся в [issue №170](https://github.com/artwist-polyakov/polyakov-claude-skills/issues/170). На разрешённом тестовом кабинете сравни исходный `Acc - Network accessline 79
- Для рублей минимум — 7000 ₽ в неделю. Команда получает `MinimumAccountDailyBudget` из [справочника валют](https://yandex.ru/dev/direct/doc/ru/dictionaries/get), переводит из микроединиц в валюту счёта и умножает на семь: `минимум за недел - Network accessline 86
Механика и актуальные ограничения: [общий счёт](https://www.yandex.ru/support/direct/ru/payments/shared-account). Поэтому недельное ограничение не заменяет контроль фактического расхода за календарный месяц. - Network accessline 112
При оплате за клики возможен перенос неиспользованного остатка прошлой недели, но не более 30% установленного недельного бюджета: расход отдельной недели может достигать 130% заданной суммы. Доля расхода за день зависит от расписания кампан - Network accessline 114
Для бюджета на период суточный ориентир динамический: `оставшаяся сумма / оставшиеся дни показов`; он может быть превышен на 30%. Даты, автопродление и текущие ограничения проверяй перед настройкой. [Бюджет на период](https://yandex.ru/supp
plugins/yandex-direct/skills/yandex-direct/references/CHANGES.md
- Network accessline 129
python3 scripts/ads_write.py ad create --account example --group 12345 \ --title 'Кровельные материалы' --text 'Выберите материалы для вашего дома.' \ --href https://example.com/ --image HASH --apply - Network accessline 131
--href https://example.com/ --image HASH --apply - Network accessline 159
Описание API: [загрузка](https://yandex.ru/dev/direct/doc/ru/adimages/add), - Network accessline 160
[чтение](https://yandex.ru/dev/direct/doc/ru/adimages/get), - Network accessline 161
[требования к изображениям](https://yandex.ru/dev/direct/doc/ru/objects/adimage).
plugins/yandex-direct/skills/yandex-direct/references/ERRORS_AND_LIMITS.md
- Network accessline 535
Источники: [ограничения API](https://yandex.ru/dev/direct/doc/ru/concepts/restrictions), [справочник API](https://yandex.ru/dev/direct/doc/ru/).
plugins/yandex-direct/skills/yandex-direct/references/EXTENSIONS.md
- Network accessline 56
[ {"Title": "Каталог", "Href": "https://example.com/catalog", "Description": "Выберите подходящую модель"}, - Network accessline 57
{"Title": "Каталог", "Href": "https://example.com/catalog", "Description": "Выберите подходящую модель"}, - Network accessline 58
{"Title": "Доставка", "Href": "https://example.com/delivery"} - Network accessline 148
Контракты API: [быстрые ссылки](https://yandex.ru/dev/direct/doc/ru/objects/sitelink), - Network accessline 149
[уточнения](https://yandex.ru/dev/direct/doc/ru/objects/adextension), - Network accessline 150
[изменение объявления](https://yandex.ru/dev/direct/doc/ru/ads/update).
plugins/yandex-direct/skills/yandex-direct/references/FEEDS.md
- Network accessline 29
uv run scripts/feeds.py get --account example --feed 123 --no-cache --json uv run scripts/feeds.py add --account example --name 'Каталог товаров' \ --business-type RETAIL --url https://example.com/catalog.xml - Network accessline 30
uv run scripts/feeds.py add --account example --name 'Каталог товаров' --business-type RETAIL --url https://example.com/catalog.xml - Network accessline 31
--business-type RETAIL --url https://example.com/catalog.xml - Network accessline 33
--business-type RETAIL --file catalog.xml uv run scripts/feeds.py update --account example --feed 123 \ --url https://example.com/catalog-new.xml --remove-utm-tags YES - Network accessline 34
uv run scripts/feeds.py update --account example --feed 123 --url https://example.com/catalog-new.xml --remove-utm-tags YES - Network accessline 35
--url https://example.com/catalog-new.xml --remove-utm-tags YES - Network accessline 191
Справка: [Feeds](https://yandex.ru/dev/direct/doc/ru/feeds/feeds), - Network accessline 192
[требования к фиду](https://yandex.ru/dev/direct/doc/ru/objects/feed), - Network accessline 193
[Ads.add](https://yandex.ru/dev/direct/doc/ru/ads/add), - Network accessline 194
[Ads.update](https://yandex.ru/dev/direct/doc/ru/ads/update), - Network accessline 195
[правила отбора](https://yandex.ru/dev/direct/doc/ru/objects/ad).
plugins/yandex-direct/skills/yandex-direct/references/GOALS.md
- Network accessline 25
`PackageBiddingStrategy`. Для пакетной стратегии цели меняются у пакета и затрагивают связанные кампании; эта команда пакет не редактирует и кампанию не отвязывает. См. [описание пакетных стратегий](https://yandex.ru/dev/direct/doc/ru/objec - Network accessline 27
не отвязывает. См. [описание пакетных стратегий](https://yandex.ru/dev/direct/doc/ru/objects/strategy). - Network accessline 54
проверь каждый его элемент. Если состав нужно очистить, подготовь полную замену списка; добавление новой полезной цели само по себе не убирает старые мусорные. Описание: [параметры ЕПК](https://yandex.ru/dev/direct/doc/ru/campaigns/get-unif - Network accessline 56
Описание: [параметры ЕПК](https://yandex.ru/dev/direct/doc/ru/campaigns/get-unified-campaign). - Network accessline 60
Ценность, маржа и целевая цена — разные суммы. При смене режима согласуй их смысл и значения; не переноси прежнюю ценность в новую цену автоматически. Правила полей: [изменение ЕПК](https://yandex.ru/dev/direct/doc/ru/campaigns/update-unifi - Network accessline 62
Правила полей: [изменение ЕПК](https://yandex.ru/dev/direct/doc/ru/campaigns/update-unified-campaign). - Network accessline 88
если цели или стратегия изменились после исходного чтения. Предел — 30 целей; для двух стратегий `*_MULTIPLE_GOALS` минимум проверяется по итоговому списку. См. [изменение текстовой кампании](https://yandex.ru/dev/direct/doc/ru/campaigns/up - Network accessline 90
по итоговому списку. См. [изменение текстовой кампании](https://yandex.ru/dev/direct/doc/ru/campaigns/update-text-campaign).
plugins/yandex-direct/skills/yandex-direct/references/MANUAL_SETUP.md
- Network accessline 23
Этот пример подходит, когда нужна автоматическая кампания для получения выбранных пользователем целевых действий на сайте. Текущие команды скилла не создают такие кампании; статистику после создания можно получать через Reports. Возможности - Network accessline 40
У каждого текста должны быть понятное предложение и следующий шаг для клиента. Ссылки должны вести к соответствующим товарам, услугам или условиям. Перепроверьте сочетания заголовков, текста и изображений: каждое должно сохранять смысл и де - Network accessline 44
Откройте нужный счётчик в Метрике и проверьте домен. Если счётчика ещё нет, нажмите **Добавить счётчик**, заполните сведения о сайте и установите полученный код на его страницы. В разделе **Настройка → Счётчик → Скопировать** доступен код д - Network accessline 46
Если Метрика и Директ используют разные логины, владелец счётчика открывает **Настройки → Доступ → Индивидуальный доступ → Добавить пользователя**, вводит нужный логин, выбирает соответствующие задаче права и сохраняет изменения. Для просмо - Network accessline 60
Если нужна новая цель, в Метрике откройте **Цели → Добавить цель → Целевое событие**. Задайте понятное название и идентификатор события, например `lead_accepted` для принятой заявки. Выберите точное совпадение идентификатора и сохраните цел - Network accessline 68
Если подтверждённая оплата известна только системе учёта заказов, настройте передачу оттуда. В Метрике данные из CRM могут создавать отдельные цели, включая оплаченный заказ. Выберите именно нужный статус. [Загрузка данных из CRM](https://y - Network accessline 72
1. Откройте сайт с параметром `_ym_debug=2`: например, `https://example.com/?_ym_debug=2`. Если в адресе уже есть параметры, добавьте `&_ym_debug=2`. - Network accessline 73
2. Выполните целевое действие и проверьте в отладчике Метрики нужный счётчик и событие. При включённом исключении собственных визитов используйте приватное окно. [Официальная проверка цели](https://yandex.ru/support/metrica/ru/general/check - Network accessline 75
4. Найдите цель по имени или ID в разделе **Конверсии** Метрики, задайте период проверки и проверьте достижения и целевые визиты. Данные появляются после обработки. [Отчёт «Конверсии»](https://yandex.ru/support/metrica/ru/reports/conversion - Network accessline 81
В Директе откройте **Добавить → Кампанию → Мастер кампаний → Конверсии и трафик** и укажите подготовленную ссылку. Заполните объявления, **Быстрые ссылки**, регион и время показов. В **Аудитория** выберите подходящий режим: **Подобрать опти - Network accessline 85
Мастер выбирает места показов автоматически. Если нужны выбор размещений или исключение площадок, подберите другой инструмент до запуска. [Возможности размещения](https://yandex.ru/support/direct/ru/campaign-master/site). - Network accessline 89
В **Цель продвижения** выберите **Максимум целевых действий**. Добавьте счётчик, выбранные **Целевые действия** и их цены. Проверьте автоматически добавленные цели Карт, если подключена организация. [Цели кампании](https://yandex.ru/support - Network accessline 98
Сопоставьте режим оплаты с выбранными событиями. Если заявка и оплата могут произойти в одном визите, заранее объясните последствия выбора обеих целей. [Режимы оплаты Мастера](https://yandex.ru/support/direct/ru/campaign-master/site). - Network accessline 102
Если рассматривается **Адаптация бюджета**, отдельно укажите допустимое увеличение и верхнюю границу расходов. Эта настройка может увеличить бюджет следующей недели, поэтому её нельзя включать молча при фиксированном бюджете пользователя. [ - Network accessline 104
Слишком низкая целевая цена способна ограничить число результатов. Для первого вывода о работе автоматической стратегии Яндекс рекомендует 7–14 дней; отслеживание технических ошибок начинают сразу. [Как работает «Максимум конверсий»](https: - Network accessline 122
**Создать кампанию** отправляет её на модерацию; **Сохранить как черновик** сохраняет подготовку. Показы могут начаться после одобрения при наличии денег. [Модерация и запуск](https://yandex.ru/support/direct/ru/campaign-master/site). Если - Network accessline 128
Откройте **Статистика** под названием кампании либо **Статистика → Мастер отчётов**. Задайте фактические даты работы и те же ценные цели. [Мастер отчётов Директа](https://yandex.ru/support/direct/ru/statistics/new-reports-wizard).
plugins/yandex-direct/skills/yandex-direct/references/PLACEMENTS.md
- Network accessline 114
Проверено по официальной документации 17.09.2026: [создание ЕПК](https://yandex.ru/dev/direct/doc/ru/campaigns/add-unified-campaign), - Network accessline 115
[создание ЕПК](https://yandex.ru/dev/direct/doc/ru/campaigns/add-unified-campaign), - Network accessline 116
[изменение ЕПК](https://yandex.ru/dev/direct/doc/ru/campaigns/update-unified-campaign), - Network accessline 117
[чтение ЕПК](https://yandex.ru/dev/direct/doc/ru/campaigns/get-unified-campaign), - Network accessline 118
[сохранение неназванных параметров при изменении](https://yandex.ru/dev/direct/doc/ru/modify).
plugins/yandex-direct/skills/yandex-direct/references/PLAYBOOK.md
- Network accessline 85
Если пользователь предпочитает `AUTO`, а в кампании стоит `LC`, можно предложить перейти на `AUTO` и в настройках кампании. Объясните последствия: стратегия будет использовать иначе рассчитанные конверсии и адаптировать прогноз, а при оплат - Network accessline 152
В API поле группы `ServingStatus=RARELY_SERVED` называется «Мало показов»: при текущих условиях показы крайне редки, например из-за отсутствия спроса на фразы. Это свойство группы, отдельное от модерации `Status`. Значение `ELIGIBLE` означа - Network accessline 164
Если спрос раздроблен по множеству однотипных товарных групп, предложите [общую группу с шаблоном и параметрами ссылки](TEMPLATES.md#редкие-товарные-запросы-в-общей-группе). Это способ собрать спрос и сохранить переходы на нужные товары; он - Network accessline 230
Для новой семантики и оценки спроса используйте соседний [скилл Вордстата](https://github.com/artwist-polyakov/polyakov-claude-skills/tree/main/plugins/yandex-wordstat/skills/yandex-wordstat). Если его нет или доступ не настроен, назовите э - Network accessline 291
Для решения по мобильным используйте [скилл Метрики](https://github.com/artwist-polyakov/polyakov-claude-skills/tree/main/plugins/yandex-metrika/skills/yandex-metrika): взаимодействие с сайтом, достижение ценных целей и пригодность мобильно
plugins/yandex-direct/skills/yandex-direct/references/PREVIEW.md
- Network accessline 26
uv run scripts/preview.py matrix --brief brief.json --image-url https://example.com/banner.jpg - Network accessline 80
Для просмотра настоящего размещения используйте [«Нацелиться на объявление»](https://yandex.ru/support/direct/ru/impressions/view-ad) в кабинете, когда объявление прошло модерацию и кампания работает.
plugins/yandex-direct/skills/yandex-direct/references/REPORTS.md
- Network accessline 13
Список приходит из `GetStatGoals` по выбранной кампании. Без `--campaign` опрашиваются неархивные кампании кабинета. Сегменты ретаргетинга в список целей статистики не добавляются. Метод работает в версии Live 4, как указано в [таблице соот - Network accessline 69
Сначала определите историю: квартал или последние 180 дней. Затем выберите недавний период для проверки позиций, обычно 14–30 полных дней. Назовите оба периода в ответе. Поисковые запросы доступны только за последние 180 дней; календарное п - Network accessline 93
`AvgImpressionPosition` — средняя позиция показа, `AvgClickPosition` — средняя позиция клика; обе учитывают первую страницу поиска, позиция 1 — самая высокая. `AvgTrafficVolume` описывает средний объём трафика с занятых позиций. Это не проц - Network accessline 95
`Slot=PREMIUMBLOCK` означает спецразмещение. Его доля — показы этого блока / все показы выбранного условия на поиске × 100%. `ALONE` и остальные блоки показывайте отдельно. Такая доля описывает фактические показы, а не долю всех доступных а - Network accessline 148
`--attribution`. Это относится и к `--traffic-only`, и к расходу в аудите объявлений: для показов, кликов и расхода модель не нужна. [Параметры отчёта](https://yandex.ru/dev/direct/doc/ru/spec). - Network accessline 150
[Параметры отчёта](https://yandex.ru/dev/direct/doc/ru/spec). - Network accessline 152
Один визит может достичь нескольких целей. Покажите каждую цель отдельно: сумма конверсий по целям не равна числу уникальных клиентов или заявок. CPA каждой цели — расход / конверсии этой цели. Доход по выбранным целям тоже не складывайте б
plugins/yandex-direct/skills/yandex-direct/references/RETARGETING.md
- Network accessline 111
Документация API: [доступные цели и сегменты](https://yandex.ru/dev/direct/doc/dg-v4/ru/live/GetRetargetingGoals.html), - Network accessline 112
[создание условия](https://yandex.ru/dev/direct/doc/ru/retargetinglists/add), - Network accessline 113
[чтение правил и доступности](https://yandex.ru/dev/direct/doc/ru/retargetinglists/get). - Network accessline 114
Правила применения: [корректировки](https://yandex.ru/dev/direct/doc/ru/objects/bidmodifier), - Network accessline 115
[сегменты на Поиске и в РСЯ](https://yandex.ru/support/direct/ru/impression-criteria/retargeting-lists).
plugins/yandex-direct/skills/yandex-direct/references/TEMPLATES.md
- Network accessline 31
Значения принадлежат ключевой фразе, а не объявлению. Они используются в основной ссылке, например `https://example.ru/catalog/{param1}/`. Для каждой фразы нужно установить собственное значение, до 255 символов. Пустой параметр оставляет пу - Network accessline 44
#Высоковольтные измерители# — подбор https://example.com/catalog/{param1}/ - Network accessline 45
https://example.com/catalog/{param1}/ - Network accessline 50
| Ключевая фраза | Значение `param1` | Заголовок после подстановки | Страница перехода | |---|---|---|---| | вольтметр ВН-10 | vn-10 | вольтметр ВН-10 — подбор | `https://example.com/catalog/vn-10/` | - Network accessline 51
|---|---|---|---| | вольтметр ВН-10 | vn-10 | вольтметр ВН-10 — подбор | `https://example.com/catalog/vn-10/` | | киловольтметр ВН-20 | vn-20 | киловольтметр ВН-20 — подбор | `https://example.com/catalog/vn-20/` | - Network accessline 52
| вольтметр ВН-10 | vn-10 | вольтметр ВН-10 — подбор | `https://example.com/catalog/vn-10/` | - Network accessline 53
| киловольтметр ВН-20 | vn-20 | киловольтметр ВН-20 — подбор | `https://example.com/catalog/vn-20/` | - Network accessline 61
Механика и ограничения: [шаблоны объявлений](https://yandex.ru/support/direct/ru/features/ad-templates), [параметры фраз и объединение групп](https://yandex.ru/support/direct/ru/statistics/use-url-tags). - Network accessline 74
https://example.ru/catalog/{param1}/?q=#okna#&utm_term={keyword}
plugins/yandex-direct/skills/yandex-direct/references/UI_MAP.md
- Network accessline 15
| Куда перейти | Формат ссылки | |---|---| | Группы выбранной кампании | `https://direct.yandex.ru/dna/grid/groups?ulogin=LOGIN&campaigns-ids=ID` | - Network accessline 16
|---|---| | Группы выбранной кампании | `https://direct.yandex.ru/dna/grid/groups?ulogin=LOGIN&campaigns-ids=ID` | | Настройки выбранной кампании | `https://direct.yandex.ru/dna/campaigns-edit?ulogin=LOGIN&campaigns-ids=ID` | - Network accessline 17
| Группы выбранной кампании | `https://direct.yandex.ru/dna/grid/groups?ulogin=LOGIN&campaigns-ids=ID` | - Network accessline 18
| Настройки выбранной кампании | `https://direct.yandex.ru/dna/campaigns-edit?ulogin=LOGIN&campaigns-ids=ID` | - Network accessline 19
| Кампании кабинета | `https://direct.yandex.ru/dna/grid/campaigns?ulogin=LOGIN&filter-reset=true&stat-preset=last30Days&dim-filter=CPC_AND_CPM&status-filter=ALL_EXCEPT_ARCHIVED` | - Network accessline 131
| Минус-фразы | до 20 000 символов на кампанию; плюс до 3 наборов из библиотеки | | Приоритизация объявлений | «С лучшим сочетанием показателей» (по умолчанию) или «По фразе, наиболее близкой к запросу» | | Расширенный географический таргет - Network accessline 132
| Приоритизация объявлений | «С лучшим сочетанием показателей» (по умолчанию) или «По фразе, наиболее близкой к запросу» | | Расширенный географический таргетинг — **убран** | **блока больше нет**: обновление геотаргетинга сняло настройку и - Network accessline 133
| Расширенный географический таргетинг — **убран** | **блока больше нет**: обновление геотаргетинга сняло настройку из кампаний (, 01.09.2026) — «настройка расширенного географического таргетинга больше неактуальна и стала недоступна в камп
plugins/yandex-direct/skills/yandex-direct/references/ZOOMKIT.md
- Network accessline 40
По [официальной справке](https://zoomkit.ru/help), проверенной 8 сентября 2026 года, - Network accessline 42
Для одного кабинета за 30 дней: `(50 + 2 × 1) × 30 = 1560 ₽`. С учётом добавляемых при пополнении 6% это около 1654 ₽ к оплате ([пункт 4.7 оферты](https://zoomkit.ru/docs/offer.pdf)). - Network accessline 43
С учётом добавляемых при пополнении 6% это около 1654 ₽ к оплате ([пункт 4.7 оферты](https://zoomkit.ru/docs/offer.pdf)). Тариф проверки ссылок отдельно этим числом не подтверждён. - Network accessline 44
([пункт 4.7 оферты](https://zoomkit.ru/docs/offer.pdf)). - Network accessline 75
Скилл находится в этом же репозитории: `plugins/zoomkit/skills/zoomkit/SKILL.md`. [Открытый исходный код и инструкция](https://github.com/artwist-polyakov/polyakov-claude-skills/tree/main/plugins/zoomkit/skills/zoomkit). - Network accessline 77
[Открытый исходный код и инструкция](https://github.com/artwist-polyakov/polyakov-claude-skills/tree/main/plugins/zoomkit/skills/zoomkit). - Network accessline 97
Передай контекст: рекламодатель, ID кампаний, задача, выбранные цели, ограничения бюджета/ставок и нужная частота. Подключение начни с понятного объяснения пользы и цены; регистрация доступна на [zoomkit.ru/register](https://zoomkit.ru/regi - Network accessline 98
бюджета/ставок и нужная частота. Подключение начни с понятного объяснения пользы и цены; регистрация доступна на [zoomkit.ru/register](https://zoomkit.ru/register). Ключ сохраняется в `config/.env` самого ZoomKit и не передаётся в диалог. - Network accessline 99
и цены; регистрация доступна на [zoomkit.ru/register](https://zoomkit.ru/register).
plugins/yandex-direct/skills/yandex-direct/references/ad_content.json
- Network accessline 7
"general_adv_rules": { "title": "Общие положения. Требования к рекламно-информационным материалам", "url": "https://yandex.ru/legal/general_adv_rules/", - Network accessline 8
"title": "Общие положения. Требования к рекламно-информационным материалам", "url": "https://yandex.ru/legal/general_adv_rules/", "kind": "legal", - Network accessline 9
"url": "https://yandex.ru/legal/general_adv_rules/", - Network accessline 16
"direct_adv_rules": { "title": "Требования к рекламным материалам", "url": "https://yandex.ru/legal/direct_adv_rules/", - Network accessline 17
"title": "Требования к рекламным материалам", "url": "https://yandex.ru/legal/direct_adv_rules/", "kind": "legal", - Network accessline 18
"url": "https://yandex.ru/legal/direct_adv_rules/", - Network accessline 25
"help_ad_rules": { "title": "Как правильно оформить объявление", "url": "https://yandex.ru/support/direct/ru/moderation/ad-rules", - Network accessline 26
"title": "Как правильно оформить объявление", "url": "https://yandex.ru/support/direct/ru/moderation/ad-rules", "kind": "help", - Network accessline 27
"url": "https://yandex.ru/support/direct/ru/moderation/ad-rules", - Network accessline 34
"help_special_categories": { "title": "Тематики продвижения", "url": "https://yandex.ru/support/direct/ru/moderation/special-categories", - Network accessline 35
"title": "Тематики продвижения", "url": "https://yandex.ru/support/direct/ru/moderation/special-categories", "kind": "help", - Network accessline 36
"url": "https://yandex.ru/support/direct/ru/moderation/special-categories", - Network accessline 43
"help_restricted_categories": { "title": "Запрещенные товары, услуги, интернет-ресурсы и методы продвижения", "url": "https://yandex.ru/support/direct/ru/moderation/restricted-categories", - Network accessline 44
"title": "Запрещенные товары, услуги, интернет-ресурсы и методы продвижения", "url": "https://yandex.ru/support/direct/ru/moderation/restricted-categories", "kind": "help", - Network accessline 45
"url": "https://yandex.ru/support/direct/ru/moderation/restricted-categories", - Network accessline 52
"help_moderation_faq": { "title": "Вопросы и ответы по модерации", "url": "https://yandex.ru/support/direct/ru/troubleshooting/moderation", - Network accessline 53
"title": "Вопросы и ответы по модерации", "url": "https://yandex.ru/support/direct/ru/troubleshooting/moderation", "kind": "help", - Network accessline 54
"url": "https://yandex.ru/support/direct/ru/troubleshooting/moderation", - Network accessline 61
"help_age_alerts": { "title": "Предупреждения и возрастные ограничения в объявлениях", "url": "https://yandex.ru/support/direct/ru/moderation/age-alerts", - Network accessline 62
"title": "Предупреждения и возрастные ограничения в объявлениях", "url": "https://yandex.ru/support/direct/ru/moderation/age-alerts", "kind": "help", - Network accessline 63
"url": "https://yandex.ru/support/direct/ru/moderation/age-alerts", - Network accessline 70
"help_ad_labeling": { "title": "Маркировка рекламы", "url": "https://yandex.ru/support/direct/ru/technologies-and-services/ad-labelingl", - Network accessline 71
"title": "Маркировка рекламы", "url": "https://yandex.ru/support/direct/ru/technologies-and-services/ad-labelingl", "kind": "help", - Network accessline 72
"url": "https://yandex.ru/support/direct/ru/technologies-and-services/ad-labelingl", - Network accessline 79
"adv_rules": { "title": "Правила размещения объявлений на Яндексе", "url": "https://yandex.ru/legal/adv_rules/", - Network accessline 80
"title": "Правила размещения объявлений на Яндексе", "url": "https://yandex.ru/legal/adv_rules/", "kind": "legal", - Network accessline 81
"url": "https://yandex.ru/legal/adv_rules/", - Network accessline 247
"detector": "email_in_text", "judged_by": "agent", "note": "Та же строка источника, что и у номера телефона, и признак у неё куда точнее — но решает и он не всё: подстрока «login@example.ru» в адресе вида «https://login@example. - Network accessline 248
"judged_by": "agent", "note": "Та же строка источника, что и у номера телефона, и признак у неё куда точнее — но решает и он не всё: подстрока «login@example.ru» в адресе вида «https://login@example.ru/path» имеет ту же форму и почтой - Network accessline 249
"note": "Та же строка источника, что и у номера телефона, и признак у неё куда точнее — но решает и он не всё: подстрока «login@example.ru» в адресе вида «https://login@example.ru/path» имеет ту же форму и почтой не является. Изъятие на это - Network accessline 671
"documents_required": { "count": 83, "url": "https://yandex.ru/support/direct/ru/moderation/special-categories", - Network accessline 672
"count": 83, "url": "https://yandex.ru/support/direct/ru/moderation/special-categories", "note": "Столько отдельных страниц тематик перечислял каталог на дату сверки; ссылок в нём вдвое больше — он повторяет перечень по темам и - Network accessline 673
"url": "https://yandex.ru/support/direct/ru/moderation/special-categories", - Network accessline 677
"restricted": { "count": 33, "url": "https://yandex.ru/support/direct/ru/moderation/restricted-categories", - Network accessline 678
"count": 33, "url": "https://yandex.ru/support/direct/ru/moderation/restricted-categories", "note": "Столько пунктов верхнего уровня перечисляла страница на ту же дату; у части пунктов есть вложенные уточнения, и они сюда не пос - Network accessline 679
"url": "https://yandex.ru/support/direct/ru/moderation/restricted-categories",
plugins/yandex-direct/skills/yandex-direct/references/api_map.json
- Network accessline 5
{ "title": "Справочник API v5 (полная выгрузка)", "url": "https://yandex.ru/dev/direct/doc/ru/llms-full.txt" - Network accessline 6
"title": "Справочник API v5 (полная выгрузка)", "url": "https://yandex.ru/dev/direct/doc/ru/llms-full.txt" }, - Network accessline 7
"url": "https://yandex.ru/dev/direct/doc/ru/llms-full.txt" - Network accessline 9
{ "title": "О справочнике", "url": "https://yandex.ru/dev/direct/doc/ru/concepts/about" - Network accessline 10
"title": "О справочнике", "url": "https://yandex.ru/dev/direct/doc/ru/concepts/about" }, - Network accessline 11
"url": "https://yandex.ru/dev/direct/doc/ru/concepts/about" - Network accessline 13
{ "title": "Ограничения, баллы", "url": "https://yandex.ru/dev/direct/doc/ru/concepts/units" - Network accessline 14
"title": "Ограничения, баллы", "url": "https://yandex.ru/dev/direct/doc/ru/concepts/units" }, - Network accessline 15
"url": "https://yandex.ru/dev/direct/doc/ru/concepts/units" - Network accessline 17
{ "title": "История изменений", "url": "https://yandex.ru/dev/direct/doc/ru/changelog" - Network accessline 18
"title": "История изменений", "url": "https://yandex.ru/dev/direct/doc/ru/changelog" }, - Network accessline 19
"url": "https://yandex.ru/dev/direct/doc/ru/changelog" - Network accessline 21
{ "title": "Методы API версии 4 и Live 4", "url": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/_AllMethods" - Network accessline 22
"title": "Методы API версии 4 и Live 4", "url": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/_AllMethods" } - Network accessline 23
"url": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/_AllMethods" - Network accessline 30
}, "endpoints": { "v501_json": "https://api.direct.yandex.com/json/v501/{service}", - Network accessline 31
"endpoints": { "v501_json": "https://api.direct.yandex.com/json/v501/{service}", "v501_soap": "https://api.direct.yandex.com/v501/{service}", - Network accessline 32
"v501_json": "https://api.direct.yandex.com/json/v501/{service}", - Network accessline 33
"v501_soap": "https://api.direct.yandex.com/v501/{service}", - Network accessline 34
"v501_wsdl": "https://api.direct.yandex.com/v501/{service}?wsdl", - Network accessline 35
"v5_json": "https://api.direct.yandex.com/json/v5/{service}", - Network accessline 36
"v4_json": "https://api.direct.yandex.ru/v4/json/", - Network accessline 37
"live_v4_json": "https://api.direct.yandex.ru/live/v4/json/", - Network accessline 38
"reports_json": "https://api.direct.yandex.com/json/v501/reports", - Network accessline 39
"reports_xml": "https://api.direct.yandex.com/v501/reports", - Network accessline 40
"reports_xsd": "https://api.direct.yandex.com/v501/reports.xsd", - Network accessline 41
"sandbox_json": "https://api-sandbox.direct.yandex.com/json/v5/{service}", - Network accessline 42
"sandbox_soap": "https://api-sandbox.direct.yandex.com/v5/{service}", - Network accessline 43
"sandbox_wsdl": "https://api-sandbox.direct.yandex.com/v5/{service}?wsdl", - Network accessline 44
"sandbox_v4_json": "https://api-sandbox.direct.yandex.ru/v4/json/" - Network accessline 47
"documented": [ { "url": "https://api-sandbox.direct.yandex.com/json/v5/{service}", - Network accessline 48
{ "url": "https://api-sandbox.direct.yandex.com/json/v5/{service}", "source": "https://yandex.ru/dev/direct/doc/en/concepts/sandbox", - Network accessline 49
"url": "https://api-sandbox.direct.yandex.com/json/v5/{service}", - Network accessline 50
"source": "https://yandex.ru/dev/direct/doc/en/concepts/sandbox", - Network accessline 52
}, { "url": "https://api-sandbox.direct.yandex.com/v5/{service}", - Network accessline 53
{ "url": "https://api-sandbox.direct.yandex.com/v5/{service}", "source": "https://yandex.ru/dev/direct/doc/en/concepts/sandbox", - Network accessline 54
"url": "https://api-sandbox.direct.yandex.com/v5/{service}", - Network accessline 55
"source": "https://yandex.ru/dev/direct/doc/en/concepts/sandbox", - Network accessline 57
}, { "url": "https://api-sandbox.direct.yandex.ru/v4/json/", - Network accessline 58
{ "url": "https://api-sandbox.direct.yandex.ru/v4/json/", "source": "https://yandex.ru/dev/direct/doc/dg-v4/ru/concepts/quick-start", - Network accessline 59
"url": "https://api-sandbox.direct.yandex.ru/v4/json/", - Network accessline 60
"source": "https://yandex.ru/dev/direct/doc/dg-v4/ru/concepts/quick-start", - Network accessline 64
"observed_only": [ { "url": "https://api-sandbox.direct.yandex.com/json/v501/{service}" - Network accessline 65
{ "url": "https://api-sandbox.direct.yandex.com/json/v501/{service}" }, - Network accessline 66
"url": "https://api-sandbox.direct.yandex.com/json/v501/{service}" - Network accessline 67
}, { "url": "https://api-sandbox.direct.yandex.ru/json/v5/{service}" - Network accessline 68
{ "url": "https://api-sandbox.direct.yandex.ru/json/v5/{service}" }, - Network accessline 69
"url": "https://api-sandbox.direct.yandex.ru/json/v5/{service}" - Network accessline 70
}, { "url": "https://api-sandbox.direct.yandex.ru/json/v501/{service}" - Network accessline 71
{ "url": "https://api-sandbox.direct.yandex.ru/json/v501/{service}" }, - Network accessline 72
"url": "https://api-sandbox.direct.yandex.ru/json/v501/{service}" - Network accessline 73
}, { "url": "https://api-sandbox.direct.yandex.com/v4/json/" - Network accessline 74
{ "url": "https://api-sandbox.direct.yandex.com/v4/json/" }, - Network accessline 75
"url": "https://api-sandbox.direct.yandex.com/v4/json/" - Network accessline 76
}, { "url": "https://api-sandbox.direct.yandex.com/live/v4/json/" - Network accessline 77
{ "url": "https://api-sandbox.direct.yandex.com/live/v4/json/" }, - Network accessline 78
"url": "https://api-sandbox.direct.yandex.com/live/v4/json/" - Network accessline 79
}, { "url": "https://api-sandbox.direct.yandex.ru/live/v4/json/" - Network accessline 80
{ "url": "https://api-sandbox.direct.yandex.ru/live/v4/json/" } - Network accessline 81
"url": "https://api-sandbox.direct.yandex.ru/live/v4/json/" - Network accessline 82
} ], "ru_page_v4": "https://yandex.ru/dev/direct/doc/dg-v4/ru/concepts/sandbox — русская страница песочницы есть, но адреса не приводит", - Network accessline 83
], "ru_page_v4": "https://yandex.ru/dev/direct/doc/dg-v4/ru/concepts/sandbox — русская страница песочницы есть, но адреса не приводит", "note": "Скилл использует настоящий API v501. Адреса песочницы сохранены как справочные; возможн - Network accessline 84
"ru_page_v4": "https://yandex.ru/dev/direct/doc/dg-v4/ru/concepts/sandbox — русская страница песочницы есть, но адреса не приводит", - Network accessline 97
"purpose": "Сервис предназначен для выполнения операций с расширениями к объявлениям. В настоящее время доступен один тип расширения — уточнение.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/adexte - Network accessline 98
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/adextensions/adextensions", "v501_note": null, - Network accessline 99
"doc": "https://yandex.ru/dev/direct/doc/ru/adextensions/adextensions", - Network accessline 112
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/adextensions/add" - Network accessline 113
}, "doc": "https://yandex.ru/dev/direct/doc/ru/adextensions/add" }, - Network accessline 114
"doc": "https://yandex.ru/dev/direct/doc/ru/adextensions/add" - Network accessline 126
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/adextensions/delete" - Network accessline 127
}, "doc": "https://yandex.ru/dev/direct/doc/ru/adextensions/delete" }, - Network accessline 128
"doc": "https://yandex.ru/dev/direct/doc/ru/adextensions/delete" - Network accessline 140
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/adextensions/get" - Network accessline 141
}, "doc": "https://yandex.ru/dev/direct/doc/ru/adextensions/get" } - Network accessline 142
"doc": "https://yandex.ru/dev/direct/doc/ru/adextensions/get" - Network accessline 149
"purpose": "Сервис предназначен для выполнения операций с группами объявлений.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/adgroups", - Network accessline 150
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/adgroups", "v501_note": "Для работы с группой в Единой перфоманс-кампании", - Network accessline 151
"doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/adgroups", - Network accessline 164
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/add" - Network accessline 165
}, "doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/add" }, - Network accessline 166
"doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/add" - Network accessline 178
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/delete" - Network accessline 179
}, "doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/delete" }, - Network accessline 180
"doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/delete" - Network accessline 192
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/get" - Network accessline 193
}, "doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/get" }, - Network accessline 194
"doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/get" - Network accessline 206
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/update" - Network accessline 207
}, "doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/update" } - Network accessline 208
"doc": "https://yandex.ru/dev/direct/doc/ru/adgroups/update" - Network accessline 215
"purpose": "Сервис предназначен для выполнения операций с изображениями.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/adimages/adimages", - Network accessline 216
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/adimages/adimages", "v501_note": null, - Network accessline 217
"doc": "https://yandex.ru/dev/direct/doc/ru/adimages/adimages", - Network accessline 230
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/adimages/add" - Network accessline 231
}, "doc": "https://yandex.ru/dev/direct/doc/ru/adimages/add" }, - Network accessline 232
"doc": "https://yandex.ru/dev/direct/doc/ru/adimages/add" - Network accessline 244
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/adimages/delete" - Network accessline 245
}, "doc": "https://yandex.ru/dev/direct/doc/ru/adimages/delete" }, - Network accessline 246
"doc": "https://yandex.ru/dev/direct/doc/ru/adimages/delete" - Network accessline 258
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/adimages/get" - Network accessline 259
}, "doc": "https://yandex.ru/dev/direct/doc/ru/adimages/get" } - Network accessline 260
"doc": "https://yandex.ru/dev/direct/doc/ru/adimages/get" - Network accessline 267
"purpose": "Сервис предназначен для выполнения операций с объявлениями.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/ads/ads", - Network accessline 268
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/ads/ads", "v501_note": "Для работы с товарными объявлениями", - Network accessline 269
"doc": "https://yandex.ru/dev/direct/doc/ru/ads/ads", - Network accessline 282
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/add" - Network accessline 283
}, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/add" }, - Network accessline 284
"doc": "https://yandex.ru/dev/direct/doc/ru/ads/add" - Network accessline 296
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/archive" - Network accessline 297
}, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/archive" }, - Network accessline 298
"doc": "https://yandex.ru/dev/direct/doc/ru/ads/archive" - Network accessline 310
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/delete" - Network accessline 311
}, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/delete" }, - Network accessline 312
"doc": "https://yandex.ru/dev/direct/doc/ru/ads/delete" - Network accessline 324
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/get" - Network accessline 325
}, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/get" }, - Network accessline 326
"doc": "https://yandex.ru/dev/direct/doc/ru/ads/get" - Network accessline 338
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/moderate" - Network accessline 339
}, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/moderate" }, - Network accessline 340
"doc": "https://yandex.ru/dev/direct/doc/ru/ads/moderate" - Network accessline 352
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/resume" - Network accessline 353
}, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/resume" }, - Network accessline 354
"doc": "https://yandex.ru/dev/direct/doc/ru/ads/resume" - Network accessline 366
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/suspend" - Network accessline 367
}, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/suspend" }, - Network accessline 368
"doc": "https://yandex.ru/dev/direct/doc/ru/ads/suspend" - Network accessline 380
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/unarchive" - Network accessline 381
}, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/unarchive" }, - Network accessline 382
"doc": "https://yandex.ru/dev/direct/doc/ru/ads/unarchive" - Network accessline 394
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/update" - Network accessline 395
}, "doc": "https://yandex.ru/dev/direct/doc/ru/ads/update" } - Network accessline 396
"doc": "https://yandex.ru/dev/direct/doc/ru/ads/update" - Network accessline 403
"purpose": "Сервис предназначен для выполнения операций с видео.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/advideos/advideos", - Network accessline 404
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/advideos/advideos", "v501_note": null, - Network accessline 405
"doc": "https://yandex.ru/dev/direct/doc/ru/advideos/advideos", - Network accessline 414
"v501_note": null, "units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/advideos/add" - Network accessline 415
"units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/advideos/add" }, - Network accessline 416
"doc": "https://yandex.ru/dev/direct/doc/ru/advideos/add" - Network accessline 424
"v501_note": null, "units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/advideos/get" - Network accessline 425
"units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/advideos/get" } - Network accessline 426
"doc": "https://yandex.ru/dev/direct/doc/ru/advideos/get" - Network accessline 433
"purpose": "Сервис предназначен для агентств и позволяет управлять клиентами агентства.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/agencyclients", - Network accessline 434
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/agencyclients", "v501_note": null, - Network accessline 435
"doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/agencyclients", - Network accessline 448
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/add" - Network accessline 449
}, "doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/add" }, - Network accessline 450
"doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/add" - Network accessline 458
"v501_note": null, "units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/addPassportOrganization" - Network accessline 459
"units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/addPassportOrganization" }, - Network accessline 460
"doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/addPassportOrganization" - Network accessline 468
"v501_note": null, "units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/addPassportOrganizationMember" - Network accessline 469
"units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/addPassportOrganizationMember" }, - Network accessline 470
"doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/addPassportOrganizationMember" - Network accessline 482
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/get" - Network accessline 483
}, "doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/get" }, - Network accessline 484
"doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/get" - Network accessline 496
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/update" - Network accessline 497
}, "doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/update" } - Network accessline 498
"doc": "https://yandex.ru/dev/direct/doc/ru/agencyclients/update" - Network accessline 505
"purpose": "Сервис предназначен для выполнения операций с условиями нацеливания на аудиторию.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/audiencetargets", - Network accessline 506
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/audiencetargets", "v501_note": null, - Network accessline 507
"doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/audiencetargets", - Network accessline 520
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/add" - Network accessline 521
}, "doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/add" }, - Network accessline 522
"doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/add" - Network accessline 534
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/delete" - Network accessline 535
}, "doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/delete" }, - Network accessline 536
"doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/delete" - Network accessline 548
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/get" - Network accessline 549
}, "doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/get" }, - Network accessline 550
"doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/get" - Network accessline 562
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/resume" - Network accessline 563
}, "doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/resume" }, - Network accessline 564
"doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/resume" - Network accessline 576
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/setBids" - Network accessline 577
}, "doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/setBids" }, - Network accessline 578
"doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/setBids" - Network accessline 590
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/suspend" - Network accessline 591
}, "doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/suspend" } - Network accessline 592
"doc": "https://yandex.ru/dev/direct/doc/ru/audiencetargets/suspend" - Network accessline 599
"purpose": "Сервис предназначен для назначения ставок ключевым фразам и автотаргетингам.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/bids/bids", - Network accessline 600
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/bids/bids", "v501_note": null, - Network accessline 601
"doc": "https://yandex.ru/dev/direct/doc/ru/bids/bids", - Network accessline 614
"per_object_note": "3 балла за каждые 2000 фраз" }, "doc": "https://yandex.ru/dev/direct/doc/ru/bids/get" - Network accessline 615
}, "doc": "https://yandex.ru/dev/direct/doc/ru/bids/get" }, - Network accessline 616
"doc": "https://yandex.ru/dev/direct/doc/ru/bids/get" - Network accessline 628
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/bids/set" - Network accessline 629
}, "doc": "https://yandex.ru/dev/direct/doc/ru/bids/set" }, - Network accessline 630
"doc": "https://yandex.ru/dev/direct/doc/ru/bids/set" - Network accessline 642
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/bids/setAuto" - Network accessline 643
}, "doc": "https://yandex.ru/dev/direct/doc/ru/bids/setAuto" } - Network accessline 644
"doc": "https://yandex.ru/dev/direct/doc/ru/bids/setAuto" - Network accessline 651
"purpose": "Сервис позволяет получить профили организаций бизнеса.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/businesses/businesses", - Network accessline 652
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/businesses/businesses", "v501_note": null, - Network accessline 653
"doc": "https://yandex.ru/dev/direct/doc/ru/businesses/businesses", - Network accessline 666
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/businesses/get" - Network accessline 667
}, "doc": "https://yandex.ru/dev/direct/doc/ru/businesses/get" } - Network accessline 668
"doc": "https://yandex.ru/dev/direct/doc/ru/businesses/get" - Network accessline 675
"purpose": "Сервис предназначен для управления корректировками ставок.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/bidmodifiers", - Network accessline 676
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/bidmodifiers", "v501_note": null, - Network accessline 677
"doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/bidmodifiers", - Network accessline 690
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/add" - Network accessline 691
}, "doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/add" }, - Network accessline 692
"doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/add" - Network accessline 704
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/delete" - Network accessline 705
}, "doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/delete" }, - Network accessline 706
"doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/delete" - Network accessline 718
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/get" - Network accessline 719
}, "doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/get" }, - Network accessline 720
"doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/get" - Network accessline 732
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/set" - Network accessline 733
}, "doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/set" } - Network accessline 734
"doc": "https://yandex.ru/dev/direct/doc/ru/bidmodifiers/set" - Network accessline 741
"purpose": "Сервис предназначен для выполнения операций с кампаниями.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/campaigns", - Network accessline 742
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/campaigns", "v501_note": "Для работы с Единой перфоманс-кампанией", - Network accessline 743
"doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/campaigns", - Network accessline 756
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/add" - Network accessline 757
}, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/add" }, - Network accessline 758
"doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/add" - Network accessline 770
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/archive" - Network accessline 771
}, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/archive" }, - Network accessline 772
"doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/archive" - Network accessline 784
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/delete" - Network accessline 785
}, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/delete" }, - Network accessline 786
"doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/delete" - Network accessline 798
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/get" - Network accessline 799
}, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/get" }, - Network accessline 800
"doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/get" - Network accessline 812
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/resume" - Network accessline 813
}, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/resume" }, - Network accessline 814
"doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/resume" - Network accessline 826
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/suspend" - Network accessline 827
}, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/suspend" }, - Network accessline 828
"doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/suspend" - Network accessline 840
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/unarchive" - Network accessline 841
}, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/unarchive" }, - Network accessline 842
"doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/unarchive" - Network accessline 854
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/update" - Network accessline 855
}, "doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/update" } - Network accessline 856
"doc": "https://yandex.ru/dev/direct/doc/ru/campaigns/update" - Network accessline 863
"purpose": "Сервис предназначен для проверки наличия изменений.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/changes/changes", - Network accessline 864
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/changes/changes", "v501_note": null, - Network accessline 865
"doc": "https://yandex.ru/dev/direct/doc/ru/changes/changes", - Network accessline 878
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/changes/checkDictionaries" - Network accessline 879
}, "doc": "https://yandex.ru/dev/direct/doc/ru/changes/checkDictionaries" }, - Network accessline 880
"doc": "https://yandex.ru/dev/direct/doc/ru/changes/checkDictionaries" - Network accessline 892
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/changes/checkCampaigns" - Network accessline 893
}, "doc": "https://yandex.ru/dev/direct/doc/ru/changes/checkCampaigns" }, - Network accessline 894
"doc": "https://yandex.ru/dev/direct/doc/ru/changes/checkCampaigns" - Network accessline 906
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/changes/check" - Network accessline 907
}, "doc": "https://yandex.ru/dev/direct/doc/ru/changes/check" } - Network accessline 908
"doc": "https://yandex.ru/dev/direct/doc/ru/changes/check" - Network accessline 915
"purpose": "Сервис предназначен для управления параметрами рекламодателя и настройками пользователя — представителя рекламодателя, а также для получения параметров агентства и настроек пользователя — представителя агентства.", "docume - Network accessline 916
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/clients/clients", "v501_note": null, - Network accessline 917
"doc": "https://yandex.ru/dev/direct/doc/ru/clients/clients", - Network accessline 930
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/clients/get" - Network accessline 931
}, "doc": "https://yandex.ru/dev/direct/doc/ru/clients/get" }, - Network accessline 932
"doc": "https://yandex.ru/dev/direct/doc/ru/clients/get" - Network accessline 944
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/clients/update" - Network accessline 945
}, "doc": "https://yandex.ru/dev/direct/doc/ru/clients/update" } - Network accessline 946
"doc": "https://yandex.ru/dev/direct/doc/ru/clients/update" - Network accessline 953
"purpose": "Сервис предназначен для выполнения операций с креативами.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/creatives/creatives", - Network accessline 954
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/creatives/creatives", "v501_note": null, - Network accessline 955
"doc": "https://yandex.ru/dev/direct/doc/ru/creatives/creatives", - Network accessline 964
"v501_note": null, "units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/creatives/add" - Network accessline 965
"units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/creatives/add" }, - Network accessline 966
"doc": "https://yandex.ru/dev/direct/doc/ru/creatives/add" - Network accessline 978
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/creatives/get" - Network accessline 979
}, "doc": "https://yandex.ru/dev/direct/doc/ru/creatives/get" } - Network accessline 980
"doc": "https://yandex.ru/dev/direct/doc/ru/creatives/get" - Network accessline 987
"purpose": "Сервис предназначен для получения справочных данных: регионов, часовых поясов, курсов валют, станций метрополитена, ограничений на значения параметров и др.", "documented_version": "v501", "doc": "https://yandex.ru/d - Network accessline 988
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/dictionaries/dictionaries", "v501_note": null, - Network accessline 989
"doc": "https://yandex.ru/dev/direct/doc/ru/dictionaries/dictionaries", - Network accessline 1002
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/dictionaries/get" - Network accessline 1003
}, "doc": "https://yandex.ru/dev/direct/doc/ru/dictionaries/get" }, - Network accessline 1004
"doc": "https://yandex.ru/dev/direct/doc/ru/dictionaries/get" - Network accessline 1012
"v501_note": null, "units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/dictionaries/getGeoRegions" - Network accessline 1013
"units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/dictionaries/getGeoRegions" } - Network accessline 1014
"doc": "https://yandex.ru/dev/direct/doc/ru/dictionaries/getGeoRegions" - Network accessline 1021
"purpose": "Сервис предназначен для выполнения операций с фидами.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/feeds/feeds", - Network accessline 1022
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/feeds/feeds", "v501_note": null, - Network accessline 1023
"doc": "https://yandex.ru/dev/direct/doc/ru/feeds/feeds", - Network accessline 1036
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/feeds/add" - Network accessline 1037
}, "doc": "https://yandex.ru/dev/direct/doc/ru/feeds/add" }, - Network accessline 1038
"doc": "https://yandex.ru/dev/direct/doc/ru/feeds/add" - Network accessline 1050
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/feeds/delete" - Network accessline 1051
}, "doc": "https://yandex.ru/dev/direct/doc/ru/feeds/delete" }, - Network accessline 1052
"doc": "https://yandex.ru/dev/direct/doc/ru/feeds/delete" - Network accessline 1064
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/feeds/get" - Network accessline 1065
}, "doc": "https://yandex.ru/dev/direct/doc/ru/feeds/get" }, - Network accessline 1066
"doc": "https://yandex.ru/dev/direct/doc/ru/feeds/get" - Network accessline 1078
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/feeds/update" - Network accessline 1079
}, "doc": "https://yandex.ru/dev/direct/doc/ru/feeds/update" } - Network accessline 1080
"doc": "https://yandex.ru/dev/direct/doc/ru/feeds/update" - Network accessline 1087
"purpose": "Сервис предназначен для назначения ставок ключевым фразам и автотаргетингам и для получения данных, полезных при назначении ставок.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/keywordb - Network accessline 1088
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/keywordbids/keywordbids", "v501_note": null, - Network accessline 1089
"doc": "https://yandex.ru/dev/direct/doc/ru/keywordbids/keywordbids", - Network accessline 1102
"per_object_note": "3 балла за каждые 2000 фраз" }, "doc": "https://yandex.ru/dev/direct/doc/ru/keywordbids/get" - Network accessline 1103
}, "doc": "https://yandex.ru/dev/direct/doc/ru/keywordbids/get" }, - Network accessline 1104
"doc": "https://yandex.ru/dev/direct/doc/ru/keywordbids/get" - Network accessline 1116
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/keywordbids/set" - Network accessline 1117
}, "doc": "https://yandex.ru/dev/direct/doc/ru/keywordbids/set" }, - Network accessline 1118
"doc": "https://yandex.ru/dev/direct/doc/ru/keywordbids/set" - Network accessline 1130
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/keywordbids/setAuto" - Network accessline 1131
}, "doc": "https://yandex.ru/dev/direct/doc/ru/keywordbids/setAuto" } - Network accessline 1132
"doc": "https://yandex.ru/dev/direct/doc/ru/keywordbids/setAuto" - Network accessline 1139
"purpose": "Сервис предназначен для выполнения операций с ключевыми фразами и автотаргетингами.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/keywords/keywords", - Network accessline 1140
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/keywords/keywords", "v501_note": null, - Network accessline 1141
"doc": "https://yandex.ru/dev/direct/doc/ru/keywords/keywords", - Network accessline 1154
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/keywords/add" - Network accessline 1155
}, "doc": "https://yandex.ru/dev/direct/doc/ru/keywords/add" }, - Network accessline 1156
"doc": "https://yandex.ru/dev/direct/doc/ru/keywords/add" - Network accessline 1168
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/keywords/delete" - Network accessline 1169
}, "doc": "https://yandex.ru/dev/direct/doc/ru/keywords/delete" }, - Network accessline 1170
"doc": "https://yandex.ru/dev/direct/doc/ru/keywords/delete" - Network accessline 1182
"per_object_note": "3 балла за каждые 2000 фраз, если запрошен хотя бы один из параметров `Productivity`, `StatisticsSearch`, `StatisticsNetwork`. 1 балл за каждые 2000 фраз — в противном случае" }, "doc": "https://yande - Network accessline 1183
}, "doc": "https://yandex.ru/dev/direct/doc/ru/keywords/get" }, - Network accessline 1184
"doc": "https://yandex.ru/dev/direct/doc/ru/keywords/get" - Network accessline 1196
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/keywords/resume" - Network accessline 1197
}, "doc": "https://yandex.ru/dev/direct/doc/ru/keywords/resume" }, - Network accessline 1198
"doc": "https://yandex.ru/dev/direct/doc/ru/keywords/resume" - Network accessline 1210
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/keywords/suspend" - Network accessline 1211
}, "doc": "https://yandex.ru/dev/direct/doc/ru/keywords/suspend" }, - Network accessline 1212
"doc": "https://yandex.ru/dev/direct/doc/ru/keywords/suspend" - Network accessline 1224
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/keywords/update" - Network accessline 1225
}, "doc": "https://yandex.ru/dev/direct/doc/ru/keywords/update" } - Network accessline 1226
"doc": "https://yandex.ru/dev/direct/doc/ru/keywords/update" - Network accessline 1233
"purpose": "Сервис предназначен для предварительной обработки и исследования ключевых фраз.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/keywordsresearch/keywordsresearch", - Network accessline 1234
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/keywordsresearch/keywordsresearch", "v501_note": null, - Network accessline 1235
"doc": "https://yandex.ru/dev/direct/doc/ru/keywordsresearch/keywordsresearch", - Network accessline 1248
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/keywordsresearch/deduplicate" - Network accessline 1249
}, "doc": "https://yandex.ru/dev/direct/doc/ru/keywordsresearch/deduplicate" }, - Network accessline 1250
"doc": "https://yandex.ru/dev/direct/doc/ru/keywordsresearch/deduplicate" - Network accessline 1262
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/keywordsresearch/hasSearchVolume" - Network accessline 1263
}, "doc": "https://yandex.ru/dev/direct/doc/ru/keywordsresearch/hasSearchVolume" } - Network accessline 1264
"doc": "https://yandex.ru/dev/direct/doc/ru/keywordsresearch/hasSearchVolume" - Network accessline 1271
"purpose": "Сервис позволяет получить данные, введенные пользователями в формы на Турбо-страницах.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/leads/leads", - Network accessline 1272
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/leads/leads", "v501_note": null, - Network accessline 1273
"doc": "https://yandex.ru/dev/direct/doc/ru/leads/leads", - Network accessline 1286
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/leads/get" - Network accessline 1287
}, "doc": "https://yandex.ru/dev/direct/doc/ru/leads/get" } - Network accessline 1288
"doc": "https://yandex.ru/dev/direct/doc/ru/leads/get" - Network accessline 1295
"purpose": "Сервис предназначен для выполнения операций с наборами минус-фраз.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/negativekeywordsharedsets", - Network accessline 1296
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/negativekeywordsharedsets", "v501_note": null, - Network accessline 1297
"doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/negativekeywordsharedsets", - Network accessline 1310
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/add" - Network accessline 1311
}, "doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/add" }, - Network accessline 1312
"doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/add" - Network accessline 1324
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/delete" - Network accessline 1325
}, "doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/delete" }, - Network accessline 1326
"doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/delete" - Network accessline 1338
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/get" - Network accessline 1339
}, "doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/get" }, - Network accessline 1340
"doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/get" - Network accessline 1352
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/update" - Network accessline 1353
}, "doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/update" } - Network accessline 1354
"doc": "https://yandex.ru/dev/direct/doc/ru/negativekeywordsharedsets/update" - Network accessline 1361
"purpose": "Сервис предназначен для выполнения операций с условиями ретаргетинга и подбора аудитории.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/retargetinglists", - Network accessline 1362
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/retargetinglists", "v501_note": null, - Network accessline 1363
"doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/retargetinglists", - Network accessline 1376
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/add" - Network accessline 1377
}, "doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/add" }, - Network accessline 1378
"doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/add" - Network accessline 1390
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/delete" - Network accessline 1391
}, "doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/delete" }, - Network accessline 1392
"doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/delete" - Network accessline 1404
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/get" - Network accessline 1405
}, "doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/get" }, - Network accessline 1406
"doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/get" - Network accessline 1418
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/update" - Network accessline 1419
}, "doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/update" } - Network accessline 1420
"doc": "https://yandex.ru/dev/direct/doc/ru/retargetinglists/update" - Network accessline 1427
"purpose": "Сервис предназначен для выполнения операций с наборами быстрых ссылок.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/sitelinks/sitelinks", - Network accessline 1428
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/sitelinks/sitelinks", "v501_note": null, - Network accessline 1429
"doc": "https://yandex.ru/dev/direct/doc/ru/sitelinks/sitelinks", - Network accessline 1442
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/sitelinks/add" - Network accessline 1443
}, "doc": "https://yandex.ru/dev/direct/doc/ru/sitelinks/add" }, - Network accessline 1444
"doc": "https://yandex.ru/dev/direct/doc/ru/sitelinks/add" - Network accessline 1456
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/sitelinks/delete" - Network accessline 1457
}, "doc": "https://yandex.ru/dev/direct/doc/ru/sitelinks/delete" }, - Network accessline 1458
"doc": "https://yandex.ru/dev/direct/doc/ru/sitelinks/delete" - Network accessline 1470
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/sitelinks/get" - Network accessline 1471
}, "doc": "https://yandex.ru/dev/direct/doc/ru/sitelinks/get" } - Network accessline 1472
"doc": "https://yandex.ru/dev/direct/doc/ru/sitelinks/get" - Network accessline 1479
"purpose": "Сервис предназначен для выполнения операций с пакетными стратегиями.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/strategies/strategies", - Network accessline 1480
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/strategies/strategies", "v501_note": null, - Network accessline 1481
"doc": "https://yandex.ru/dev/direct/doc/ru/strategies/strategies", - Network accessline 1490
"v501_note": null, "units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/strategies/add" - Network accessline 1491
"units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/strategies/add" }, - Network accessline 1492
"doc": "https://yandex.ru/dev/direct/doc/ru/strategies/add" - Network accessline 1500
"v501_note": null, "units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/strategies/archive" - Network accessline 1501
"units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/strategies/archive" }, - Network accessline 1502
"doc": "https://yandex.ru/dev/direct/doc/ru/strategies/archive" - Network accessline 1510
"v501_note": null, "units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/strategies/get" - Network accessline 1511
"units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/strategies/get" }, - Network accessline 1512
"doc": "https://yandex.ru/dev/direct/doc/ru/strategies/get" - Network accessline 1520
"v501_note": null, "units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/strategies/unarchive" - Network accessline 1521
"units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/strategies/unarchive" }, - Network accessline 1522
"doc": "https://yandex.ru/dev/direct/doc/ru/strategies/unarchive" - Network accessline 1530
"v501_note": null, "units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/strategies/update" - Network accessline 1531
"units": null, "doc": "https://yandex.ru/dev/direct/doc/ru/strategies/update" } - Network accessline 1532
"doc": "https://yandex.ru/dev/direct/doc/ru/strategies/update" - Network accessline 1539
"purpose": "Сервис позволяет получить параметры Турбо-страниц.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/turbopages/turbopages", - Network accessline 1540
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/turbopages/turbopages", "v501_note": null, - Network accessline 1541
"doc": "https://yandex.ru/dev/direct/doc/ru/turbopages/turbopages", - Network accessline 1554
"per_object_note": null }, "doc": "https://yandex.ru/dev/direct/doc/ru/turbopages/get" - Network accessline 1555
}, "doc": "https://yandex.ru/dev/direct/doc/ru/turbopages/get" } - Network accessline 1556
"doc": "https://yandex.ru/dev/direct/doc/ru/turbopages/get" - Network accessline 1569
], "endpoint_responds": true, "wsdl": "https://api.direct.yandex.com/v501/dynamictextadtargets?wsdl", - Network accessline 1570
"endpoint_responds": true, "wsdl": "https://api.direct.yandex.com/v501/dynamictextadtargets?wsdl", "purpose": "Условия нацеливания для динамических объявлений.", - Network accessline 1571
"wsdl": "https://api.direct.yandex.com/v501/dynamictextadtargets?wsdl", - Network accessline 1572
"purpose": "Условия нацеливания для динамических объявлений.", "purpose_source": "https://yandex.ru/dev/direct/doc/ru/best-practice/launch-campaign", "methods": [ - Network accessline 1573
"purpose_source": "https://yandex.ru/dev/direct/doc/ru/best-practice/launch-campaign", - Network accessline 1644
], "endpoint_responds": true, "wsdl": "https://api.direct.yandex.com/v501/smartadtargets?wsdl", - Network accessline 1645
"endpoint_responds": true, "wsdl": "https://api.direct.yandex.com/v501/smartadtargets?wsdl", "purpose": "Фильтры — условия нацеливания для смарт-баннеров.", - Network accessline 1646
"wsdl": "https://api.direct.yandex.com/v501/smartadtargets?wsdl", - Network accessline 1647
"purpose": "Фильтры — условия нацеливания для смарт-баннеров.", "purpose_source": "https://yandex.ru/dev/direct/doc/ru/best-practice/smart-ads", "methods": [ - Network accessline 1648
"purpose_source": "https://yandex.ru/dev/direct/doc/ru/best-practice/smart-ads", - Network accessline 1729
], "endpoint_responds": true, "wsdl": "https://api.direct.yandex.com/v501/vcards?wsdl", - Network accessline 1730
"endpoint_responds": true, "wsdl": "https://api.direct.yandex.com/v501/vcards?wsdl", "purpose": "Виртуальные визитки: контакты организации, показываемые вместе с объявлением.", - Network accessline 1731
"wsdl": "https://api.direct.yandex.com/v501/vcards?wsdl", - Network accessline 1732
"purpose": "Виртуальные визитки: контакты организации, показываемые вместе с объявлением.", "purpose_source": "https://yandex.ru/dev/direct/doc/ru/concepts/contact-info", "methods": [ - Network accessline 1733
"purpose_source": "https://yandex.ru/dev/direct/doc/ru/concepts/contact-info", - Network accessline 1771
"purpose": "Статистика по аккаунту: единственный источник цифр, включая кампании Мастера кампаний.", "documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/reports", - Network accessline 1772
"documented_version": "v501", "doc": "https://yandex.ru/dev/direct/doc/ru/reports", "calling_convention": "POST без поля `method` — телом запроса идёт сама спецификация отчёта `ReportDefinition`.", - Network accessline 1773
"doc": "https://yandex.ru/dev/direct/doc/ru/reports", - Network accessline 1792
}, "legacy_v4": { "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/_AllMethods", - Network accessline 1793
"legacy_v4": { "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/_AllMethods", "note": "Управление кампаниями, группами, объявлениями и ставками в версиях 4 и Live 4 отключено. Оставшееся делится надвое. Часть — то, к чему - Network accessline 1794
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/_AllMethods", - Network accessline 1795
"note": "Управление кампаниями, группами, объявлениями и ставками в версиях 4 и Live 4 отключено. Оставшееся делится надвое. Часть — то, к чему справочник версии 5 сам отсылает: прогноз бюджета и подбор фраз, метки, общий счёт, финансовые о - Network accessline 1796
"units_note": "У версии 4 отдельный суточный пул баллов. GetClientsUnits не заменяет заголовок Units версии 5; список платных методов у каждой версии свой.", "transport_note": "Запрос четвёртой версии собран не так, как запрос версии 5, - Network accessline 1797
"transport_note": "Запрос четвёртой версии собран не так, как запрос версии 5, и провенанс у утверждений разный. Документировано: токен уходит в теле запроса, полем token, рядом с method, param и locale (https://yandex.ru/dev/direct/doc/dg- - Network accessline 1809
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/EnableSharedAccount" - Network accessline 1810
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/EnableSharedAccount" }, - Network accessline 1811
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/EnableSharedAccount" - Network accessline 1846
} ], "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/AccountManagement" - Network accessline 1847
], "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/AccountManagement" } - Network accessline 1848
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/AccountManagement" - Network accessline 1863
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/CreateInvoice" - Network accessline 1864
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/CreateInvoice" }, - Network accessline 1865
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/CreateInvoice" - Network accessline 1875
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/PayCampaigns" - Network accessline 1876
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/PayCampaigns" }, - Network accessline 1877
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/PayCampaigns" - Network accessline 1887
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/TransferMoney" - Network accessline 1888
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/TransferMoney" }, - Network accessline 1889
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/TransferMoney" - Network accessline 1898
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetCreditLimits" - Network accessline 1899
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetCreditLimits" } - Network accessline 1900
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetCreditLimits" - Network accessline 1915
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/CreateNewForecast" - Network accessline 1916
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/CreateNewForecast" }, - Network accessline 1917
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/CreateNewForecast" - Network accessline 1927
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetForecast" - Network accessline 1928
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetForecast" }, - Network accessline 1929
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetForecast" - Network accessline 1938
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetForecastList" - Network accessline 1939
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetForecastList" }, - Network accessline 1940
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetForecastList" - Network accessline 1949
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/DeleteForecastReport" - Network accessline 1950
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/DeleteForecastReport" } - Network accessline 1951
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/DeleteForecastReport" - Network accessline 1965
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetKeywordsSuggestion" - Network accessline 1966
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetKeywordsSuggestion" }, - Network accessline 1967
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetKeywordsSuggestion" - Network accessline 1976
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/CreateNewWordstatReport" - Network accessline 1977
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/CreateNewWordstatReport" }, - Network accessline 1978
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/CreateNewWordstatReport" - Network accessline 1987
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetWordstatReport" - Network accessline 1988
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetWordstatReport" }, - Network accessline 1989
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetWordstatReport" - Network accessline 1998
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetWordstatReportList" - Network accessline 1999
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetWordstatReportList" }, - Network accessline 2000
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetWordstatReportList" - Network accessline 2009
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/DeleteWordstatReport" - Network accessline 2010
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/DeleteWordstatReport" } - Network accessline 2011
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/DeleteWordstatReport" - Network accessline 2025
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/GetBannersTags" - Network accessline 2026
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/GetBannersTags" }, - Network accessline 2027
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/GetBannersTags" - Network accessline 2036
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/UpdateBannersTags" - Network accessline 2037
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/UpdateBannersTags" }, - Network accessline 2038
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/UpdateBannersTags" - Network accessline 2047
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/GetCampaignsTags" - Network accessline 2048
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/GetCampaignsTags" }, - Network accessline 2049
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/GetCampaignsTags" - Network accessline 2058
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/UpdateCampaignsTags" - Network accessline 2059
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/UpdateCampaignsTags" } - Network accessline 2060
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/UpdateCampaignsTags" - Network accessline 2074
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/GetRetargetingGoals" - Network accessline 2075
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/GetRetargetingGoals" } - Network accessline 2076
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/GetRetargetingGoals" - Network accessline 2091
"v5_equivalent_note": "Замена неполная: метод возвращает остаток отдельного пула версии 4. Остаток версии 5 проверяется по заголовкам ответа и Clients.get.", "operations": null, "doc": "https://yandex.ru/dev/direct/d - Network accessline 2092
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetClientsUnits" } - Network accessline 2093
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetClientsUnits" - Network accessline 2108
"v5_equivalent": "Dictionaries", "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetRegions" - Network accessline 2109
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetRegions" }, - Network accessline 2110
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetRegions" - Network accessline 2120
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetStatGoals" - Network accessline 2121
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetStatGoals" }, - Network accessline 2122
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetStatGoals" - Network accessline 2131
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetRubrics" - Network accessline 2132
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetRubrics" }, - Network accessline 2133
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetRubrics" - Network accessline 2142
"v5_equivalent": "Dictionaries", "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetTimeZones" - Network accessline 2143
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetTimeZones" } - Network accessline 2144
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetTimeZones" - Network accessline 2158
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetAvailableVersions" - Network accessline 2159
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetAvailableVersions" }, - Network accessline 2160
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetAvailableVersions" - Network accessline 2169
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetVersion" - Network accessline 2170
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetVersion" }, - Network accessline 2171
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/GetVersion" - Network accessline 2180
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/PingAPI" - Network accessline 2181
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/PingAPI" }, - Network accessline 2182
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/reference/PingAPI" - Network accessline 2191
"v5_equivalent": null, "operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/GetEventsLog" - Network accessline 2192
"operations": null, "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/GetEventsLog" } - Network accessline 2193
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/GetEventsLog" - Network accessline 2747
} ], "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/AdImage", - Network accessline 2748
], "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/AdImage", "live_note": "В исходной проверке API метод вернул код 55 «Метод не существует». Не используйте его без повторного подтверждения поддержки. Описание - Network accessline 2749
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/AdImage", - Network accessline 2770
} ], "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/AdImageAssociation", - Network accessline 2771
], "doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/AdImageAssociation", "live_note": "Отвечает иначе, чем соседний AdImage, и это разные вещи: код 509 «Метод недоступен в данной версии API», а не 55 «Метод не - Network accessline 2772
"doc": "https://yandex.ru/dev/direct/doc/dg-v4/ru/live/AdImageAssociation", - Network accessline 2819
"id": "D-01", "title": "Справочник публикует только адреса v501, но префикс v5 продолжает работать", "docs": "Все страницы сервисов дают адрес `https://api.direct.yandex.com/json/v501/{сервис}`. Живой адрес версии 5 остался в сп - Network accessline 2820
"title": "Справочник публикует только адреса v501, но префикс v5 продолжает работать", "docs": "Все страницы сервисов дают адрес `https://api.direct.yandex.com/json/v501/{сервис}`. Живой адрес версии 5 остался в справочнике трижды, и - Network accessline 2821
"docs": "Все страницы сервисов дают адрес `https://api.direct.yandex.com/json/v501/{сервис}`. Живой адрес версии 5 остался в справочнике трижды, и все три раза — в примерах запроса к `Ads`: `POST /json/v5/ads/` дважды и `POST /v5/ads/` в SO
plugins/yandex-direct/skills/yandex-direct/references/hypotheses.md
- Network accessline 186
Не предлагайте передавать устаревшее поле или искать исчезнувшую настройку. Для анализа географии используйте доступные отчёты и настройку регионов. Источник: [обновление геотаргетинга в Директе](https://b2b.yandex.ru/adv/news/obnovlenie-ge - Network accessline 188
Источник: [обновление геотаргетинга в Директе](https://b2b.yandex.ru/adv/news/obnovlenie-geotargetinga-v-direkte).
plugins/yandex-direct/skills/yandex-direct/references/limits.json
- Network accessline 1804
"client_restrictions_comment": "Читаются методом Clients.get; при получении параметров агентства массив не возвращается — лимиты запрашиваются по каждому клиенту отдельно.", "sources": { "errors_list": "https://yandex.ru/dev/direct/do - Network accessline 1805
"sources": { "errors_list": "https://yandex.ru/dev/direct/doc/ru/concepts/errors-list", "units": "https://yandex.ru/dev/direct/doc/ru/concepts/units", - Network accessline 1806
"errors_list": "https://yandex.ru/dev/direct/doc/ru/concepts/errors-list", - Network accessline 1807
"units": "https://yandex.ru/dev/direct/doc/ru/concepts/units", - Network accessline 1808
"paging": "https://yandex.ru/dev/direct/doc/ru/best-practice/get", - Network accessline 1809
"clients_get": "https://yandex.ru/dev/direct/doc/ru/clients/get", - Network accessline 1810
"technical_restrictions": "https://yandex.ru/support/direct/ru/moderation/technical-restrictions", - Network accessline 1811
"text_and_title": "https://yandex.ru/support/direct/ru/efficiency/text-and-title"
plugins/yandex-direct/skills/yandex-direct/references/report_presets.json
- Network accessline 4
"reference": "references/REPORTS.md", "endpoint": { "json": "https://api.direct.yandex.com/json/v501/reports", - Network accessline 5
"endpoint": { "json": "https://api.direct.yandex.com/json/v501/reports", "xml": "https://api.direct.yandex.com/v501/reports" - Network accessline 6
"json": "https://api.direct.yandex.com/json/v501/reports", - Network accessline 7
"xml": "https://api.direct.yandex.com/v501/reports"
plugins/yandex-direct/skills/yandex-direct/references/ui_deeplinks.json
- Network accessline 2
"version": "1", "checked_at": "2026-08-24", "source": "https://yandex.ru/support/direct/ru/", - Network accessline 3
"checked_at": "2026-08-24", "source": "https://yandex.ru/support/direct/ru/", "about": "Карта действий и экранов Директа. confirmed — ссылка из справки, user_provided — формат от пользователя, navigation — переходы от известного экрана. - Network accessline 4
"source": "https://yandex.ru/support/direct/ru/", - Network accessline 17
}, "hosts": { "direct": "https://direct.yandex.ru", - Network accessline 18
"hosts": { "direct": "https://direct.yandex.ru", "direct_com": "https://direct.yandex.com", - Network accessline 19
"direct": "https://direct.yandex.ru", - Network accessline 20
"direct_com": "https://direct.yandex.com", - Network accessline 21
"balance": "https://balance.yandex.ru", - Network accessline 22
"metrika": "https://metrika.yandex.ru", - Network accessline 23
"audience": "https://audience.yandex.ru", - Network accessline 24
"wordstat": "https://wordstat.yandex.ru", - Network accessline 25
"business": "https://yandex.ru/sprav", - Network accessline 26
"passport": "https://passport.yandex.ru" - Network accessline 30
"id": "cabinet_root", "title": "Кабинет Директа", "url": "https://direct.yandex.ru/", - Network accessline 31
"title": "Кабинет Директа", "url": "https://direct.yandex.ru/", "confidence": "confirmed", - Network accessline 32
"url": "https://direct.yandex.ru/", - Network accessline 33
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/troubleshooting/moderation" - Network accessline 34
"interface": "both", "source": "https://yandex.ru/support/direct/ru/troubleshooting/moderation" }, - Network accessline 35
"source": "https://yandex.ru/support/direct/ru/troubleshooting/moderation" - Network accessline 38
"id": "campaigns_list", "title": "Список кампаний", "url": "https://direct.yandex.ru/dna/grid/campaigns", - Network accessline 39
"title": "Список кампаний", "url": "https://direct.yandex.ru/dna/grid/campaigns", "confidence": "confirmed", - Network accessline 40
"url": "https://direct.yandex.ru/dna/grid/campaigns", - Network accessline 41
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/new-interface/guide", - Network accessline 42
"interface": "both", "source": "https://yandex.ru/support/direct/ru/new-interface/guide", "note": "Шаблон открывает выбранный кабинет: последние 30 дней, кампании с оплатой за клики и показы, кроме архивных. Это параметры экрана - Network accessline 43
"source": "https://yandex.ru/support/direct/ru/new-interface/guide", - Network accessline 44
"note": "Шаблон открывает выбранный кабинет: последние 30 дней, кампании с оплатой за клики и показы, кроме архивных. Это параметры экрана, не настройки кампаний и не период анализа агента.", "url_template": "https://direct.yandex.ru/ - Network accessline 45
"url_template": "https://direct.yandex.ru/dna/grid/campaigns?ulogin={login}&filter-reset=true&stat-preset=last30Days&dim-filter=CPC_AND_CPM&status-filter=ALL_EXCEPT_ARCHIVED", - Network accessline 49
"id": "campaign_groups", "title": "Группы выбранной кампании", "url": "https://direct.yandex.ru/dna/grid/groups", - Network accessline 50
"title": "Группы выбранной кампании", "url": "https://direct.yandex.ru/dna/grid/groups", "url_template": "https://direct.yandex.ru/dna/grid/groups?ulogin={login}&campaigns-ids={campaign_id}", - Network accessline 51
"url": "https://direct.yandex.ru/dna/grid/groups", - Network accessline 52
"url_template": "https://direct.yandex.ru/dna/grid/groups?ulogin={login}&campaigns-ids={campaign_id}", - Network accessline 59
"id": "campaign_edit", "title": "Настройки выбранной кампании", "url": "https://direct.yandex.ru/dna/campaigns-edit", - Network accessline 60
"title": "Настройки выбранной кампании", "url": "https://direct.yandex.ru/dna/campaigns-edit", "url_template": "https://direct.yandex.ru/dna/campaigns-edit?ulogin={login}&campaigns-ids={campaign_id}", - Network accessline 61
"url": "https://direct.yandex.ru/dna/campaigns-edit", - Network accessline 62
"url_template": "https://direct.yandex.ru/dna/campaigns-edit?ulogin={login}&campaigns-ids={campaign_id}", - Network accessline 69
"id": "campaign_create", "title": "Создание кампании", "url": "https://direct.yandex.ru/dna/campaigns-edit/", - Network accessline 70
"title": "Создание кампании", "url": "https://direct.yandex.ru/dna/campaigns-edit/", "confidence": "confirmed", - Network accessline 71
"url": "https://direct.yandex.ru/dna/campaigns-edit/", - Network accessline 72
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/efficiency/messengers-ads", - Network accessline 73
"interface": "both", "source": "https://yandex.ru/support/direct/ru/efficiency/messengers-ads", "params": [ - Network accessline 74
"source": "https://yandex.ru/support/direct/ru/efficiency/messengers-ads", - Network accessline 90
} ], "note": "Полный подтверждённый пример: https://direct.yandex.ru/dna/campaigns-edit/?is-new=1&campaign-type=UNIFIED&default-placement-type=MESSENGERS" - Network accessline 91
], "note": "Полный подтверждённый пример: https://direct.yandex.ru/dna/campaigns-edit/?is-new=1&campaign-type=UNIFIED&default-placement-type=MESSENGERS" }, - Network accessline 92
"note": "Полный подтверждённый пример: https://direct.yandex.ru/dna/campaigns-edit/?is-new=1&campaign-type=UNIFIED&default-placement-type=MESSENGERS" - Network accessline 95
"id": "recommendations", "title": "Рекомендации", "url": "https://direct.yandex.ru/dna/recommendations", - Network accessline 96
"title": "Рекомендации", "url": "https://direct.yandex.ru/dna/recommendations", "confidence": "confirmed", - Network accessline 97
"url": "https://direct.yandex.ru/dna/recommendations", - Network accessline 98
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/new-interface/recommendations" - Network accessline 99
"interface": "both", "source": "https://yandex.ru/support/direct/ru/new-interface/recommendations" }, - Network accessline 100
"source": "https://yandex.ru/support/direct/ru/new-interface/recommendations" - Network accessline 103
"id": "reports_library", "title": "Библиотека отчётов", "url": "https://direct.yandex.ru/dna/reports/library", - Network accessline 104
"title": "Библиотека отчётов", "url": "https://direct.yandex.ru/dna/reports/library", "confidence": "confirmed", - Network accessline 105
"url": "https://direct.yandex.ru/dna/reports/library", - Network accessline 106
"confidence": "confirmed", "interface": "direct_pro", "source": "https://yandex.ru/support/direct/ru/statistics/library" - Network accessline 107
"interface": "direct_pro", "source": "https://yandex.ru/support/direct/ru/statistics/library" }, - Network accessline 108
"source": "https://yandex.ru/support/direct/ru/statistics/library" - Network accessline 111
"id": "copy_campaigns", "title": "Копирование кампаний", "url": "https://direct.yandex.ru/dna/copy-campaigns", - Network accessline 112
"title": "Копирование кампаний", "url": "https://direct.yandex.ru/dna/copy-campaigns", "confidence": "confirmed", - Network accessline 113
"url": "https://direct.yandex.ru/dna/copy-campaigns", - Network accessline 114
"confidence": "confirmed", "interface": "agency", "source": "https://yandex.ru/support/direct/ru/agencies/interface-guide" - Network accessline 115
"interface": "agency", "source": "https://yandex.ru/support/direct/ru/agencies/interface-guide" }, - Network accessline 116
"source": "https://yandex.ru/support/direct/ru/agencies/interface-guide" - Network accessline 119
"id": "user_settings_account", "title": "Настройки пользователя, вкладка «Аккаунт»", "url": "https://direct.yandex.ru/dna/user-settings/account/", - Network accessline 120
"title": "Настройки пользователя, вкладка «Аккаунт»", "url": "https://direct.yandex.ru/dna/user-settings/account/", "confidence": "confirmed", - Network accessline 121
"url": "https://direct.yandex.ru/dna/user-settings/account/", - Network accessline 122
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/efficiency/enrich-ads-with-third-party-data", - Network accessline 123
"interface": "both", "source": "https://yandex.ru/support/direct/ru/efficiency/enrich-ads-with-third-party-data", "note": "Здесь же — «Показывать метки», уведомления на телефон, счётчик Метрики для новых кампаний, «Дополнять объ - Network accessline 124
"source": "https://yandex.ru/support/direct/ru/efficiency/enrich-ads-with-third-party-data", - Network accessline 128
"id": "subclient_create", "title": "Регистрация нового клиента агентства", "url": "https://direct.yandex.ru/dna/sub-clients/create/", - Network accessline 129
"title": "Регистрация нового клиента агентства", "url": "https://direct.yandex.ru/dna/sub-clients/create/", "confidence": "confirmed", - Network accessline 130
"url": "https://direct.yandex.ru/dna/sub-clients/create/", - Network accessline 131
"confidence": "confirmed", "interface": "agency", "source": "https://yandex.ru/support/direct/ru/agencies/manage-clients" - Network accessline 132
"interface": "agency", "source": "https://yandex.ru/support/direct/ru/agencies/manage-clients" }, - Network accessline 133
"source": "https://yandex.ru/support/direct/ru/agencies/manage-clients" - Network accessline 136
"id": "budget_forecast", "title": "Прогноз бюджета", "url": "https://direct.yandex.ru/registered/main.pl?cmd=advancedForecast", - Network accessline 137
"title": "Прогноз бюджета", "url": "https://direct.yandex.ru/registered/main.pl?cmd=advancedForecast", "confidence": "confirmed", - Network accessline 138
"url": "https://direct.yandex.ru/registered/main.pl?cmd=advancedForecast", - Network accessline 139
"confidence": "confirmed", "interface": "direct_pro", "source": "https://yandex.ru/support/direct/ru/impressions/budget-estimation" - Network accessline 140
"interface": "direct_pro", "source": "https://yandex.ru/support/direct/ru/impressions/budget-estimation" }, - Network accessline 141
"source": "https://yandex.ru/support/direct/ru/impressions/budget-estimation" - Network accessline 144
"id": "api_settings", "title": "Настройки API и пользовательское соглашение", "url": "https://direct.yandex.ru/registered/main.pl?cmd=apiSettings&api_welcome=yes", - Network accessline 145
"title": "Настройки API и пользовательское соглашение", "url": "https://direct.yandex.ru/registered/main.pl?cmd=apiSettings&api_welcome=yes", "confidence": "confirmed", - Network accessline 146
"url": "https://direct.yandex.ru/registered/main.pl?cmd=apiSettings&api_welcome=yes", - Network accessline 147
"confidence": "confirmed", "interface": "direct_pro", "source": "https://yandex.ru/support/direct/ru/alternative-interfaces/api", - Network accessline 148
"interface": "direct_pro", "source": "https://yandex.ru/support/direct/ru/alternative-interfaces/api", "note": "Без принятия соглашения на этом экране API не работает — обязательный шаг настройки скилла." - Network accessline 149
"source": "https://yandex.ru/support/direct/ru/alternative-interfaces/api", - Network accessline 153
"id": "retargeting_conditions", "title": "Условия ретаргетинга (старый интерфейс)", "url": "https://direct.yandex.ru/registered/main.pl?cmd=showRetargetingCond", - Network accessline 154
"title": "Условия ретаргетинга (старый интерфейс)", "url": "https://direct.yandex.ru/registered/main.pl?cmd=showRetargetingCond", "confidence": "confirmed", - Network accessline 155
"url": "https://direct.yandex.ru/registered/main.pl?cmd=showRetargetingCond", - Network accessline 156
"confidence": "confirmed", "interface": "direct_pro", "source": "https://yandex.ru/support/direct/ru/impression-criteria/retargeting-lists", - Network accessline 157
"interface": "direct_pro", "source": "https://yandex.ru/support/direct/ru/impression-criteria/retargeting-lists", "note": "В актуальном интерфейсе те же условия живут в «Библиотека → Сегменты аудитории»." - Network accessline 158
"source": "https://yandex.ru/support/direct/ru/impression-criteria/retargeting-lists", - Network accessline 162
"id": "legacy_search_page", "title": "Страница кампаний (старый интерфейс)", "url": "https://direct.yandex.ru/registered/main.pl?cmd=showSearchPage", - Network accessline 163
"title": "Страница кампаний (старый интерфейс)", "url": "https://direct.yandex.ru/registered/main.pl?cmd=showSearchPage", "confidence": "confirmed", - Network accessline 164
"url": "https://direct.yandex.ru/registered/main.pl?cmd=showSearchPage", - Network accessline 165
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/troubleshooting/moderation" - Network accessline 166
"interface": "both", "source": "https://yandex.ru/support/direct/ru/troubleshooting/moderation" }, - Network accessline 167
"source": "https://yandex.ru/support/direct/ru/troubleshooting/moderation" - Network accessline 170
"id": "wordstat", "title": "Вордстат — подбор слов", "url": "https://wordstat.yandex.ru/", - Network accessline 171
"title": "Вордстат — подбор слов", "url": "https://wordstat.yandex.ru/", "confidence": "confirmed", - Network accessline 172
"url": "https://wordstat.yandex.ru/", - Network accessline 173
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/keywords/wordstat" - Network accessline 174
"interface": "both", "source": "https://yandex.ru/support/direct/ru/keywords/wordstat" }, - Network accessline 175
"source": "https://yandex.ru/support/direct/ru/keywords/wordstat" - Network accessline 178
"id": "balance_root", "title": "Яндекс Баланс", "url": "https://balance.yandex.ru/", - Network accessline 179
"title": "Яндекс Баланс", "url": "https://balance.yandex.ru/", "confidence": "confirmed", - Network accessline 180
"url": "https://balance.yandex.ru/", - Network accessline 181
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/payments/docs" - Network accessline 182
"interface": "both", "source": "https://yandex.ru/support/direct/ru/payments/docs" }, - Network accessline 183
"source": "https://yandex.ru/support/direct/ru/payments/docs" - Network accessline 186
"id": "balance_invoices", "title": "Яндекс Баланс — счета", "url": "https://balance.yandex.ru/invoices.xml?service_cc=PPC&ref_service_id=7", - Network accessline 187
"title": "Яндекс Баланс — счета", "url": "https://balance.yandex.ru/invoices.xml?service_cc=PPC&ref_service_id=7", "confidence": "confirmed", - Network accessline 188
"url": "https://balance.yandex.ru/invoices.xml?service_cc=PPC&ref_service_id=7", - Network accessline 189
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/payments/docs", - Network accessline 190
"interface": "both", "source": "https://yandex.ru/support/direct/ru/payments/docs", "note": "Без параметров — https://balance.yandex.ru/invoices.xml — тот же список без фильтра по Директу." - Network accessline 191
"source": "https://yandex.ru/support/direct/ru/payments/docs", - Network accessline 192
"note": "Без параметров — https://balance.yandex.ru/invoices.xml — тот же список без фильтра по Директу." - Network accessline 195
"id": "balance_documents", "title": "Яндекс Баланс — документы", "url": "https://balance.yandex.ru/docs.xml#/invoices", - Network accessline 196
"title": "Яндекс Баланс — документы", "url": "https://balance.yandex.ru/docs.xml#/invoices", "confidence": "confirmed", - Network accessline 197
"url": "https://balance.yandex.ru/docs.xml#/invoices", - Network accessline 198
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/payments/deferred-payment" - Network accessline 199
"interface": "both", "source": "https://yandex.ru/support/direct/ru/payments/deferred-payment" }, - Network accessline 200
"source": "https://yandex.ru/support/direct/ru/payments/deferred-payment" - Network accessline 203
"id": "balance_acts", "title": "Яндекс Баланс — акты", "url": "https://balance.yandex.ru/acts.xml", - Network accessline 204
"title": "Яндекс Баланс — акты", "url": "https://balance.yandex.ru/acts.xml", "confidence": "confirmed", - Network accessline 205
"url": "https://balance.yandex.ru/acts.xml", - Network accessline 206
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/payments/faq" - Network accessline 207
"interface": "both", "source": "https://yandex.ru/support/direct/ru/payments/faq" }, - Network accessline 208
"source": "https://yandex.ru/support/direct/ru/payments/faq" - Network accessline 211
"id": "balance_person_new", "title": "Яндекс Баланс — добавить плательщика", "url": "https://balance.yandex.ru/persons.xml#/new", - Network accessline 212
"title": "Яндекс Баланс — добавить плательщика", "url": "https://balance.yandex.ru/persons.xml#/new", "confidence": "confirmed", - Network accessline 213
"url": "https://balance.yandex.ru/persons.xml#/new", - Network accessline 214
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/agencies/account-transfer" - Network accessline 215
"interface": "both", "source": "https://yandex.ru/support/direct/ru/agencies/account-transfer" }, - Network accessline 216
"source": "https://yandex.ru/support/direct/ru/agencies/account-transfer" - Network accessline 219
"id": "metrika", "title": "Яндекс Метрика", "url": "https://metrika.yandex.ru/", - Network accessline 220
"title": "Яндекс Метрика", "url": "https://metrika.yandex.ru/", "confidence": "confirmed", - Network accessline 221
"url": "https://metrika.yandex.ru/", - Network accessline 222
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/statistics/metrika" - Network accessline 223
"interface": "both", "source": "https://yandex.ru/support/direct/ru/statistics/metrika" }, - Network accessline 224
"source": "https://yandex.ru/support/direct/ru/statistics/metrika" - Network accessline 227
"id": "metrika_counter_create", "title": "Яндекс Метрика — создать счётчик", "url": "https://metrika.yandex.ru/add/", - Network accessline 228
"title": "Яндекс Метрика — создать счётчик", "url": "https://metrika.yandex.ru/add/", "confidence": "confirmed", - Network accessline 229
"url": "https://metrika.yandex.ru/add/", - Network accessline 230
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/statistics/metrika" - Network accessline 231
"interface": "both", "source": "https://yandex.ru/support/direct/ru/statistics/metrika" }, - Network accessline 232
"source": "https://yandex.ru/support/direct/ru/statistics/metrika" - Network accessline 235
"id": "audience", "title": "Яндекс Аудитории", "url": "https://audience.yandex.ru", - Network accessline 236
"title": "Яндекс Аудитории", "url": "https://audience.yandex.ru", "confidence": "confirmed", - Network accessline 237
"url": "https://audience.yandex.ru", - Network accessline 238
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/technologies-and-services/audience-segments-in-direct" - Network accessline 239
"interface": "both", "source": "https://yandex.ru/support/direct/ru/technologies-and-services/audience-segments-in-direct" }, - Network accessline 240
"source": "https://yandex.ru/support/direct/ru/technologies-and-services/audience-segments-in-direct" - Network accessline 243
"id": "audience_pixels", "title": "Яндекс Аудитории — пиксели", "url": "https://audience.yandex.ru/pixels", - Network accessline 244
"title": "Яндекс Аудитории — пиксели", "url": "https://audience.yandex.ru/pixels", "confidence": "confirmed", - Network accessline 245
"url": "https://audience.yandex.ru/pixels", - Network accessline 246
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/products-cpm-campaign-frontpage/retargeting" - Network accessline 247
"interface": "both", "source": "https://yandex.ru/support/direct/ru/products-cpm-campaign-frontpage/retargeting" }, - Network accessline 248
"source": "https://yandex.ru/support/direct/ru/products-cpm-campaign-frontpage/retargeting" - Network accessline 251
"id": "business_profile", "title": "Яндекс Бизнес — профиль организации", "url": "https://yandex.ru/sprav", - Network accessline 252
"title": "Яндекс Бизнес — профиль организации", "url": "https://yandex.ru/sprav", "confidence": "confirmed", - Network accessline 253
"url": "https://yandex.ru/sprav", - Network accessline 254
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/efficiency/vcards" - Network accessline 255
"interface": "both", "source": "https://yandex.ru/support/direct/ru/efficiency/vcards" }, - Network accessline 256
"source": "https://yandex.ru/support/direct/ru/efficiency/vcards" - Network accessline 259
"id": "passport_profile", "title": "Яндекс ID — профиль и привязанные карты", "url": "https://passport.yandex.ru/profile", - Network accessline 260
"title": "Яндекс ID — профиль и привязанные карты", "url": "https://passport.yandex.ru/profile", "confidence": "confirmed", - Network accessline 261
"url": "https://passport.yandex.ru/profile", - Network accessline 262
"confidence": "confirmed", "interface": "both", "source": "https://yandex.ru/support/direct/ru/payments/shared-account" - Network accessline 263
"interface": "both", "source": "https://yandex.ru/support/direct/ru/payments/shared-account" }, - Network accessline 264
"source": "https://yandex.ru/support/direct/ru/payments/shared-account" - Network accessline 267
"id": "agency_feedback_forms", "title": "Формы обратной связи для агентств", "url": "https://yandex.ru/partner-office/knowledge-base", - Network accessline 268
"title": "Формы обратной связи для агентств", "url": "https://yandex.ru/partner-office/knowledge-base", "confidence": "confirmed", - Network accessline 269
"url": "https://yandex.ru/partner-office/knowledge-base", - Network accessline 270
"confidence": "confirmed", "interface": "agency", "source": "https://yandex.ru/support/direct/ru/troubleshooting/moderation" - Network accessline 271
"interface": "agency", "source": "https://yandex.ru/support/direct/ru/troubleshooting/moderation" }, - Network accessline 272
"source": "https://yandex.ru/support/direct/ru/troubleshooting/moderation" - Network accessline 492
"Создать кампанию" ], "help": "https://yandex.ru/support/direct/ru/campaign-master/about" - Network accessline 493
], "help": "https://yandex.ru/support/direct/ru/campaign-master/about" }, - Network accessline 494
"help": "https://yandex.ru/support/direct/ru/campaign-master/about" - Network accessline 504
"Единая перфоманс-кампания" ], "help": "https://yandex.ru/support/direct/ru/unified-performance-campaign/create-campaign", - Network accessline 505
], "help": "https://yandex.ru/support/direct/ru/unified-performance-campaign/create-campaign", "alternative_screen": "campaign_create", - Network accessline 506
"help": "https://yandex.ru/support/direct/ru/unified-performance-campaign/create-campaign", - Network accessline 520
], "alternative_screen": "group_edit", "help": "https://yandex.ru/support/direct/ru/impressions/bids-adjustment", - Network accessline 521
"alternative_screen": "group_edit", "help": "https://yandex.ru/support/direct/ru/impressions/bids-adjustment", "note": "Корректировка по региону задаётся только на уровне кампании." - Network accessline 522
"help": "https://yandex.ru/support/direct/ru/impressions/bids-adjustment", - Network accessline 534
"Дождаться модерации текста и ссылки" ], "help": "https://yandex.ru/support/direct/ru/efficiency/promotion" - Network accessline 535
], "help": "https://yandex.ru/support/direct/ru/efficiency/promotion" }, - Network accessline 536
"help": "https://yandex.ru/support/direct/ru/efficiency/promotion" - Network accessline 547
"Применить" ], "help": "https://yandex.ru/support/direct/ru/efficiency/promotion" - Network accessline 548
], "help": "https://yandex.ru/support/direct/ru/efficiency/promotion" }, - Network accessline 549
"help": "https://yandex.ru/support/direct/ru/efficiency/promotion" - Network accessline 559
"Сверить с письмом на адрес регистрации" ], "help": "https://yandex.ru/support/direct/ru/troubleshooting/moderation" - Network accessline 560
], "help": "https://yandex.ru/support/direct/ru/troubleshooting/moderation" }, - Network accessline 561
"help": "https://yandex.ru/support/direct/ru/troubleshooting/moderation" - Network accessline 571
"«…» рядом с кампанией → Отправить на модерацию" ], "help": "https://yandex.ru/support/direct/ru/troubleshooting/moderation", - Network accessline 572
], "help": "https://yandex.ru/support/direct/ru/troubleshooting/moderation", "note": "Пока новая версия на модерации, показывается старая. Если старую остановили вручную, показов не будет вовсе." - Network accessline 573
"help": "https://yandex.ru/support/direct/ru/troubleshooting/moderation", - Network accessline 584
"Заполнить форму отправки документов, указав номер кампании, тематику и организацию" ], "help": "https://yandex.ru/support/direct/ru/moderation/special-categories", - Network accessline 585
], "help": "https://yandex.ru/support/direct/ru/moderation/special-categories", "note": "Принятый пакет действует для всех кампаний аккаунта с той же тематикой и тем же доменом." - Network accessline 586
"help": "https://yandex.ru/support/direct/ru/moderation/special-categories", - Network accessline 597
"Либо написать в чат, Telegram, WhatsApp, МАКС или позвонить" ], "help": "https://yandex.ru/support/direct/ru/troubleshooting/error-ban", - Network accessline 598
], "help": "https://yandex.ru/support/direct/ru/troubleshooting/error-ban", "note": "Агентствам — формы обратной связи в партнёрском кабинете." - Network accessline 599
"help": "https://yandex.ru/support/direct/ru/troubleshooting/error-ban", - Network accessline 611
"Отправить скан через форму отправки документов" ], "help": "https://yandex.ru/support/direct/ru/moderation/letter-of-guarantee", - Network accessline 612
], "help": "https://yandex.ru/support/direct/ru/moderation/letter-of-guarantee", "note": "Указываются домены, а не адреса страниц. При редиректе — оба домена. Для физлица подпись заверяется нотариально." - Network accessline 613
"help": "https://yandex.ru/support/direct/ru/moderation/letter-of-guarantee", - Network accessline 626
"Пополнить счёт" ], "help": "https://yandex.ru/support/direct/ru/payments/payment-methods" - Network accessline 627
], "help": "https://yandex.ru/support/direct/ru/payments/payment-methods" }, - Network accessline 628
"help": "https://yandex.ru/support/direct/ru/payments/payment-methods" - Network accessline 641
"Сохранить" ], "help": "https://yandex.ru/support/direct/ru/payments/shared-account", - Network accessline 642
], "help": "https://yandex.ru/support/direct/ru/payments/shared-account", "note": "Только прямые рекламодатели из России, расчёты в рублях, до 299 999 ₽ без НДС." - Network accessline 643
"help": "https://yandex.ru/support/direct/ru/payments/shared-account", - Network accessline 655
"Указать расход за календарную неделю" ], "help": "https://yandex.ru/support/direct/ru/payments/shared-account", - Network accessline 656
], "help": "https://yandex.ru/support/direct/ru/payments/shared-account", "note": "Общий лимит всех кампаний кабинета. Минимум, распределение расхода и последствия изменения суммы — в BUDGETS.md, раздел «Недельный бюджет кабинет - Network accessline 657
"help": "https://yandex.ru/support/direct/ru/payments/shared-account", - Network accessline 669
"Сохранить изменения" ], "help": "https://yandex.ru/support/direct/ru/payments/deferred-payment" - Network accessline 670
], "help": "https://yandex.ru/support/direct/ru/payments/deferred-payment" }, - Network accessline 671
"help": "https://yandex.ru/support/direct/ru/payments/deferred-payment" - Network accessline 683
"Оплатить" ], "help": "https://yandex.ru/support/direct/ru/payments/deferred-payment", - Network accessline 684
], "help": "https://yandex.ru/support/direct/ru/payments/deferred-payment", "note": "Сумма, плательщик и способ оплаты должны совпадать со счётом. Обычное пополнение задолженность не гасит. Срок — 15 календарных дней." - Network accessline 685
"help": "https://yandex.ru/support/direct/ru/payments/deferred-payment", - Network accessline 696
"Сверить дату, сумму и номер платёжного поручения" ], "help": "https://yandex.ru/support/direct/ru/payments/search", - Network accessline 697
], "help": "https://yandex.ru/support/direct/ru/payments/search", "note": "Заявка на розыск платежа принимается не ранее чем через 2 рабочих дня; номер счёта указывается с буквенным префиксом («Б-» для России)." - Network accessline 698
"help": "https://yandex.ru/support/direct/ru/payments/search", - Network accessline 709
"Скачать документ или заказать повторную отправку оригиналов" ], "help": "https://yandex.ru/support/direct/ru/payments/docs", - Network accessline 710
], "help": "https://yandex.ru/support/direct/ru/payments/docs", "note": "Счёт на оплату лежит отдельно, в списке счетов (экран balance_invoices), и скачивается сразу после выставления. Акты, счета-фактуры и УПД — на странице док - Network accessline 711
"help": "https://yandex.ru/support/direct/ru/payments/docs", - Network accessline 722
"Открыть нужный счёт и скачать электронную копию" ], "help": "https://yandex.ru/support/direct/ru/payments/docs", - Network accessline 723
], "help": "https://yandex.ru/support/direct/ru/payments/docs", "note": "Электронная копия счёта доступна сразу после его выставления." - Network accessline 724
"help": "https://yandex.ru/support/direct/ru/payments/docs", - Network accessline 736
"Заказать" ], "help": "https://yandex.ru/support/direct/ru/payments/docs", - Network accessline 737
], "help": "https://yandex.ru/support/direct/ru/payments/docs", "note": "Формируется несколько часов; онлайн доступен только для плательщиков в ООО «ЯНДЕКС»." - Network accessline 738
"help": "https://yandex.ru/support/direct/ru/payments/docs", - Network accessline 750
"Приложить документы, если они требуются" ], "help": "https://yandex.ru/support/direct/ru/payments/refund", - Network accessline 751
], "help": "https://yandex.ru/support/direct/ru/payments/refund", "note": "Возврат по каждому счёту отдельно; бонусы не возвращаются, а аннулируются." - Network accessline 752
"help": "https://yandex.ru/support/direct/ru/payments/refund", - Network accessline 765
"Оплатить счёт в течение 30 дней" ], "help": "https://yandex.ru/support/direct/ru/payments/promocode" - Network accessline 766
], "help": "https://yandex.ru/support/direct/ru/payments/promocode" }, - Network accessline 767
"help": "https://yandex.ru/support/direct/ru/payments/promocode" - Network accessline 776
"Бонусная программа" ], "help": "https://yandex.ru/support/direct/ru/payments/bonus" - Network accessline 777
], "help": "https://yandex.ru/support/direct/ru/payments/bonus" }, - Network accessline 778
"help": "https://yandex.ru/support/direct/ru/payments/bonus" - Network accessline 789
"Сохранить" ], "help": "https://yandex.ru/support/direct/ru/technologies-and-services/ad-labelingl", - Network accessline 790
], "help": "https://yandex.ru/support/direct/ru/technologies-and-services/ad-labelingl", "note": "Без этих данных у клиентов агентств появляется статус «Показы остановлены из-за отсутствия данных для закона о маркировке». Опечат - Network accessline 791
"help": "https://yandex.ru/support/direct/ru/technologies-and-services/ad-labelingl", - Network accessline 803
"Добавить" ], "help": "https://yandex.ru/support/direct/ru/campaigns/representatives", - Network accessline 804
], "help": "https://yandex.ru/support/direct/ru/campaigns/representatives", "note": "Полный доступ выдаётся только логину, не зарегистрированному в Балансе. Добавляет только главный представитель." - Network accessline 805
"help": "https://yandex.ru/support/direct/ru/campaigns/representatives", - Network accessline 818
"Владелец подопечного аккаунта принимает приглашение в меню под своим логином" ], "help": "https://yandex.ru/support/direct/ru/campaigns/mcc" - Network accessline 819
], "help": "https://yandex.ru/support/direct/ru/campaigns/mcc" }, - Network accessline 820
"help": "https://yandex.ru/support/direct/ru/campaigns/mcc" - Network accessline 829
"По всем кампаниям: Инструменты → История изменений → Подробнее" ], "help": "https://yandex.ru/support/direct/ru/campaigns/logs", - Network accessline 830
], "help": "https://yandex.ru/support/direct/ru/campaigns/logs", "note": "Автоматические остановки из-за нехватки денег или лимита бюджета в историю не попадают. Данные с 09.04.2018." - Network accessline 831
"help": "https://yandex.ru/support/direct/ru/campaigns/logs", - Network accessline 842
"Выбрать кампанию и формат файла" ], "help": "https://yandex.ru/support/direct/ru/alternative-interfaces/xls-interface", - Network accessline 843
], "help": "https://yandex.ru/support/direct/ru/alternative-interfaces/xls-interface", "note": "Расходует баллы аккаунта; неизрасходованные за сутки баллы сгорают." - Network accessline 844
"help": "https://yandex.ru/support/direct/ru/alternative-interfaces/xls-interface", - Network accessline 854
"Принять условия соглашения" ], "help": "https://yandex.ru/support/direct/ru/alternative-interfaces/api" - Network accessline 855
], "help": "https://yandex.ru/support/direct/ru/alternative-interfaces/api" }, - Network accessline 856
"help": "https://yandex.ru/support/direct/ru/alternative-interfaces/api" - Network accessline 868
"При необходимости выгрузить в XLS" ], "help": "https://yandex.ru/support/direct/ru/impressions/budget-estimation" - Network accessline 869
], "help": "https://yandex.ru/support/direct/ru/impressions/budget-estimation" }, - Network accessline 870
"help": "https://yandex.ru/support/direct/ru/impressions/budget-estimation" - Network accessline 881
"Добавить в минус-фразы, выбрав уровень «группа» или «кампания»" ], "help": "https://yandex.ru/support/direct/ru/statistics/library/search-queries" - Network accessline 882
], "help": "https://yandex.ru/support/direct/ru/statistics/library/search-queries" }, - Network accessline 883
"help": "https://yandex.ru/support/direct/ru/statistics/library/search-queries" - Network accessline 894
"Сохранить" ], "help": "https://yandex.ru/support/direct/ru/statistics/library/platforms-report", - Network accessline 895
], "help": "https://yandex.ru/support/direct/ru/statistics/library/platforms-report", "note": "Альтернатива — параметры кампании → «Площадки, на которых запрещены показы»: до 1000 доменов для баннеров и до 100 доменов для видеоо - Network accessline 896
"help": "https://yandex.ru/support/direct/ru/statistics/library/platforms-report", - Network accessline 908
"Указать счётчик и ценность конверсий" ], "help": "https://yandex.ru/support/direct/ru/statistics/conversions", - Network accessline 909
], "help": "https://yandex.ru/support/direct/ru/statistics/conversions", "note": "Логину нужен доступ на редактирование счётчика Метрики." - Network accessline 910
"help": "https://yandex.ru/support/direct/ru/statistics/conversions", - Network accessline 922
"Указать процент выборки" ], "help": "https://yandex.ru/support/direct/ru/campaigns/experiments" - Network accessline 923
], "help": "https://yandex.ru/support/direct/ru/campaigns/experiments" }, - Network accessline 924
"help": "https://yandex.ru/support/direct/ru/campaigns/experiments" - Network accessline 935
"При необходимости включить «Автоматически удалять UTM-метки»" ], "help": "https://yandex.ru/support/direct/ru/feeds/add", - Network accessline 936
], "help": "https://yandex.ru/support/direct/ru/feeds/add", "note": "До 50 фидов. По ссылке — до 512 МБ, робот обновляет раз в сутки; файлом — до 200 МБ." - Network accessline 937
"help": "https://yandex.ru/support/direct/ru/feeds/add", - Network accessline 948
"Ввести название и минус-фразы через запятую или дефис" ], "help": "https://yandex.ru/support/direct/ru/keywords/negative-keywords-library", - Network accessline 949
], "help": "https://yandex.ru/support/direct/ru/keywords/negative-keywords-library", "note": "До 30 наборов, 4096 символов в наборе, до 3 наборов на группу и на кампанию." - Network accessline 950
"help": "https://yandex.ru/support/direct/ru/keywords/negative-keywords-library", - Network accessline 962
"Настроить контент и сохранить" ], "help": "https://yandex.ru/support/direct/ru/efficiency/landing/about", - Network accessline 963
], "help": "https://yandex.ru/support/direct/ru/efficiency/landing/about", "note": "Путь зависит от интерфейса: экран landings_basic — для базового Директа, library — для Директ Про. Бесплатно, только для клиентов из России. Без - Network accessline 964
"help": "https://yandex.ru/support/direct/ru/efficiency/landing/about", - Network accessline 976
"Зарегистрировать нового клиента" ], "help": "https://yandex.ru/support/direct/ru/agencies/manage-clients", - Network accessline 977
], "help": "https://yandex.ru/support/direct/ru/agencies/manage-clients", "note": "Клиент создаётся как организация в Яндекс ID." - Network accessline 978
"help": "https://yandex.ru/support/direct/ru/agencies/manage-clients", - Network accessline 990
"Дождаться согласования второй стороной" ], "help": "https://yandex.ru/support/direct/ru/agencies/account-transfer", - Network accessline 991
], "help": "https://yandex.ru/support/direct/ru/agencies/account-transfer", "note": "Перенос выполняется только 1 числа следующего месяца, заявка подаётся не позднее чем за сутки." - Network accessline 992
"help": "https://yandex.ru/support/direct/ru/agencies/account-transfer", - Network accessline 1003
"Перейти в Директ Про" ], "help": "https://yandex.ru/support/direct/ru/interface-direct-pro", - Network accessline 1004
], "help": "https://yandex.ru/support/direct/ru/interface-direct-pro", "note": "Действие доступно только из базового Директа и необратимо: вернуться в базовый интерфейс после переключения нельзя. Пользователю Директ Про предлага - Network accessline 1005
"help": "https://yandex.ru/support/direct/ru/interface-direct-pro",
plugins/yandex-direct/skills/yandex-direct/references/url_macros.md
- Network accessline 49
Схема разметки: [naming.md](naming.md). Источник: [динамические параметры Директа](https://yandex.ru/support/direct/ru/statistics/url-tags).
plugins/yandex-direct/skills/yandex-direct/scripts/account_budget.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/accounts.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/adgroups.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/ads.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/ads_generate.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/ads_write.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/audit_combinatorial.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/bids.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/cache.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/campaign_dump.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/campaign_write.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/campaigns.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 148
# Денежные поля стратегий и бюджетов. Перечень не угадан по названию, а собран # из схемы: `https://api.direct.yandex.com/v501/campaigns?wsdl`, структуры - Network accessline 149
# из схемы: `https://api.direct.yandex.com/v501/campaigns?wsdl`, структуры
plugins/yandex-direct/skills/yandex-direct/scripts/cross_negative.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/extensions.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/feeds.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/images.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/keywords.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/keywords_write.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 787
Значение параметра само по себе человеку не говорит ничего: смысл у него появляется в адресе, куда Директ его подставит. Незаполненный параметр оставляет в адресе пустое место — из `https://site.ru/{param1}/` выходит - Network accessline 788
появляется в адресе, куда Директ его подставит. Незаполненный параметр оставляет в адресе пустое место — из `https://site.ru/{param1}/` выходит `https://site.ru//`, ссылка выглядит правильной и ведёт не туда, — и видеть - Network accessline 789
оставляет в адресе пустое место — из `https://site.ru/{param1}/` выходит - Network accessline 790
`https://site.ru//`, ссылка выглядит правильной и ведёт не туда, — и видеть - Network accessline 870
# Замечания движка идут той же строкой, что и адрес. Главное из # них — незаполненный параметр: `https://site.ru/{param1}/` - Network accessline 871
# них — незаполненный параметр: `https://site.ru/{param1}/` - Network accessline 872
# превращается в `https://site.ru//`, и по одному только адресу
plugins/yandex-direct/skills/yandex-direct/scripts/lib/accounts.py
- Executable scriptline 1
Executable file - Network accessline 533
note(f"В кэше разобрано {len(accounts.cabinets)} кабинетов из " f"{len(records)} — перечитываю список.") accounts = cls.fetch(client, cache=store, warn=warn) - Network accessline 535
accounts = cls.fetch(client, cache=store, warn=warn) - Network accessline 554
@classmethod def fetch(cls, client, *, cache=None, warn=None) -> "Accounts": - Network accessline 555
def fetch(cls, client, *, cache=None, warn=None) -> "Accounts":
plugins/yandex-direct/skills/yandex-direct/scripts/lib/ad_extensions.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/cache.py
plugins/yandex-direct/skills/yandex-direct/scripts/lib/combinatorial.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/config.py
- Executable scriptline 1
Executable file - Access to secretsline 11
[Credential-related source omitted] - Possible obfuscationline 153
# `<U+FEFF>YANDEX_DIRECT_TOKEN`, и «токен не задан» приходит на файл, где - Access to secretsline 201
[Credential-related source omitted] - Network accessline 210
Пробел и управляющий символ отвергаются здесь, а не при отправке: перенос строки в заголовке http.client отклоняет сам, но общей ошибкой, из которой - Network accessline 211
строки в заголовке http.client отклоняет сам, но общей ошибкой, из которой - Network accessline 223
# http.client кодирует заголовки в latin-1, и кириллица падает - Access to secretsline 350
[Credential-related source omitted]
plugins/yandex-direct/skills/yandex-direct/scripts/lib/constants.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/diff.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/direct.py
- Executable scriptline 1
Executable file - Network accessline 5
import http.client - Network accessline 109
def send(self, url: str, body: str, headers: dict): request = urllib.request.Request( - Network accessline 110
request = urllib.request.Request( - Network accessline 134
try: raw = exc.read() except (http.client.HTTPException, OSError) as broken: - Network accessline 136
except (http.client.HTTPException, OSError) as broken: - Network accessline 147
f"Директ не ответил за {self.timeout} с.", headers=received, ) from None except (urllib.error.URLError, http.client.HTTPException, OSError) as exc: - Network accessline 149
except (urllib.error.URLError, http.client.HTTPException, OSError) as exc:
plugins/yandex-direct/skills/yandex-direct/scripts/lib/errors.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/extension_writes.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/feed_objects.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/incoming.py
plugins/yandex-direct/skills/yandex-direct/scripts/lib/money.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/objects.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/payload.py
plugins/yandex-direct/skills/yandex-direct/scripts/lib/phrases.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/policy.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/preferences.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/preview_media.py
- Executable scriptline 1
Executable file - Network accessline 3
import base64 import hashlib import http.client - Network accessline 4
import hashlib import http.client import ipaddress - Network accessline 5
import http.client import ipaddress import socket - Network accessline 69
deadline = time.monotonic() + timeout for family, socktype, protocol, _, target in resolved: connection = socket.socket(family, socktype, protocol) - Network accessline 70
for family, socktype, protocol, _, target in resolved: connection = socket.socket(family, socktype, protocol) try: - Network accessline 71
connection = socket.socket(family, socktype, protocol) - Network accessline 98
raise MediaError("Достигнут общий предел загрузки изображений: 50 МБ.") parts = urlsplit(url) connection = http.client.HTTPSConnection(parts.hostname, 443, timeout=TIMEOUT) - Network accessline 100
connection = http.client.HTTPSConnection(parts.hostname, 443, timeout=TIMEOUT) - Network accessline 161
except MediaError as error: result = {"src": None, "error": str(error)} except (OSError, ValueError, http.client.HTTPException): - Network accessline 162
result = {"src": None, "error": str(error)} except (OSError, ValueError, http.client.HTTPException): result = {"src": None, "error": "Не удалось загрузить изображение: ошибка сети или адреса."} - Network accessline 163
except (OSError, ValueError, http.client.HTTPException):
plugins/yandex-direct/skills/yandex-direct/scripts/lib/preview_source.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/protocol.py
- Executable scriptline 1
Executable file - Network accessline 178
"""`https://api.direct.yandex.com/json/v501/{сервис}/`.""" - Network accessline 184
def request(self, settings, *, service, method, params, account, use_operator_units): key = service_key(service) url = f"https://{settings.host}/json/{settings.version}/{key}/" - Network accessline 185
key = service_key(service) url = f"https://{settings.host}/json/{settings.version}/{key}/" body = json.dumps( - Network accessline 186
url = f"https://{settings.host}/json/{settings.version}/{key}/" - Network accessline 245
"""`https://api.direct.yandex.com/json/v501/reports` — TSV вместо JSON. - Network accessline 382
"""`https://api.direct.yandex.ru/live/v4/json/` и `/v4/json/`. - Network accessline 399
def request(self, settings, *, service, method, params, account, use_operator_units): url = f"https://{settings.host_v4}{self.path}" - Network accessline 400
url = f"https://{settings.host_v4}{self.path}"
plugins/yandex-direct/skills/yandex-direct/scripts/lib/rendering.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/reports.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/responsive.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/retargeting_lists.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/lib/templates.py
- Executable scriptline 1
Executable file - Network accessline 324
Убираются **ограничители шаблонов**, а не все решётки подряд. Разница видна на адресе: непарная решётка в нём — разделитель якоря, и `https://site.ru/p#sec`, из которого её вычистили, ведёт на другую - Network accessline 325
видна на адресе: непарная решётка в нём — разделитель якоря, и `https://site.ru/p#sec`, из которого её вычистили, ведёт на другую страницу. Своё же сообщение разбора говорит про непарную решётку в - Network accessline 326
`https://site.ru/p#sec`, из которого её вычистили, ведёт на другую - Network accessline 618
# принадлежат фразе, и «параметр не задан» — свойство пары «поле, фраза», а # не поля. Незаполненный параметр в адресе оставляет пустое место — из # `https://site.ru/{param1}/` получается `https://site.ru//`, и это ровно та - Network accessline 619
# не поля. Незаполненный параметр в адресе оставляет пустое место — из # `https://site.ru/{param1}/` получается `https://site.ru//`, и это ровно та # ссылка, которая выглядит правильной и ведёт не туда. - Network accessline 620
# `https://site.ru/{param1}/` получается `https://site.ru//`, и это ровно та
plugins/yandex-direct/skills/yandex-direct/scripts/lib/ui_links.py
- Executable scriptline 1
Executable file - Network accessline 18
"stat-preset": "last30Days", "dim-filter": "CPC_AND_CPM", "status-filter": "ALL_EXCEPT_ARCHIVED"}) return f"https://direct.yandex.ru/dna/grid/campaigns?{query}" - Network accessline 20
return f"https://direct.yandex.ru/dna/grid/campaigns?{query}" - Network accessline 29
path = "campaigns-edit" if edit else "grid/groups" query = urlencode({"ulogin": login, "campaigns-ids": campaign_id}) return f"https://direct.yandex.ru/dna/{path}?{query}" - Network accessline 31
return f"https://direct.yandex.ru/dna/{path}?{query}"
plugins/yandex-direct/skills/yandex-direct/scripts/lib/writer.py
- Executable scriptline 1
Executable file - Network accessline 361
if rule.get("requires_protocol_and_domain") and text and not _has_host(text): said.append( "нет протокола или домена: адрес начинается с `http://` либо " - Network accessline 362
said.append( "нет протокола или домена: адрес начинается с `http://` либо " "`https://` и содержит домен") - Network accessline 363
"нет протокола или домена: адрес начинается с `http://` либо " - Network accessline 364
"`https://` и содержит домен") - Network accessline 1310
return self.fetch(operation, operation.ids()) - Network accessline 1312
def fetch(self, operation: Operation, ids: list, *, attempted=None) -> dict: - Network accessline 1499
continue known = snapshots.get(operation) or {} fresh = self.fetch(operation, operation.ids()) - Network accessline 1500
known = snapshots.get(operation) or {} fresh = self.fetch(operation, operation.ids()) if operation.guard is not None: - Network accessline 1501
fresh = self.fetch(operation, operation.ids()) - Network accessline 1602
try: created = _created(operation, outcome) if operation.creating else {} after = self.fetch(operation, list(created.values()) - Network accessline 1603
created = _created(operation, outcome) if operation.creating else {} after = self.fetch(operation, list(created.values()) if operation.creating - Network accessline 1604
after = self.fetch(operation, list(created.values()) - Network accessline 1696
found = (self.lookup(operation, packet, attempted=began) if operation.creating else {key: [one] for key, one in self.fetch( - Network accessline 1697
if operation.creating else {key: [one] for key, one in self.fetch( operation, - Network accessline 1698
else {key: [one] for key, one in self.fetch(
plugins/yandex-direct/skills/yandex-direct/scripts/preview.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/report.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 718
def fetch(cache, client, reference, params, *, account, prefix, mode, - Network accessline 989
entry, report, taxed = fetch( - Network accessline 1006
earlier = build(reference, args, parser, campaign_id=campaign_id, chosen_period=second) _, before, earlier_taxed = fetch( - Network accessline 1007
chosen_period=second) _, before, earlier_taxed = fetch( cache, client, reference, earlier, account=login, prefix=prefix, - Network accessline 1008
_, before, earlier_taxed = fetch(
plugins/yandex-direct/skills/yandex-direct/scripts/retargeting.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/shopping.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/tests/test_campaign_goals.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/tests/test_campaign_placements.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/tests/test_constants.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/tests/test_extensions.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 42
TitleSources={"Items": ["name"]}, TextSources={"Items": ["description"]}) else: body["Href"] = "https://example.test/" - Network accessline 43
else: body["Href"] = "https://example.test/" if kind == "RESPONSIVE_AD": - Network accessline 44
body["Href"] = "https://example.test/" - Network accessline 69
self.malformed_final_read = None self.sitelinks = [{"Id": identifier, "Sitelinks": [ {"Title": title, "Href": f"https://example.test/{identifier}", "Description": "Описание"}]} - Network accessline 70
self.sitelinks = [{"Id": identifier, "Sitelinks": [ {"Title": title, "Href": f"https://example.test/{identifier}", "Description": "Описание"}]} for identifier, title in ((201, "Прежний раздел"), (202, "Новый раздел") - Network accessline 71
{"Title": title, "Href": f"https://example.test/{identifier}", "Description": "Описание"}]} - Network accessline 212
plan = report["binding_plan"][0] self.assertEqual(plan["before"]["sitelinks"]["Sitelinks"][0]["Title"], "Прежний раздел") self.assertEqual(plan["planned"]["sitelinks"]["Sitelinks"][0]["Href"], "https://example.test/202") - Network accessline 213
self.assertEqual(plan["before"]["sitelinks"]["Sitelinks"][0]["Title"], "Прежний раздел") self.assertEqual(plan["planned"]["sitelinks"]["Sitelinks"][0]["Href"], "https://example.test/202") self.assertEqual(plan["before"]["cal - Network accessline 214
self.assertEqual(plan["planned"]["sitelinks"]["Sitelinks"][0]["Href"], "https://example.test/202")
plugins/yandex-direct/skills/yandex-direct/scripts/tests/test_feeds.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 135
self.context.enter_context(patch.object(writer, "AuditLog", partial(writer.AuditLog, root=self.root / "journal"))) self.context.enter_context(patch.object(writer.Writer, "_current_limits", lambda _: writer.Limits.load())) se - Network accessline 136
self.context.enter_context(patch.object(writer.Writer, "_current_limits", lambda _: writer.Limits.load())) self.url = "https://example.test/catalog.xml" self.item = {"Name": "Товары магазина", "BusinessType": "RETAIL", "Sour - Network accessline 137
self.url = "https://example.test/catalog.xml"
plugins/yandex-direct/skills/yandex-direct/scripts/tests/test_payload.py
- Executable scriptline 1
Executable file
plugins/yandex-direct/skills/yandex-direct/scripts/tests/test_report_attribution.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/tests/test_retargeting.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-direct/skills/yandex-direct/scripts/tests/test_shopping.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 54
self.feeds = [{"Id": FEED, "Name": "Тестовый фид", "BusinessType": "RETAIL", "SourceType": "URL", "Status": "DONE", "UrlFeed": {"Url": "https://example.test/feed.xml", "RemoveUtmTags": "NO"}, - Network accessline 55
"SourceType": "URL", "Status": "DONE", "UrlFeed": {"Url": "https://example.test/feed.xml", "RemoveUtmTags": "NO"}, "TitleAndTextSources": {"Items": ["name", "description"]}}] - Network accessline 56
"UrlFeed": {"Url": "https://example.test/feed.xml", "RemoveUtmTags": "NO"},
plugins/yandex-direct/skills/yandex-direct/scripts/whoami.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 10
import argparse import http.client - Network accessline 11
import http.client - Network accessline 93
url = f"https://{settings.host}/json/{settings.version}/{service}/" - Network accessline 108
request = urllib.request.Request(url, data=body, headers=headers, method="POST") - Network accessline 117
try: raw = exc.read().decode("utf-8", "replace") except (http.client.HTTPException, OSError) as broken: - Network accessline 119
except (http.client.HTTPException, OSError) as broken: - Network accessline 131
f"{settings.host} не ответил за {TIMEOUT} с. Повторите позже." ) from None except (urllib.error.URLError, http.client.HTTPException, OSError) as exc: - Network accessline 133
except (urllib.error.URLError, http.client.HTTPException, OSError) as exc:
plugins/yandex-metrika/skills/yandex-metrika/.gitignore
- Access to secretsline 1
[Credential-related source omitted]
plugins/yandex-metrika/skills/yandex-metrika/config/README.md
- Network accessline 5
1. Перейдите на https://oauth.yandex.ru/client/new - Network accessline 15
Подробнее: https://yandex.ru/dev/id/doc/ru/register-client - Network accessline 22
https://oauth.yandex.ru/authorize?response_type=token&client_id=ВАШ_CLIENT_ID - Network accessline 27
[Credential-related source omitted] - Access to secretsline 27
[Credential-related source omitted] - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 39
[Credential-related source omitted] - Access to secretsline 40
[Credential-related source omitted] - Network accessline 73
- Metrika API: https://yandex.ru/dev/metrika/ru/ - Network accessline 74
- Reporting API: https://yandex.ru/dev/metrika/ru/stat/ - Network accessline 75
- OAuth: https://yandex.ru/dev/id/doc/ru/
plugins/yandex-metrika/skills/yandex-metrika/references/ACCESS.md
- Network accessline 63
Поэтому отсутствие результата у `get` означает именно отсутствие прямого разрешения. Справка: [доступ к счётчику](https://yandex.ru/support/metrica/ru/general/access) - Network accessline 64
разрешения. Справка: [доступ к счётчику](https://yandex.ru/support/metrica/ru/general/access) - Network accessline 65
и [список разрешений API](https://yandex.ru/dev/metrika/ru/management/openapi/grant/grants).
plugins/yandex-metrika/skills/yandex-metrika/references/SEGMENTS.md
- Network accessline 18
Последние два условия важно проверять прежде, чем повторно менять доступы: сегмент может быть доступен кабинету, но ещё не готов к использованию. Подробнее: [условия формирования сегментов аудитории](https://yandex.ru/support/direct/ru/impr - Network accessline 19
сегмент может быть доступен кабинету, но ещё не готов к использованию. Подробнее: [условия формирования сегментов аудитории](https://yandex.ru/support/direct/ru/impression-criteria/retargeting-lists) и [сегмент Метрики для ретаргетинга](htt - Network accessline 20
[условия формирования сегментов аудитории](https://yandex.ru/support/direct/ru/impression-criteria/retargeting-lists) - Network accessline 21
и [сегмент Метрики для ретаргетинга](https://yandex.ru/support/metrica/ru/general/segmentation-retargeting). - Network accessline 61
гарантирует их повторное вычисление внутри сохранённого выражения. Перед производственным использованием проверь переход сегмента через границу суток. См. [параметры периода отчёта](https://yandex.ru/dev/metrika/ru/stat/openapi/bytime) - Network accessline 62
производственным использованием проверь переход сегмента через границу суток. См. [параметры периода отчёта](https://yandex.ru/dev/metrika/ru/stat/openapi/bytime) и [список группировок](https://yandex.ru/dev/metrika/ru/stat/attrandmetr/dim_ - Network accessline 63
См. [параметры периода отчёта](https://yandex.ru/dev/metrika/ru/stat/openapi/bytime) - Network accessline 64
и [список группировок](https://yandex.ru/dev/metrika/ru/stat/attrandmetr/dim_all). - Network accessline 103
Синтаксис и примеры: [сегментация в API отчётов](https://yandex.ru/dev/metrika/ru/stat/segmentation). - Network accessline 104
Различия способов сохранения: [сегментация данных](https://yandex.ru/support/metrica/ru/general/segmentation).
plugins/yandex-metrika/skills/yandex-metrika/scripts/common.sh
- Executable scriptline 1
#!/bin/sh - Access to secretsline 8
[Credential-related source omitted] - Network accessline 11
METRIKA_API="https://api-metrika.yandex.net" - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted] - Access to secretsline 24
[Credential-related source omitted] - Access to secretsline 29
[Credential-related source omitted] - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 35
[Credential-related source omitted] - Access to secretsline 38
[Credential-related source omitted] - Access to secretsline 40
[Credential-related source omitted] - Access to secretsline 43
[Credential-related source omitted] - Network accessline 46
# write_metrika_headers <file> [json] # The OAuth token must not appear in curl argv. The caller creates a private - Network accessline 47
# The OAuth token must not appear in curl argv. The caller creates a private - Access to secretsline 53
[Credential-related source omitted] - Network accessline 110
_mg_path="$1" shift _mg_url="${METRIKA_API}${_mg_path}" - Network accessline 111
shift _mg_url="${METRIKA_API}${_mg_path}" _mg_headers=$(mktemp "${METRIKA_TMPDIR}/metrika_headers.XXXXXX") - Network accessline 112
_mg_url="${METRIKA_API}${_mg_path}" - Network accessline 117
[Credential-related source omitted] - Network accessline 118
-H "@$_mg_auth_headers" \ "$@" \ "$_mg_url") || { - Network accessline 119
"$@" \ "$_mg_url") || { rm -f "$_mg_headers" "$_mg_auth_headers" - Network accessline 120
"$_mg_url") || { rm -f "$_mg_headers" "$_mg_auth_headers" echo "Error: curl failed for $_mg_url" >&2 - Dangerous shell operationline 121
rm -f "$_mg_headers" "$_mg_auth_headers" - Network accessline 121
rm -f "$_mg_headers" "$_mg_auth_headers" echo "Error: curl failed for $_mg_url" >&2 return 1 - Network accessline 122
echo "Error: curl failed for $_mg_url" >&2 - Dangerous shell operationline 130
rm -f "$_mg_headers" "$_mg_auth_headers" - Network accessline 147
if [ -n "$_mg_status" ] && [ "$_mg_status" -ge 400 ] 2>/dev/null; then rm -f "$_mg_headers" "$_mg_auth_headers" echo "Error: HTTP $_mg_status from $_mg_url" >&2 - Dangerous shell operationline 148
rm -f "$_mg_headers" "$_mg_auth_headers" - Network accessline 148
rm -f "$_mg_headers" "$_mg_auth_headers" echo "Error: HTTP $_mg_status from $_mg_url" >&2 echo "$_mg_body" >&2 - Network accessline 149
echo "Error: HTTP $_mg_status from $_mg_url" >&2 - Dangerous shell operationline 154
rm -f "$_mg_headers" "$_mg_auth_headers" - Network accessline 162
_mgc_output="$2" shift 2 _mgc_url="${METRIKA_API}${_mgc_path}" - Network accessline 163
shift 2 _mgc_url="${METRIKA_API}${_mgc_path}" _mgc_headers=$(mktemp "${METRIKA_TMPDIR}/metrika_headers.XXXXXX") - Network accessline 164
_mgc_url="${METRIKA_API}${_mgc_path}" - Network accessline 169
[Credential-related source omitted] - Network accessline 171
-o "$_mgc_output" \ "$@" \ "$_mgc_url" || { - Network accessline 172
"$@" \ "$_mgc_url" || { rm -f "$_mgc_headers" "$_mgc_auth_headers" - Network accessline 173
"$_mgc_url" || { rm -f "$_mgc_headers" "$_mgc_auth_headers" echo "Error: curl failed for $_mgc_url" >&2 - Dangerous shell operationline 174
rm -f "$_mgc_headers" "$_mgc_auth_headers" - Network accessline 174
rm -f "$_mgc_headers" "$_mgc_auth_headers" echo "Error: curl failed for $_mgc_url" >&2 return 1 - Network accessline 175
echo "Error: curl failed for $_mgc_url" >&2 - Dangerous shell operationline 182
rm -f "$_mgc_headers" "$_mgc_auth_headers" - Dangerous shell operationline 197
rm -f "$_mgc_headers" "$_mgc_auth_headers" - Dangerous shell operationline 203
rm -f "$_mgc_headers" "$_mgc_auth_headers" - Dangerous shell operationline 220
rm -f "$_mmg_response" - Dangerous shell operationline 232
rm -f "$_mmg_response" - Dangerous shell operationline 236
rm -f "$_mmg_response" - Network accessline 262
_mmr_url="${METRIKA_API}${_mmr_path}" - Network accessline 272
[Credential-related source omitted] - Network accessline 273
[Credential-related source omitted] - Network accessline 275
--data-binary "@$_mmr_body_file" \ "$@" \ "$_mmr_url") || { - Network accessline 276
"$@" \ "$_mmr_url") || { _mmr_curl_status=$? - Network accessline 277
"$_mmr_url") || { - Network accessline 278
_mmr_curl_status=$? rm -f "$_mmr_headers" "$_mmr_auth_headers" echo "Ошибка curl при запросе $_mmr_method $_mmr_url" >&2 - Dangerous shell operationline 279
rm -f "$_mmr_headers" "$_mmr_auth_headers" - Network accessline 279
rm -f "$_mmr_headers" "$_mmr_auth_headers" echo "Ошибка curl при запросе $_mmr_method $_mmr_url" >&2 if [ "$_mmr_method" != "GET" ]; then - Network accessline 280
echo "Ошибка curl при запросе $_mmr_method $_mmr_url" >&2 - Network accessline 285
[Credential-related source omitted] - Network accessline 286
[Credential-related source omitted] - Network accessline 287
[Credential-related source omitted] - Network accessline 288
-H "@$_mmr_auth_headers" \ "$@" \ "$_mmr_url") || { - Network accessline 289
"$@" \ "$_mmr_url") || { _mmr_curl_status=$? - Network accessline 290
"$_mmr_url") || { - Network accessline 291
_mmr_curl_status=$? rm -f "$_mmr_headers" "$_mmr_auth_headers" echo "Ошибка curl при запросе $_mmr_method $_mmr_url" >&2 - Dangerous shell operationline 292
rm -f "$_mmr_headers" "$_mmr_auth_headers" - Network accessline 292
rm -f "$_mmr_headers" "$_mmr_auth_headers" echo "Ошибка curl при запросе $_mmr_method $_mmr_url" >&2 if [ "$_mmr_method" != "GET" ]; then - Network accessline 293
echo "Ошибка curl при запросе $_mmr_method $_mmr_url" >&2 - Dangerous shell operationline 302
rm -f "$_mmr_headers" "$_mmr_auth_headers" - Network accessline 317
return 1 fi echo "Ошибка HTTP $METRIKA_HTTP_STATUS: $_mmr_method $_mmr_url" >&2 - Network accessline 318
fi echo "Ошибка HTTP $METRIKA_HTTP_STATUS: $_mmr_method $_mmr_url" >&2 printf '%s\n' "$_mmr_body" >&2 - Network accessline 319
echo "Ошибка HTTP $METRIKA_HTTP_STATUS: $_mmr_method $_mmr_url" >&2
plugins/yandex-metrika/skills/yandex-metrika/scripts/comparison.sh
plugins/yandex-metrika/skills/yandex-metrika/scripts/conversions.sh
plugins/yandex-metrika/skills/yandex-metrika/scripts/counter_info.sh
plugins/yandex-metrika/skills/yandex-metrika/scripts/counters.sh
plugins/yandex-metrika/skills/yandex-metrika/scripts/direct_clients.sh
plugins/yandex-metrika/skills/yandex-metrika/scripts/direct_costs.sh
plugins/yandex-metrika/skills/yandex-metrika/scripts/ecommerce.sh
plugins/yandex-metrika/skills/yandex-metrika/scripts/goals.sh
plugins/yandex-metrika/skills/yandex-metrika/scripts/grants.sh
plugins/yandex-metrika/skills/yandex-metrika/scripts/management_json.py
- Executable scriptline 1
#!/usr/bin/env python3
plugins/yandex-metrika/skills/yandex-metrika/scripts/search_engines.sh
plugins/yandex-metrika/skills/yandex-metrika/scripts/segments.sh
plugins/yandex-metrika/skills/yandex-metrika/scripts/tests/test_conversions.py
- Executable scriptline 1
#!/usr/bin/env -S uv run --script - Network accessline 58
[Credential-related source omitted] - Network accessline 59
raise AssertionError("OAuth token must not be passed in curl argv") - Network accessline 62
if argument == "-H" and args[index + 1].startswith("@")] if not header_files: raise AssertionError("curl must read private headers from a file") - Network accessline 63
[Credential-related source omitted] - Network accessline 64
raise AssertionError("curl must read private headers from a file") - Access to secretsline 90
[Credential-related source omitted] - Access to secretsline 98
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 127
[Credential-related source omitted] - Access to secretsline 161
[Credential-related source omitted] - Access to secretsline 162
[Credential-related source omitted] - Network accessline 174
self.assertIsNotNone(executable, f"Required shell command is missing: {command}") (bin_dir / command).symlink_to(executable) curl = bin_dir / "curl" - Network accessline 175
(bin_dir / command).symlink_to(executable) curl = bin_dir / "curl" curl.write_text(f"#!/bin/sh\nexec {shlex.quote(sys.executable)} " - Network accessline 176
curl = bin_dir / "curl" - Network accessline 177
curl.write_text(f"#!/bin/sh\nexec {shlex.quote(sys.executable)} " f"{shlex.quote(str(Path(__file__).resolve()))} --fake-curl \"$@\"\n") curl.chmod(0o755) - Network accessline 178
f"{shlex.quote(str(Path(__file__).resolve()))} --fake-curl \"$@\"\n") - Access to secretsline 180
[Credential-related source omitted]
plugins/yandex-metrika/skills/yandex-metrika/scripts/tests/test_management.py
- Executable scriptline 1
#!/usr/bin/env -S uv run --script - Network accessline 23
[Credential-related source omitted] - Network accessline 24
[Credential-related source omitted] - Network accessline 25
raise AssertionError("OAuth token must not be passed in curl argv") - Network accessline 28
if argument == "-H" and args[index + 1].startswith("@")] if not header_files: raise AssertionError("curl must read private headers from a file") - Network accessline 29
[Credential-related source omitted] - Network accessline 30
raise AssertionError("curl must read private headers from a file") - Access to secretsline 62
[Credential-related source omitted] - Access to secretsline 67
[Credential-related source omitted] - Access to secretsline 69
[Credential-related source omitted] - Access to secretsline 73
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Access to secretsline 88
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted] - Access to secretsline 110
[Credential-related source omitted] - Access to secretsline 151
[Credential-related source omitted] - Access to secretsline 152
[Credential-related source omitted] - Access to secretsline 177
[Credential-related source omitted] - Access to secretsline 178
[Credential-related source omitted] - Network accessline 190
(bin_dir / command).symlink_to(executable) (bin_dir / "python3").symlink_to(sys.executable) curl = bin_dir / "curl" - Network accessline 191
(bin_dir / "python3").symlink_to(sys.executable) curl = bin_dir / "curl" curl.write_text(f"#!/bin/sh\nexec {shlex.quote(sys.executable)} " - Network accessline 192
curl = bin_dir / "curl" - Network accessline 193
curl.write_text(f"#!/bin/sh\nexec {shlex.quote(sys.executable)} " f"{shlex.quote(str(Path(__file__).resolve()))} --fake-curl \"$@\"\n") curl.chmod(0o755) - Network accessline 194
f"{shlex.quote(str(Path(__file__).resolve()))} --fake-curl \"$@\"\n") - Access to secretsline 196
[Credential-related source omitted] - Access to secretsline 472
[Credential-related source omitted]
plugins/yandex-metrika/skills/yandex-metrika/scripts/traffic_summary.sh
plugins/yandex-metrika/skills/yandex-metrika/scripts/utm_report.sh
plugins/yandex-search-api/skills/yandex-search-api/.gitignore
- Access to secretsline 3
[Credential-related source omitted]
plugins/yandex-search-api/skills/yandex-search-api/SKILL.md
- Access to secretsline 59
[Credential-related source omitted] - Network accessline 255
Актуальный прайс: https://aistudio.yandex.ru/docs/ru/search-api/pricing - Network accessline 256
https://aistudio.yandex.ru/docs/ru/search-api/pricing - Network accessline 310
1. Сэндвич-дымоходы купить в Москве — Леруа Мерлен https://leroymerlin.ru/... - Network accessline 311
https://leroymerlin.ru/... - Network accessline 314
2. Дымоходы сэндвич — купить в интернет-магазине https://... - Network accessline 315
https://...
plugins/yandex-search-api/skills/yandex-search-api/config/.env.example
- Access to secretsline 3
[Credential-related source omitted]
plugins/yandex-search-api/skills/yandex-search-api/config/README.md
- Network accessline 12
1. Откройте https://console.yandex.cloud/ - Access to secretsline 106
[Credential-related source omitted] - Network accessline 123
- Бесплатный тариф: есть (проверяйте актуальные лимиты) - Подробнее: https://yandex.cloud/ru/docs/search-api/pricing - Network accessline 124
- Подробнее: https://yandex.cloud/ru/docs/search-api/pricing - Network accessline 171
1. Откройте [консоль Yandex Cloud](https://console.yandex.cloud/), выберите каталог → Identity and Access Management → Сервисные аккаунты → нужный аккаунт → API-ключи. - Access to secretsline 178
[Credential-related source omitted] - Access to secretsline 179
[Credential-related source omitted] - Access to secretsline 182
[Credential-related source omitted] - Access to secretsline 183
[Credential-related source omitted] - Access to secretsline 184
[Credential-related source omitted]
plugins/yandex-search-api/skills/yandex-search-api/references/SMART_SNIPPETS.md
- Network accessline 6
Официальная документация: [Получение инфоконтекстов](https://aistudio.yandex.ru/docs/ru/search-api/operations/smart-snippets), - Network accessline 7
[Получение инфоконтекстов](https://aistudio.yandex.ru/docs/ru/search-api/operations/smart-snippets), - Network accessline 8
[Текстовый поиск](https://aistudio.yandex.ru/docs/ru/search-api/concepts/web-search). - Network accessline 121
"docs": [ { "FullUrl": "https://yandex.cloud/", - Network accessline 122
{ "FullUrl": "https://yandex.cloud/", "rich_data": { - Network accessline 123
"FullUrl": "https://yandex.cloud/", - Network accessline 126
"DocumentTitle": "Yandex Cloud", "Description": "Облачная платформа Yandex Cloud", "FullUrl": "https://yandex.cloud/", - Network accessline 127
"Description": "Облачная платформа Yandex Cloud", "FullUrl": "https://yandex.cloud/", "ForcedShortUrl": "yandex.cloud", - Network accessline 128
"FullUrl": "https://yandex.cloud/", - Network accessline 239
Актуальный прайс: [Правила тарификации Yandex Search API](https://aistudio.yandex.ru/docs/ru/search-api/pricing). - Network accessline 240
[Правила тарификации Yandex Search API](https://aistudio.yandex.ru/docs/ru/search-api/pricing).
plugins/yandex-search-api/skills/yandex-search-api/scripts/common.sh
- Executable scriptline 1
#!/bin/sh - Network accessline 15
export PYTHONUTF8=1 SEARCH_API_URL="https://searchapi.api.cloud.yandex.net" - Network accessline 16
SEARCH_API_URL="https://searchapi.api.cloud.yandex.net" - Network accessline 17
IAM_API_URL="https://iam.api.cloud.yandex.net/iam/v1/tokens" - Network accessline 18
OPERATION_API_URL="https://operation.api.cloud.yandex.net/operations" - Network accessline 71
check_curl() { if ! command -v curl >/dev/null 2>&1; then - Network accessline 72
if ! command -v curl >/dev/null 2>&1; then - Network accessline 73
echo "Error: curl is required but not found." >&2 - Access to secretsline 87
[Credential-related source omitted] - Access to secretsline 88
[Credential-related source omitted] - Access to secretsline 90
[Credential-related source omitted] - Access to secretsline 111
[Credential-related source omitted] - Access to secretsline 114
[Credential-related source omitted] - Access to secretsline 121
[Credential-related source omitted] - Access to secretsline 139
[Credential-related source omitted] - Access to secretsline 140
[Credential-related source omitted] - Access to secretsline 147
[Credential-related source omitted] - Access to secretsline 151
[Credential-related source omitted] - Network accessline 157
# Print one complete Authorization header. Callers must pass it directly to # curl and must never log the result. - Network accessline 158
# curl and must never log the result. - Access to secretsline 163
[Credential-related source omitted] - Access to secretsline 164
[Credential-related source omitted] - Access to secretsline 165
[Credential-related source omitted] - Access to secretsline 168
[Credential-related source omitted] - Access to secretsline 217
[Credential-related source omitted] - Possible obfuscationline 234
sys.stdout.buffer.write(base64.b64decode(data)) - Network accessline 285
# Build curl args via set -- to avoid word splitting on spaces in headers - Network accessline 286
set -- curl -s -w '%{http_code}' -o "$_resp_file" -D "$_header_file" -X "$_method" - Dangerous shell operationline 300
rm -rf "$_tmpdir_http" "$_hr_tmpdir" - Dangerous shell operationline 305
rm -rf "$_tmpdir_http" "$_hr_tmpdir" - Dangerous shell operationline 314
rm -rf "$_tmpdir_http" "$_hr_tmpdir" - Dangerous shell operationline 326
rm -rf "$_tmpdir_http" - Dangerous shell operationline 331
rm -rf "$_tmpdir_http" "$_hr_tmpdir" - Dangerous shell operationline 336
rm -rf "$_hr_tmpdir" - Dangerous shell operationline 363
rm -f "$CACHE_DIR/iam_token.json" - Access to secretsline 394
[Credential-related source omitted] - Dangerous shell operationline 408
rm -f "$_cache_file" - Access to secretsline 424
[Credential-related source omitted] - Access to secretsline 425
[Credential-related source omitted] - Access to secretsline 461
[Credential-related source omitted] - Access to secretsline 470
[Credential-related source omitted] - Access to secretsline 476
[Credential-related source omitted] - Access to secretsline 498
[Credential-related source omitted] - Access to secretsline 595
[Credential-related source omitted] - Dangerous shell operationline 621
rm -f "$CACHE_DIR/results/$1.md" - Access to secretsline 638
[Credential-related source omitted] - Access to secretsline 644
[Credential-related source omitted] - Access to secretsline 645
[Credential-related source omitted] - Access to secretsline 685
[Credential-related source omitted] - Access to secretsline 715
[Credential-related source omitted] - Access to secretsline 718
[Credential-related source omitted] - Access to secretsline 719
[Credential-related source omitted] - Access to secretsline 720
[Credential-related source omitted] - Access to secretsline 734
[Credential-related source omitted] - Access to secretsline 737
[Credential-related source omitted]
plugins/yandex-search-api/skills/yandex-search-api/scripts/iam_token_get.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 47
trap 'rm -rf "$SECURE_TMP"' EXIT INT TERM - Access to secretsline 60
[Credential-related source omitted] - Access to secretsline 61
[Credential-related source omitted] - Network accessline 81
payload = json.dumps({ "iss": sa_id, "aud": "https://iam.api.cloud.yandex.net/iam/v1/tokens", - Network accessline 82
"iss": sa_id, "aud": "https://iam.api.cloud.yandex.net/iam/v1/tokens", "iat": now, - Network accessline 83
"aud": "https://iam.api.cloud.yandex.net/iam/v1/tokens", - Access to secretsline 156
[Credential-related source omitted] - Access to secretsline 163
[Credential-related source omitted]
plugins/yandex-search-api/skills/yandex-search-api/scripts/regions_tree.sh
- Executable scriptline 1
#!/bin/sh
plugins/yandex-search-api/skills/yandex-search-api/scripts/search_region.sh
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/fixtures/broken_response.xml
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/fixtures/infocontext_live.json
- Network accessline 2
"docs": [ { "FullUrl": "https://www.nalog.gov.ru/rn77/news/activities_fts/16001234/", - Network accessline 3
{ "FullUrl": "https://www.nalog.gov.ru/rn77/news/activities_fts/16001234/", "rich_data": { - Network accessline 4
"FullUrl": "https://www.nalog.gov.ru/rn77/news/activities_fts/16001234/", - Network accessline 7
"DocumentTitle": "Об изменениях в главе 26.2 НК РФ", "Description": "ФНС России разъясняет порядок уплаты НДС на УСН", "FullUrl": "https://www.nalog.gov.ru/rn77/news/activities_fts/16001234/", - Network accessline 8
"Description": "ФНС России разъясняет порядок уплаты НДС на УСН", "FullUrl": "https://www.nalog.gov.ru/rn77/news/activities_fts/16001234/", "ForcedShortUrl": "nalog.gov.ru", - Network accessline 9
"FullUrl": "https://www.nalog.gov.ru/rn77/news/activities_fts/16001234/", - Network accessline 17
}, { "FullUrl": "https://www.klerk.ru/buh/articles/600123/", - Network accessline 18
{ "FullUrl": "https://www.klerk.ru/buh/articles/600123/", "rich_data": { - Network accessline 19
"FullUrl": "https://www.klerk.ru/buh/articles/600123/", - Network accessline 22
"DocumentTitle": "НДС при УСН с 2026 года: таблица лимитов", "Description": "", "FullUrl": "https://www.klerk.ru/buh/articles/600123/", - Network accessline 23
"Description": "", "FullUrl": "https://www.klerk.ru/buh/articles/600123/", "ForcedShortUrl": "klerk.ru", - Network accessline 24
"FullUrl": "https://www.klerk.ru/buh/articles/600123/", - Network accessline 30
}, { "FullUrl": "https://its.1c.ru/db/answers/content/900123/", - Network accessline 31
{ "FullUrl": "https://its.1c.ru/db/answers/content/900123/", "rich_data": { - Network accessline 32
"FullUrl": "https://its.1c.ru/db/answers/content/900123/", - Network accessline 35
"DocumentTitle": "Ставки НДС для упрощенцев", "Description": "Материал доступен по подписке", "FullUrl": "https://its.1c.ru/db/answers/content/900123/", - Network accessline 36
"Description": "Материал доступен по подписке", "FullUrl": "https://its.1c.ru/db/answers/content/900123/", "ForcedShortUrl": "its.1c.ru", - Network accessline 37
"FullUrl": "https://its.1c.ru/db/answers/content/900123/",
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/fixtures/infocontext_response.json
- Network accessline 4
"Num": 1, "DocumentTitle": "Yandex Cloud", "FullUrl": "https://yandex.cloud/ru/docs", - Network accessline 5
"DocumentTitle": "Yandex Cloud", "FullUrl": "https://yandex.cloud/ru/docs", "Description": "Облачная платформа Yandex Cloud", - Network accessline 6
"FullUrl": "https://yandex.cloud/ru/docs", - Network accessline 11
"Num": 2, "DocumentTitle": "Документ без инфоконтекста", "FullUrl": "https://nopack.example.org/b", - Network accessline 12
"DocumentTitle": "Документ без инфоконтекста", "FullUrl": "https://nopack.example.org/b", "Description": "Описание есть, инфоконтекста нет", - Network accessline 13
"FullUrl": "https://nopack.example.org/b", - Network accessline 18
"Num": 3, "DocumentTitle": "Compute Cloud", "FullUrl": "https://split.example.net/c?utm=1", - Network accessline 19
"DocumentTitle": "Compute Cloud", "FullUrl": "https://split.example.net/c?utm=1", "Description": "", - Network accessline 20
"FullUrl": "https://split.example.net/c?utm=1",
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/fixtures/search_response.xml
- Network accessline 12
<doccount>1</doccount> <doc id="Z1"> <url>https://example.com/a</url> - Network accessline 13
<doc id="Z1"> <url>https://example.com/a</url> <domain>example.com</domain> - Network accessline 14
<url>https://example.com/a</url> - Network accessline 26
<doccount>1</doccount> <doc id="Z2"> <url>https://second.example.org/b</url> - Network accessline 27
<doc id="Z2"> <url>https://second.example.org/b</url> <domain>second.example.org</domain> - Network accessline 28
<url>https://second.example.org/b</url> - Network accessline 39
<doccount>1</doccount> <doc id="Z3"> <url>https://third.example.net/c</url> - Network accessline 40
<doc id="Z3"> <url>https://third.example.net/c</url> <domain>third.example.net</domain> - Network accessline 41
<url>https://third.example.net/c</url>
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/helpers.sh
- Executable scriptline 1
#!/bin/sh - Access to secretsline 12
[Credential-related source omitted] - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 30
[Credential-related source omitted] - Dangerous shell operationline 33
[Credential-related source omitted] - Access to secretsline 33
[Credential-related source omitted]
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/run.sh
- Executable scriptline 1
#!/bin/sh
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/test_api_key_auth.sh
- Executable scriptline 1
#!/bin/sh - Access to secretsline 7
[Credential-related source omitted] - Dangerous shell operationline 12
trap 'rm -rf "$td"' EXIT INT TERM - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 24
[Credential-related source omitted] - Access to secretsline 25
[Credential-related source omitted] - Network accessline 35
cat > "$td/bin/curl" <<'EOF' - Network accessline 77
. "$(dirname "$0")/common.sh" load_config auth_request POST 'https://searchapi.api.cloud.yandex.net/v2/web/search' '{}' - Network accessline 78
load_config auth_request POST 'https://searchapi.api.cloud.yandex.net/v2/web/search' '{}' EOF - Network accessline 79
auth_request POST 'https://searchapi.api.cloud.yandex.net/v2/web/search' '{}' - Dangerous shell operationline 114
[Credential-related source omitted] - Access to secretsline 114
[Credential-related source omitted] - Access to secretsline 119
[Credential-related source omitted] - Access to secretsline 143
[Credential-related source omitted] - Dangerous shell operationline 144
rm -f "$IAM_MARKER" "$CURL_CAPTURE" - Dangerous shell operationline 169
rm "$td/skill/cache/iam_token.json" "$CURL_CAPTURE" - Dangerous shell operationline 176
rm "$IAM_MARKER" "$CURL_CAPTURE"
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/test_api_key_scripts.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 12
trap 'rm -rf "$root"' EXIT INT TERM - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 28
[Credential-related source omitted] - Access to secretsline 29
[Credential-related source omitted] - Network accessline 40
import base64 xml = b'''<yandexsearch><response><results><grouping><group><doc> <url>https://example.com/</url><title>Example result</title> - Network accessline 41
xml = b'''<yandexsearch><response><results><grouping><group><doc> <url>https://example.com/</url><title>Example result</title> <passages><passage>Example snippet</passage></passages> - Network accessline 42
<url>https://example.com/</url><title>Example result</title> - Network accessline 49
cat > "$td/bin/curl" <<'EOF' - Access to secretsline 132
[Credential-related source omitted] - Access to secretsline 133
[Credential-related source omitted] - Network accessline 153
exit 1 } grep -Fq 'https://example.com/' "$result_file" || { - Network accessline 154
} grep -Fq 'https://example.com/' "$result_file" || { echo 'FAIL: parsed result does not contain the fake search document' - Network accessline 155
grep -Fq 'https://example.com/' "$result_file" || {
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/test_build_search_body.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 10
trap 'rm -rf "$TMP_DIR"' EXIT - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 46
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 62
[Credential-related source omitted]
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/test_cache.sh
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/test_cli.sh
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/test_config.sh
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/test_iam_token_get.sh
- Executable scriptline 1
#!/bin/sh - Network accessline 2
# Issue and cache an IAM token with the real iam_token_get.sh, openssl and curl # stubbed. Every path contains a quote and a backslash: values pasted into - Dangerous shell operationline 12
trap 'rm -rf "$root"' EXIT INT TERM - Network accessline 38
cat > "$td/bin/curl" <<'EOF'
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/test_parse_response.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 10
trap 'rm -rf "$TMP_DIR"' EXIT - Network accessline 29
check "$TMP_DIR/xml.json" 'len(data) == 3' "expected 3 documents from XML" check "$TMP_DIR/xml.json" '[d["position"] for d in data] == [1, 2, 3]' "positions must be 1..3" check "$TMP_DIR/xml.json" 'data[0]["url"] == "https://example.com/a"' - Network accessline 30
check "$TMP_DIR/xml.json" '[d["position"] for d in data] == [1, 2, 3]' "positions must be 1..3" check "$TMP_DIR/xml.json" 'data[0]["url"] == "https://example.com/a"' "url not parsed from XML" check "$TMP_DIR/xml.json" 'data[0]["domain"] == - Network accessline 31
check "$TMP_DIR/xml.json" 'data[0]["url"] == "https://example.com/a"' "url not parsed from XML" - Network accessline 46
check "$TMP_DIR/ic.json" '[d["position"] for d in data] == [1, 2, 3]' "Num must become position" check "$TMP_DIR/ic.json" 'data[0]["title"] == "Yandex Cloud"' "DocumentTitle must become title" check "$TMP_DIR/ic.json" 'data[0]["url"] == "ht - Network accessline 47
check "$TMP_DIR/ic.json" 'data[0]["title"] == "Yandex Cloud"' "DocumentTitle must become title" check "$TMP_DIR/ic.json" 'data[0]["url"] == "https://yandex.cloud/ru/docs"' \ "FullUrl must become url" - Network accessline 48
check "$TMP_DIR/ic.json" 'data[0]["url"] == "https://yandex.cloud/ru/docs"' \ - Network accessline 70
printf '{"docs": [{"Num": "7", "DocumentTitle": "T", "FullUrl": "https://e.ru/", "info_context": "x"}]}' \
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/test_render.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 10
trap 'rm -rf "$TMP_DIR"' EXIT - Network accessline 34
grep -q 'Регион 225 · документов: 3 · с выдержками: 2' "$TMP_DIR/pack.md" || fail "pack header wrong" grep -q '^## 1\. Yandex Cloud$' "$TMP_DIR/pack.md" || fail "document heading missing" grep -q '^https://yandex.cloud/ru/docs$' "$TMP_DIR/p - Network accessline 35
grep -q '^## 1\. Yandex Cloud$' "$TMP_DIR/pack.md" || fail "document heading missing" grep -q '^https://yandex.cloud/ru/docs$' "$TMP_DIR/pack.md" || fail "document url missing" grep -q 'более 100 сервисов' "$TMP_DIR/pack.md" || fail "infoco - Network accessline 36
grep -q '^https://yandex.cloud/ru/docs$' "$TMP_DIR/pack.md" || fail "document url missing" - Network accessline 57
render_results_table "$TMP_DIR/plain.json" "" "full" "купить дымоход" > "$TMP_DIR/plain.txt" grep -q 'символов' "$TMP_DIR/plain.txt" && fail "snippet table shown for a plain search" grep -q 'https://example.com/a' "$TMP_DIR/plain.txt" || fa - Network accessline 58
grep -q 'символов' "$TMP_DIR/plain.txt" && fail "snippet table shown for a plain search" grep -q 'https://example.com/a' "$TMP_DIR/plain.txt" || fail "url must stay in stdout without snippets" grep -q 'Всего: 3, с выдержками: 0' "$TMP_DIR/p - Network accessline 59
grep -q 'https://example.com/a' "$TMP_DIR/plain.txt" || fail "url must stay in stdout without snippets" - Network accessline 107
OUT="$TMP_DIR/many.json" python3 -c ' import json, os docs = [{"position": i, "url": "https://e%d.ru/p" % i, "title": "T%d" % i, - Network accessline 108
import json, os docs = [{"position": i, "url": "https://e%d.ru/p" % i, "title": "T%d" % i, "snippet": "s" * 200, "domain": "e%d.ru" % i, "extract": ""} - Network accessline 109
docs = [{"position": i, "url": "https://e%d.ru/p" % i, "title": "T%d" % i, - Access to secretsline 112
[Credential-related source omitted]
plugins/yandex-search-api/skills/yandex-search-api/scripts/tests/test_search_region.sh
- Executable scriptline 1
#!/bin/sh
plugins/yandex-search-api/skills/yandex-search-api/scripts/web_search_async.sh
plugins/yandex-search-api/skills/yandex-search-api/scripts/web_search_sync.sh
- Executable scriptline 1
#!/bin/sh
plugins/yandex-webmaster/skills/yandex-webmaster/.gitignore
- Access to secretsline 1
[Credential-related source omitted]
plugins/yandex-webmaster/skills/yandex-webmaster/SKILL.md
plugins/yandex-webmaster/skills/yandex-webmaster/config/README.md
- Network accessline 5
1. Перейдите на https://oauth.yandex.ru/client/new - Network accessline 13
Подробнее: https://yandex.ru/dev/id/doc/ru/register-client - Network accessline 20
https://oauth.yandex.ru/authorize?response_type=token&client_id=ВАШ_CLIENT_ID - Network accessline 25
[Credential-related source omitted] - Access to secretsline 25
[Credential-related source omitted] - Access to secretsline 28
[Credential-related source omitted] - Access to secretsline 33
[Credential-related source omitted] - Network accessline 59
Где взять: 1. Откройте https://webmaster.yandex.ru в обычном залогиненном Chrome. - Network accessline 60
1. Откройте https://webmaster.yandex.ru в обычном залогиненном Chrome. - Network accessline 61
2. DevTools (F12) → **Application** → **Cookies** → `https://yandex.ru` - Network accessline 73
- Webmaster API: https://yandex.ru/dev/webmaster/doc/ru/ - Network accessline 74
- OAuth: https://yandex.ru/dev/id/doc/ru/
plugins/yandex-webmaster/skills/yandex-webmaster/references/ALICE_EFFICIENCY.md
- Network accessline 9
В [каталоге ресурсов Webmaster API](https://yandex.ru/dev/webmaster/doc/ru/concepts/getting-started) - Network accessline 15
https://webmaster.yandex.ru/site/{host_id}/efficiency/alice/ - Network accessline 103
"queries": { "GENERAL": [ // топ-10 сайтов в нише { "url": "https://www.ivd.ru", "favicon": "..." } - Network accessline 104
"GENERAL": [ // топ-10 сайтов в нише { "url": "https://www.ivd.ru", "favicon": "..." } ], - Network accessline 105
{ "url": "https://www.ivd.ru", "favicon": "..." } - Network accessline 111
"urls": [ { "url": "https://metallik.ru/articles/...", - Network accessline 112
{ "url": "https://metallik.ru/articles/...", "title": "Шибер для дымохода ...", - Network accessline 113
"url": "https://metallik.ru/articles/...", - Network accessline 114
"title": "Шибер для дымохода ...", "host": "https://metallik.ru", "favicon": "..." - Network accessline 115
"host": "https://metallik.ru",
plugins/yandex-webmaster/skills/yandex-webmaster/references/DOCTORS_SCHEDULE.md
plugins/yandex-webmaster/skills/yandex-webmaster/references/FEEDS.md
- Network accessline 31
bash scripts/feeds.sh --host example.com --action add \ --url "https://example.com/feed.yml" \ - Network accessline 32
--url "https://example.com/feed.yml" \ - Network accessline 50
bash scripts/feeds.sh --host example.com --action change \ --url "https://example.com/feed.yml" \ - Network accessline 51
--url "https://example.com/feed.yml" \ - Network accessline 67
Полный список: [Справочник регионов](https://yandex.ru/dev/webmaster/doc/ru/reference/feeds-regions)
plugins/yandex-webmaster/skills/yandex-webmaster/references/RECRAWL.md
- Network accessline 14
bash scripts/recrawl.sh --host example.com --action submit --url "https://example.com/updated-page"
plugins/yandex-webmaster/skills/yandex-webmaster/references/SITEMAPS.md
- Network accessline 31
bash scripts/sitemaps.sh --host example.com --action add --url https://example.com/sitemap.xml
plugins/yandex-webmaster/skills/yandex-webmaster/references/SITE_MANAGEMENT.md
- Network accessline 6
bash scripts/add_site.sh --url https://example.com
plugins/yandex-webmaster/skills/yandex-webmaster/references/SITE_STATS.md
- Network accessline 67
bash scripts/important_urls.sh --host example.com --action history --url "https://example.com/page"
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/add_site.sh
- Executable scriptline 1
#!/bin/sh - Network accessline 20
if [ -z "$URL" ]; then echo "Error: --url <site_url> is required." >&2 echo "Example: bash scripts/add_site.sh --url https://example.com" >&2 - Network accessline 21
echo "Error: --url <site_url> is required." >&2 echo "Example: bash scripts/add_site.sh --url https://example.com" >&2 exit 1 - Network accessline 22
echo "Example: bash scripts/add_site.sh --url https://example.com" >&2 - Dangerous shell operationline 29
trap 'rm -f "$TMPFILE"' EXIT - Dangerous shell operationline 43
rm -f "$CACHE_DIR/hosts.tsv" "$CACHE_DIR/hosts.json"
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/alice.sh
- Executable scriptline 1
#!/bin/sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/alice_efficiency.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 17
import argparse import errno import http.client - Network accessline 18
import errno import http.client import json - Network accessline 19
import http.client - Access to secretsline 47
[Credential-related source omitted] - Network accessline 62
ALICE_URL_TEMPLATE = ( "https://webmaster.yandex.ru/site/{host_id}/efficiency/alice/" - Network accessline 63
"https://webmaster.yandex.ru/site/{host_id}/efficiency/alice/" - Network accessline 115
if isinstance(reason, ssl.SSLError): return False return isinstance(reason, (TimeoutError, ConnectionError, http.client.IncompleteRead)) or ( - Network accessline 116
return False return isinstance(reason, (TimeoutError, ConnectionError, http.client.IncompleteRead)) or ( isinstance(reason, OSError) and reason.errno in { - Network accessline 117
return isinstance(reason, (TimeoutError, ConnectionError, http.client.IncompleteRead)) or ( - Network accessline 125
def fetch_html(host_id: str, session_id: str, raw_path: str) -> str: url = ALICE_URL_TEMPLATE.format(host_id=host_id) req = urllib.request.Request( - Network accessline 126
url = ALICE_URL_TEMPLATE.format(host_id=host_id) req = urllib.request.Request( url, - Network accessline 127
req = urllib.request.Request( - Network accessline 147
status = resp.code headers = resp.headers except (urllib.error.URLError, OSError, http.client.HTTPException) as error: - Network accessline 148
headers = resp.headers except (urllib.error.URLError, OSError, http.client.HTTPException) as error: reason = error.reason if isinstance(error, urllib.error.URLError) else error - Network accessline 149
except (urllib.error.URLError, OSError, http.client.HTTPException) as error: - Network accessline 254
if not args.session_id: fail("SESSION_ID is required for fetch (set in config/.env)") - Network accessline 255
fail("SESSION_ID is required for fetch (set in config/.env)") - Access to secretsline 404
[Credential-related source omitted]
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/archive_export.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/common.sh
- Executable scriptline 1
#!/bin/sh - Access to secretsline 8
[Credential-related source omitted] - Network accessline 11
WEBMASTER_API="https://api.webmaster.yandex.net" - Access to secretsline 19
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Access to secretsline 24
[Credential-related source omitted] - Access to secretsline 26
[Credential-related source omitted] - Dangerous shell operationline 42
trap 'rm -f "$_eui_tmp"' EXIT - Dangerous shell operationline 50
rm -f "$_eui_tmp" - Dangerous shell operationline 56
rm -f "$_eui_tmp" - Dangerous shell operationline 140
rm -f "$_rhc_tmp" - Network accessline 148
_wrg_path="$1" shift _wrg_url="${WEBMASTER_API}${_wrg_path}" - Network accessline 149
shift _wrg_url="${WEBMASTER_API}${_wrg_path}" _wrg_headers="${WM_TMPDIR}/wm_headers_$$.txt" - Network accessline 150
_wrg_url="${WEBMASTER_API}${_wrg_path}" - Network accessline 153
[Credential-related source omitted] - Access to secretsline 153
[Credential-related source omitted] - Network accessline 154
[Credential-related source omitted] - Access to secretsline 154
[Credential-related source omitted] - Network accessline 155
"$@" \ "$_wrg_url") || { rm -f "$_wrg_headers" - Network accessline 156
"$_wrg_url") || { rm -f "$_wrg_headers" echo "Error: curl failed for $_wrg_url" >&2 - Dangerous shell operationline 157
rm -f "$_wrg_headers" - Network accessline 157
rm -f "$_wrg_headers" echo "Error: curl failed for $_wrg_url" >&2 return 1 - Network accessline 158
echo "Error: curl failed for $_wrg_url" >&2 - Dangerous shell operationline 167
rm -f "$_wrg_headers" - Dangerous shell operationline 183
rm -f "$_wrg_headers" - Network accessline 187
echo "Error: HTTP $_wrg_status — $_wrg_err_code: $_wrg_err_msg" >&2 else echo "Error: HTTP $_wrg_status from $_wrg_url" >&2 - Network accessline 188
else echo "Error: HTTP $_wrg_status from $_wrg_url" >&2 echo "$_wrg_body" >&2 - Network accessline 189
echo "Error: HTTP $_wrg_status from $_wrg_url" >&2 - Dangerous shell operationline 195
rm -f "$_wrg_headers" - Network accessline 202
_wrp_path="$1" _wrp_body_data="$2" _wrp_url="${WEBMASTER_API}${_wrp_path}" - Network accessline 203
_wrp_body_data="$2" _wrp_url="${WEBMASTER_API}${_wrp_path}" _wrp_headers="${WM_TMPDIR}/wm_headers_$$.txt" - Network accessline 204
_wrp_url="${WEBMASTER_API}${_wrp_path}" - Network accessline 207
[Credential-related source omitted] - Access to secretsline 207
[Credential-related source omitted] - Access to secretsline 208
[Credential-related source omitted] - Network accessline 209
-H "Content-Type: application/json; charset=UTF-8" \ -d "$_wrp_body_data" \ "$_wrp_url") || { - Network accessline 210
-d "$_wrp_body_data" \ "$_wrp_url") || { rm -f "$_wrp_headers" - Network accessline 211
"$_wrp_url") || { rm -f "$_wrp_headers" echo "Error: curl failed for $_wrp_url" >&2 - Dangerous shell operationline 212
rm -f "$_wrp_headers" - Network accessline 212
rm -f "$_wrp_headers" echo "Error: curl failed for $_wrp_url" >&2 return 1 - Network accessline 213
echo "Error: curl failed for $_wrp_url" >&2 - Dangerous shell operationline 221
rm -f "$_wrp_headers" - Dangerous shell operationline 236
rm -f "$_wrp_headers" - Network accessline 240
echo "Error: HTTP $_wrp_status — $_wrp_err_code: $_wrp_err_msg" >&2 else echo "Error: HTTP $_wrp_status from $_wrp_url" >&2 - Network accessline 241
else echo "Error: HTTP $_wrp_status from $_wrp_url" >&2 echo "$_wrp_resp" >&2 - Network accessline 242
echo "Error: HTTP $_wrp_status from $_wrp_url" >&2 - Dangerous shell operationline 248
rm -f "$_wrp_headers" - Dangerous shell operationline 315
rm -f "$_cgt_file" - Network accessline 465
# add_date_params — builds curl args for date_from/date_to
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/diagnostics.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/external_links.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/feeds.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 36
trap 'rm -f "$TMPFILE"' EXIT - Dangerous shell operationline 54
rm -f "$_list_tmp" - Network accessline 78
# Reads feed definitions from stdin (JSON array) # Example: echo '[{"url":"https://a.com/f.yml","type":"GOODS"},{"url":"https://b.com/f.yml","type":"REALTY","regionIds":[213]}]' | bash scripts/feeds.sh --host ... --action batch-add - Network accessline 79
# Example: echo '[{"url":"https://a.com/f.yml","type":"GOODS"},{"url":"https://b.com/f.yml","type":"REALTY","regionIds":[213]}]' | bash scripts/feeds.sh --host ... --action batch-add
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/host_info.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/hosts.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/important_urls.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/indexing.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/insearch.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/internal_links.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/popular_queries.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/queries_history.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/query_analytics.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/recrawl.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/regions.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/search_events.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/search_export.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/sitemaps.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/sqi_history.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/summary.sh
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/tests/test_alice_efficiency.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 34
], "queries": { "GENERAL": [{"url": "https://competitor.test/"}], - Network accessline 35
"queries": { "GENERAL": [{"url": "https://competitor.test/"}], "EXAMPLES": { - Network accessline 36
"GENERAL": [{"url": "https://competitor.test/"}], - Network accessline 39
"query": "купить металл", "urls": [{ "host": "example.test", "url": "https://example.test/", - Network accessline 40
"urls": [{ "host": "example.test", "url": "https://example.test/", "title": "Металл", - Network accessline 41
"host": "example.test", "url": "https://example.test/", - Network accessline 46
"query": "доставка металла", "urls": [{ "host": "competitor.test", "url": "https://competitor.test/", - Network accessline 47
"urls": [{ "host": "competitor.test", "url": "https://competitor.test/", "title": "Доставка", - Network accessline 48
"host": "competitor.test", "url": "https://competitor.test/", - Network accessline 287
sov = self.cache.with_name("sov.tsv").read_text(encoding="utf-8") self.assertIn("2026-01-01\t2026-01-07\t0.1000\t10.00%", sov) self.assertIn("40\thttps://competitor.test/", self.cache.with_name("competitors.tsv").read_text() - Network accessline 289
self.assertIn("40\thttps://competitor.test/", self.cache.with_name("competitors.tsv").read_text()) - Network accessline 292
data = copy.deepcopy(SAMPLE) item = data["queries"]["EXAMPLES"]["hasOwnExamples"][0] item["query"] = "купить\tметалл\nс доставкой" - Network accessline 293
item = data["queries"]["EXAMPLES"]["hasOwnExamples"][0] item["query"] = "купить\tметалл\nс доставкой" item["urls"][0]["title"] = "Первая\r\nстрока" - Network accessline 294
item["query"] = "купить\tметалл\nс доставкой" - Network accessline 295
item["urls"][0]["title"] = "Первая\r\nстрока" item["urls"].append({"host": "second.test", "url": "https://second.test/", "title": None}) self.write_cache(data) - Network accessline 296
item["urls"].append({"host": "second.test", "url": "https://second.test/", "title": None}) - Network accessline 304
self.assertEqual(len(lines), 3) self.assertEqual(lines[1].split("\t"), [ "купить металл с доставкой", "1", "example.test", "https://example.test/", "Первая строка", - Network accessline 305
self.assertEqual(lines[1].split("\t"), [ "купить металл с доставкой", "1", "example.test", "https://example.test/", "Первая строка", ]) - Network accessline 306
"купить металл с доставкой", "1", "example.test", "https://example.test/", "Первая строка", - Network accessline 307
]) self.assertEqual(lines[2].split("\t"), [ "купить металл с доставкой", "2", "second.test", "https://second.test/", "", - Network accessline 308
self.assertEqual(lines[2].split("\t"), [ "купить металл с доставкой", "2", "second.test", "https://second.test/", "", ]) - Network accessline 309
"купить металл с доставкой", "2", "second.test", "https://second.test/", "", - Access to secretsline 338
[Credential-related source omitted]
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/tests/test_alice_network.py
- Executable scriptline 1
Executable file - Network accessline 31
class Handler(BaseHTTPRequestHandler): def do_GET(self): requests.append((self.path, self.headers)) - Network accessline 32
def do_GET(self): requests.append((self.path, self.headers)) status, headers, body = responses.pop(0) if responses else (599, {}, b"") - Network accessline 33
requests.append((self.path, self.headers)) - Network accessline 54
self.raw = Path(temporary.name) / "raw.html" self.raw.write_text("previous response", encoding="utf-8") address = f"http://127.0.0.1:{server.server_port}/{{host_id}}/" - Network accessline 55
self.raw.write_text("previous response", encoding="utf-8") address = f"http://127.0.0.1:{server.server_port}/{{host_id}}/" patches = contextlib.ExitStack() - Network accessline 56
address = f"http://127.0.0.1:{server.server_port}/{{host_id}}/" - Network accessline 67
def fetch(self): - Network accessline 71
stderr = io.StringIO() with contextlib.redirect_stderr(stderr), self.assertRaises(SystemExit) as error: self.fetch() - Network accessline 72
with contextlib.redirect_stderr(stderr), self.assertRaises(SystemExit) as error: self.fetch() self.assertNotEqual(error.exception.code, 0) - Network accessline 73
self.fetch() - Network accessline 82
original = urllib.request.OpenerDirector.open with mock.patch.object(urllib.request.OpenerDirector, "open", autospec=True, side_effect=original) as open_url: self.assertEqual(self.fetch(), html) - Network accessline 83
with mock.patch.object(urllib.request.OpenerDirector, "open", autospec=True, side_effect=original) as open_url: self.assertEqual(self.fetch(), html) self.assertEqual(open_url.call_args.kwargs["timeout"], 30) - Network accessline 84
self.assertEqual(self.fetch(), html) - Network accessline 92
for status in (429, 500, 502, 503, 504): with self.subTest(status=status): self.requests.clear() - Network accessline 93
with self.subTest(status=status): self.requests.clear() self.sleep.reset_mock() - Network accessline 94
self.requests.clear() - Network accessline 95
self.sleep.reset_mock() self.responses.extend([(status, {}, b"temporary"), (200, {}, b"complete")]) self.assertEqual(self.fetch(), "complete") - Network accessline 96
self.responses.extend([(status, {}, b"temporary"), (200, {}, b"complete")]) self.assertEqual(self.fetch(), "complete") self.assertEqual(len(self.requests), 2) - Network accessline 97
self.assertEqual(self.fetch(), "complete") - Network accessline 112
self.sleep.reset_mock() self.responses.extend([(429, {"Retry-After": header}, b"wait"), (200, {}, b"ok")]) self.assertEqual(self.fetch(), "ok") - Network accessline 113
self.responses.extend([(429, {"Retry-After": header}, b"wait"), (200, {}, b"ok")]) self.assertEqual(self.fetch(), "ok") self.sleep.assert_called_once() - Network accessline 114
self.assertEqual(self.fetch(), "ok") - Network accessline 121
for header in ("120", formatdate(time.time() + 120, usegmt=True)): with self.subTest(header=header): self.requests.clear() - Network accessline 122
with self.subTest(header=header): self.requests.clear() self.responses.append((429, {"Retry-After": header}, b"wait longer")) - Network accessline 123
self.requests.clear() - Network accessline 131
for status in (400, 401, 403, 404): with self.subTest(status=status): self.requests.clear() - Network accessline 132
with self.subTest(status=status): self.requests.clear() self.responses.append((status, {}, b"error page")) - Network accessline 133
self.requests.clear() - Network accessline 140
def test_redirect_is_saved_but_never_followed(self): for location in ("https://passport.yandex.ru/auth", "/showcaptcha", "/somewhere-else"): - Network accessline 141
for location in ("https://passport.yandex.ru/auth", "/showcaptcha", "/somewhere-else"): with self.subTest(location=location): self.requests.clear() - Network accessline 142
with self.subTest(location=location): self.requests.clear() self.responses.append((302, {"Location": location}, b"redirect page")) - Network accessline 143
self.requests.clear()
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/tests/test_host_search.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 52
(cache_dir / "user_id.txt").write_text("123", encoding="utf-8") hosts = [ {"host_id": f"https:{domain}:443", "ascii_host_url": f"https://{domain}/", "verified": True} - Network accessline 53
hosts = [ {"host_id": f"https:{domain}:443", "ascii_host_url": f"https://{domain}/", "verified": True} for domain in [pair[1] for pair in DOMAINS] + ["example.com"] - Network accessline 54
{"host_id": f"https:{domain}:443", "ascii_host_url": f"https://{domain}/", "verified": True} - Network accessline 82
def test_ascii_search_stays_literal_without_python(self): self.python.unlink() for term in ("example.com", "exam", "HTTPS://Example.COM:443/", DOMAINS[0][1]): - Network accessline 83
self.python.unlink() for term in ("example.com", "exam", "HTTPS://Example.COM:443/", DOMAINS[0][1]): with self.subTest(term=term): - Network accessline 84
for term in ("example.com", "exam", "HTTPS://Example.COM:443/", DOMAINS[0][1]): - Network accessline 106
unicode_domain, ascii_domain = DOMAINS[0] urls = ( (f"https://{unicode_domain}/", f"https://{ascii_domain}/"), - Network accessline 107
urls = ( (f"https://{unicode_domain}/", f"https://{ascii_domain}/"), (f"https://{unicode_domain.upper()}:8443/path?q=1#part", f"https://{ascii_domain}:8443/path?q=1#part"), - Network accessline 108
(f"https://{unicode_domain}/", f"https://{ascii_domain}/"), - Network accessline 109
(f"https://{unicode_domain.upper()}:8443/path?q=1#part", f"https://{ascii_domain}:8443/path?q=1#part"), - Network accessline 119
def test_resolve_host_accepts_unicode_domains_and_root_urls(self): for unicode_domain, ascii_domain in DOMAINS: for term in (unicode_domain, f"https://{unicode_domain}/", f"HTTPS://{unicode_domain.upper()}/", f"{unicode_ - Network accessline 120
for unicode_domain, ascii_domain in DOMAINS: for term in (unicode_domain, f"https://{unicode_domain}/", f"HTTPS://{unicode_domain.upper()}/", f"{unicode_domain}/"): with self.subTest(term=term): - Network accessline 121
for term in (unicode_domain, f"https://{unicode_domain}/", f"HTTPS://{unicode_domain.upper()}/", f"{unicode_domain}/"): - Network accessline 130
for refresh in (False, True): with self.subTest(domain=unicode_domain, refresh=refresh): args = ["--search", f"https://{unicode_domain}/"] - Network accessline 131
with self.subTest(domain=unicode_domain, refresh=refresh): args = ["--search", f"https://{unicode_domain}/"] if refresh: - Network accessline 132
args = ["--search", f"https://{unicode_domain}/"]
plugins/yandex-webmaster/skills/yandex-webmaster/scripts/verify.sh
plugins/yandex-wordstat/skills/yandex-wordstat/.gitignore
- Access to secretsline 2
[Credential-related source omitted]
plugins/yandex-wordstat/skills/yandex-wordstat/SKILL.md
- Network accessline 304
Актуальные ограничения для Wordstat приведены в [документации Yandex Search API](https://aistudio.yandex.ru/ru/docs/search-api/concepts/limits).
plugins/yandex-wordstat/skills/yandex-wordstat/config/.env.example
plugins/yandex-wordstat/skills/yandex-wordstat/config/README.md
- Network accessline 3
Скилл поддерживает только Wordstat API в Yandex Cloud Search API v2: `https://searchapi.api.cloud.yandex.net/v2/wordstat`. - Network accessline 25
1. Откройте [консоль Yandex Cloud](https://console.yandex.cloud/) - Network accessline 84
Метод `dynamics` (`scripts/dynamics.sh`) поддерживает все [операторы поиска Wordstat](https://yandex.ru/support/direct/keywords/symbols-and-operators.html) **только при детализации `daily`**. При `weekly` и `monthly` доступен **только опера - Network accessline 86
Это ограничение на стороне Yandex Cloud Search API — задокументировано в [официальной документации](https://aistudio.yandex.ru/docs/ru/search-api/operations/wordstat-getdynamics.html). - Access to secretsline 107
[Credential-related source omitted] - Network accessline 141
- [Документация Wordstat API](https://aistudio.yandex.ru/docs/ru/search-api/concepts/wordstat.html) - Network accessline 142
- [Актуальные квоты и лимиты Wordstat](https://aistudio.yandex.ru/ru/docs/search-api/concepts/limits) - Network accessline 143
- [Тарификация](https://yandex.cloud/ru/docs/search-api/pricing) - Network accessline 144
- [Операторы поиска](https://yandex.ru/support/direct/keywords/symbols-and-operators.html) - Network accessline 152
1. Откройте [консоль Yandex Cloud](https://console.yandex.cloud/), выберите каталог → Identity and Access Management → Сервисные аккаунты → нужный аккаунт → API-ключи. - Access to secretsline 159
[Credential-related source omitted] - Access to secretsline 160
[Credential-related source omitted] - Access to secretsline 163
[Credential-related source omitted] - Access to secretsline 164
[Credential-related source omitted] - Access to secretsline 165
[Credential-related source omitted]
plugins/yandex-wordstat/skills/yandex-wordstat/references/MISSED_DEMAND.md
- Network accessline 19
https://direct.yandex.ru/dna/groups-edit?ulogin={login}&campaigns-ids={campaign_id}&groups-ids={group_id} - Network accessline 267
Группа «Ретро-телефоны» (транзакционная): Редактировать: https://direct.yandex.ru/dna/groups-edit?ulogin={login}&campaigns-ids={campaign_id}&groups-ids={group_id} - Network accessline 268
Редактировать: https://direct.yandex.ru/dna/groups-edit?ulogin={login}&campaigns-ids={campaign_id}&groups-ids={group_id} - Network accessline 309
- **Длина query**: `query_length` из `build-query` относится только к базовой OR-схеме и не учитывает минус-фразы. Окончательный источник истины — длина `phrase` непосредственно перед запросом. - **OR-операторы**: если Wordstat API неожидан - Network accessline 310
- **OR-операторы**: если Wordstat API неожиданно не поддерживает `(a|b)` синтаксис — fallback: запросить каждый вариант отдельно и суммировать (upper bound — пересечения дадут оверкаунт). - **Квота API**: при анализе множества групп следить - Network accessline 311
- **Квота API**: при анализе множества групп следить за расходом и учитывать [актуальные квоты Wordstat](https://aistudio.yandex.ru/ru/docs/search-api/concepts/limits).
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/common.sh
- Executable scriptline 1
#!/bin/sh - Network accessline 34
WORDSTAT_CLOUD_API="https://searchapi.api.cloud.yandex.net/v2/wordstat" - Network accessline 35
WORDSTAT_IAM_API="https://iam.api.cloud.yandex.net/iam/v1/tokens" - Network accessline 36
WORDSTAT_README_URL="https://github.com/artwist-polyakov/polyakov-claude-skills/blob/main/plugins/yandex-wordstat/skills/yandex-wordstat/config/README.md" - Access to secretsline 42
[Credential-related source omitted] - Network accessline 60
printf '\n' printf 'Likely the plugin config needs updating. See:\n' printf ' %s\n\n' "$WORDSTAT_README_URL" - Network accessline 61
printf 'Likely the plugin config needs updating. See:\n' printf ' %s\n\n' "$WORDSTAT_README_URL" printf 'Quick checks:\n' - Network accessline 62
printf ' %s\n\n' "$WORDSTAT_README_URL" - Access to secretsline 65
[Credential-related source omitted] - Access to secretsline 66
[Credential-related source omitted] - Access to secretsline 108
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted] - Access to secretsline 111
[Credential-related source omitted] - Access to secretsline 123
[Credential-related source omitted] - Access to secretsline 129
[Credential-related source omitted] - Access to secretsline 152
[Credential-related source omitted] - Access to secretsline 156
[Credential-related source omitted] - Access to secretsline 161
[Credential-related source omitted] - Access to secretsline 177
[Credential-related source omitted] - Access to secretsline 178
[Credential-related source omitted] - Access to secretsline 185
[Credential-related source omitted] - Access to secretsline 186
[Credential-related source omitted] - Access to secretsline 187
[Credential-related source omitted] - Access to secretsline 190
[Credential-related source omitted] - Access to secretsline 191
[Credential-related source omitted] - Network accessline 233
echo "" echo "=== Endpoints ===" echo " POST $WORDSTAT_CLOUD_API/topRequests" - Network accessline 234
echo "=== Endpoints ===" echo " POST $WORDSTAT_CLOUD_API/topRequests" echo " POST $WORDSTAT_CLOUD_API/dynamics" - Network accessline 235
echo " POST $WORDSTAT_CLOUD_API/topRequests" - Network accessline 236
echo " POST $WORDSTAT_CLOUD_API/dynamics" - Network accessline 237
echo " POST $WORDSTAT_CLOUD_API/regions" - Network accessline 238
echo "" echo "=== API Limits ===" echo " See https://yandex.cloud/ru/docs/search-api/pricing for current limits and billing." - Network accessline 239
echo "=== API Limits ===" echo " See https://yandex.cloud/ru/docs/search-api/pricing for current limits and billing." } - Network accessline 240
echo " See https://yandex.cloud/ru/docs/search-api/pricing for current limits and billing." - Access to secretsline 283
[Credential-related source omitted] - Access to secretsline 309
[Credential-related source omitted] - Access to secretsline 310
[Credential-related source omitted] - Dangerous shell operationline 327
trap "rm -rf '$_iti_tmp'" EXIT INT TERM - Access to secretsline 339
[Credential-related source omitted] - Access to secretsline 340
[Credential-related source omitted] - Network accessline 358
payload = json.dumps({ "iss": sa_id, "aud": "https://iam.api.cloud.yandex.net/iam/v1/tokens", - Network accessline 359
"iss": sa_id, "aud": "https://iam.api.cloud.yandex.net/iam/v1/tokens", "iat": now, - Network accessline 360
"aud": "https://iam.api.cloud.yandex.net/iam/v1/tokens", - Network accessline 389
_resp=$(curl -s -X POST "$WORDSTAT_IAM_API" \ - Dangerous shell operationline 433
rm -rf "$_iti_tmp" - Access to secretsline 466
[Credential-related source omitted] - Access to secretsline 467
[Credential-related source omitted] - Access to secretsline 468
[Credential-related source omitted] - Network accessline 575
# ASCII escapes preserve Unicode through Windows Python stdout and curl arguments. - Access to secretsline 600
[Credential-related source omitted] - Access to secretsline 602
[Credential-related source omitted] - Dangerous shell operationline 666
[ "$_nr_owns_tmp" = "1" ] && rm -f "$_nr_tmp" - Network accessline 697
die_with_help \ "Cloud Wordstat dynamics: at weekly/monthly granularity, only '+' operator is allowed. Found: $_ops" \ "Either switch --period to daily, or remove these operators from --phrase. See: h - Network accessline 698
"Cloud Wordstat dynamics: at weekly/monthly granularity, only '+' operator is allowed. Found: $_ops" \ "Either switch --period to daily, or remove these operators from --phrase. See: https://aistudio.yandex.ru/docs/ru/se - Network accessline 699
"Either switch --period to daily, or remove these operators from --phrase. See: https://aistudio.yandex.ru/docs/ru/search-api/operations/wordstat-getdynamics.html" - Access to secretsline 713
[Credential-related source omitted] - Access to secretsline 714
[Credential-related source omitted] - Network accessline 734
_cr_tmp=$(_make_secure_tmpdir) _cr_resp_file="$_cr_tmp/resp" _status=$(curl -s -o "$_cr_resp_file" -w '%{http_code}' \ - Network accessline 735
_cr_resp_file="$_cr_tmp/resp" _status=$(curl -s -o "$_cr_resp_file" -w '%{http_code}' \ -X POST "$WORDSTAT_CLOUD_API/$_method" \ - Network accessline 736
_status=$(curl -s -o "$_cr_resp_file" -w '%{http_code}' \ - Network accessline 737
-X POST "$WORDSTAT_CLOUD_API/$_method" \ - Dangerous shell operationline 745
rm -rf "$_cr_tmp" - Dangerous shell operationline 751
rm -f "$WORDSTAT_CACHE_DIR/iam_token.json" - Dangerous shell operationline 754
rm -rf "$_cr_tmp" - Dangerous shell operationline 758
rm -rf "$_cr_tmp" - Access to secretsline 759
[Credential-related source omitted] - Dangerous shell operationline 766
rm -rf "$_cr_tmp" - Dangerous shell operationline 772
rm -rf "$_cr_tmp" - Dangerous shell operationline 778
rm -rf "$_cr_tmp" - Dangerous shell operationline 783
rm -rf "$_cr_tmp"
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/dynamics.sh
- Executable scriptline 1
#!/bin/bash
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/missed_demand.py
- Executable scriptline 1
#!/usr/bin/env -S uv run --script
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/query_total.sh
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/quota.sh
- Executable scriptline 1
#!/bin/sh
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/regions_stats.sh
- Executable scriptline 1
#!/bin/bash
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/regions_tree.sh
- Executable scriptline 1
#!/bin/bash
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/search_region.sh
- Executable scriptline 1
#!/bin/bash
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/tests/helpers.sh
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/tests/run.sh
- Executable scriptline 1
#!/bin/sh
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/tests/test_api_key_auth.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 10
rm -rf "$td" - Dangerous shell operationline 12
trap 'rm -rf "$td"' EXIT INT TERM - Access to secretsline 15
[Credential-related source omitted] - Network accessline 18
cat > "$td/bin/curl" <<'EOF' - Access to secretsline 46
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 52
[Credential-related source omitted] - Access to secretsline 63
[Credential-related source omitted] - Access to secretsline 64
[Credential-related source omitted] - Access to secretsline 75
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted]
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/tests/test_cloud_phrase_length.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 12
trap 'rm -rf "$TEST_TMP_DIR"' EXIT HUP INT TERM - Dangerous shell operationline 91
rm -f "$_tcpl_iam_marker" "$_tcpl_transport_marker" - Network accessline 108
fail "_cloud_request вызвал _iam_token_get для $_tcpl_method" [ ! -e "$_tcpl_transport_marker" ] || \ fail "_cloud_request вызвал curl для $_tcpl_method" - Network accessline 109
[ ! -e "$_tcpl_transport_marker" ] || fail "_cloud_request вызвал curl для $_tcpl_method" - Network accessline 110
fail "_cloud_request вызвал curl для $_tcpl_method"
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/tests/test_dynamics_preflight.sh
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/tests/test_iam_tmpdir_cleanup.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 6
# the time _iam_token_issue ran `rm -rf "$_tmp"` the variable no longer pointed - Network accessline 9
# $TMPDIR/wordstat_XXXXXX/key.pem on disk forever. # # No network: openssl and curl are replaced by stubs on PATH. - Network accessline 11
# No network: openssl and curl are replaced by stubs on PATH. - Dangerous shell operationline 24
trap 'rm -rf "$SANDBOX"' EXIT INT TERM - Network accessline 58
# --- stub curl -------------------------------------------------------------- - Network accessline 59
cat > "$BIN/curl" <<'STUB' - Access to secretsline 73
[Credential-related source omitted] - Network accessline 108
WORDSTAT_CLOUD_SA_KEY_PATH="$SANDBOX/sa_key.json" WORDSTAT_CLOUD_OPENSSL_BIN="$BIN/openssl" WORDSTAT_IAM_API="http://127.0.0.1:0/stubbed" - Network accessline 110
WORDSTAT_IAM_API="http://127.0.0.1:0/stubbed" - Dangerous shell operationline 165
rm -rf "$WORDSTAT_CACHE_DIR" - Network accessline 180
# --- 6. error path: the trap must still clean up ---------------------------- # Make the IAM exchange fail (curl returns empty) -> die_with_help -> exit 1 - Network accessline 181
# Make the IAM exchange fail (curl returns empty) -> die_with_help -> exit 1 - Network accessline 184
cat > "$BIN/curl" <<'STUB' - Dangerous shell operationline 190
rm -rf "$WORDSTAT_CACHE_DIR"
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/tests/test_missed_demand_query.sh
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/tests/test_normalize.sh
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/tests/test_selector.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 9
trap 'rm -rf "$TEST_TMP_DIR"' EXIT HUP INT TERM - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 51
[Credential-related source omitted] - Access to secretsline 116
[Credential-related source omitted] - Access to secretsline 122
[Credential-related source omitted] - Access to secretsline 128
[Credential-related source omitted] - Access to secretsline 137
[Credential-related source omitted]
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/tests/test_translate.sh
plugins/yandex-wordstat/skills/yandex-wordstat/scripts/top_requests.sh
plugins/zoomkit/skills/zoomkit/.gitignore
- Access to secretsline 1
[Credential-related source omitted]
plugins/zoomkit/skills/zoomkit/SKILL.md
- Network accessline 37
Цены меняются. Для вопроса о стоимости «сейчас» проверь встроенный блок тарифов на официальной странице `https://zoomkit.ru/help`; связанный с ним внешний документ используй только если он открывается. Если проверить сеть нельзя, явно назов - Network accessline 61
Если конкретный кабинет Яндекс.Директа не находится по имени или комментарию, проверь полный сохранённый ответ `clients`, а не только сокращённую таблицу. Не утверждай, что кабинет не подключён, пока среди результатов `yandex.direct` есть а - Network accessline 75
1. Объясни ограничение API и дай ссылку `https://zoomkit.ru/profile`.
plugins/zoomkit/skills/zoomkit/config/.env.example
plugins/zoomkit/skills/zoomkit/config/README.md
- Network accessline 11
Подробное сравнение возможностей и расходов находится в [GETTING_STARTED.md](../references/GETTING_STARTED.md). Актуальные цены перед решением проверьте на https://zoomkit.ru/help. - Network accessline 24
command -v curl command -v jq - Dangerous shell operationline 28
На macOS `jq` можно установить командой `brew install jq`, в Debian/Ubuntu — `sudo apt-get install jq`. Без `jq` команды чтения сохранят полный JSON в `cache/`, но изменяющие команды с `--body` будут остановлены до отправки. - Network accessline 32
Если аккаунта ещё нет, зарегистрируйтесь: https://zoomkit.ru/register. Если аккаунт уже есть, войдите: https://zoomkit.ru/login. - Network accessline 36
Откройте профиль: https://zoomkit.ru/profile и пополните баланс. Для первого запуска можно начать с 500 руб.: при справочном тарифе 52 руб. в сутки за управление ставками одного кабинета этого хватит примерно на девять дней. - Network accessline 42
1. Откройте раздел ключей API: https://zoomkit.ru/profile/api - Access to secretsline 52
[Credential-related source omitted] - Access to secretsline 53
[Credential-related source omitted] - Network accessline 59
[Credential-related source omitted] - Network accessline 60
ZOOMKIT_API_BASE_URL="https://zoomkit.ru/api/v1" - Network accessline 86
- `401` — сохранённый ключ отозван, истёк или скопирован неверно. Войдите в существующую учётную запись, выпустите замену в https://zoomkit.ru/profile/api, обновите `ZOOMKIT_API_TOKEN` в том же `config/.env` и повторите `token`. Если ключ в - Network accessline 95
Официальная спецификация: https://zoomkit.ru/docs/api-v1.yaml
plugins/zoomkit/skills/zoomkit/references/API_REFERENCE.md
plugins/zoomkit/skills/zoomkit/references/AUDIT_WORKFLOWS.md
- Network accessline 3
Источники: [официальная спецификация ZoomKit API 1.9.0](https://zoomkit.ru/docs/api-v1.yaml) и [справка ZoomKit](https://zoomkit.ru/help). Используй этот справочник для проверок по кабинетам и кампаниям. - Network accessline 35
Для ручного действия направь пользователя в интерфейс Яндекс.Директа ZoomKit: https://zoomkit.ru/yandex/tokens. Старый [официальный снимок](https://zoomkit.ru/common/help/sample7.png) показывает действие «Убрать ключ», но не подтверждает, ч - Network accessline 63
- Если страница товара остаётся успешной, но товар исчезает, задай в интерфейсе устойчивую строку доступности и режим «ошибка при отсутствии». - Если страница содержит явное «нет в наличии», задай эту строку и режим «ошибка при наличии». - - Network accessline 64
- Если страница содержит явное «нет в наличии», задай эту строку и режим «ошибка при наличии». - Открой именно `settings_url`; текстовый блок `text_settings` через API доступен только на чтение. Запасной ручной путь по [официальной анимации - Network accessline 65
- Открой именно `settings_url`; текстовый блок `text_settings` через API доступен только на чтение. Запасной ручной путь по [официальной анимации](https://zoomkit.ru/common/help/sample1.gif): «Яндекс.Директ» → список кампаний → «Изменить» и
plugins/zoomkit/skills/zoomkit/references/BILLING.md
- Network accessline 3
Источник: [официальная спецификация ZoomKit API 1.9.0](https://zoomkit.ru/docs/api-v1.yaml). - Network accessline 47
Затем направь в профиль: https://zoomkit.ru/profile. Не пробуй недокументированные адреса. Если возможности профиля недостаточно, предложи обратиться в поддержку: support@zoomkit.ru. - Network accessline 49
Оплата по публичной оферте производится безналично в рублях по предоплате; после оплаты сумма отражается на балансе ZoomKit. Пункт 4.7 оферты предусматривает добавление 6% к сумме пополнения на этапе оплаты, поэтому итог нужно проверить в п
plugins/zoomkit/skills/zoomkit/references/GETTING_STARTED.md
- Network accessline 16
Источники: [сайт ZoomKit](https://zoomkit.ru/) и [страница регистрации](https://zoomkit.ru/register). - Network accessline 20
Справочный снимок тарифов проверен 6 сентября 2026 года по [открытой справке ZoomKit](https://zoomkit.ru/help): - Network accessline 33
Пункт 4.7 [публичной оферты](https://zoomkit.ru/docs/offer.pdf) предусматривает добавление 6% к сумме пополнения на этапе оплаты. Предупреди об этом и предложи проверить итоговую сумму в профиле перед оплатой. - Network accessline 35
Тарифы — изменяемые сведения. Перед ответом о цене «сейчас» открой встроенный блок цен на `https://zoomkit.ru/help`. Связанный с ним внешний документ используй только если он открывается; на дату проверки ссылка была недоступна, но сама стр - Network accessline 58
3. Приведи один понятный расчёт, если известен объём кабинетов, каналов или сообществ. 4. Объясни условие, при котором автоматизация оправдает расход. 5. Дай ссылку на регистрацию: https://zoomkit.ru/register. - Network accessline 59
4. Объясни условие, при котором автоматизация оправдает расход. 5. Дай ссылку на регистрацию: https://zoomkit.ru/register. 6. После регистрации предложи стартовое пополнение на 500 руб. в профиле: https://zoomkit.ru/profile. Уточни, что это - Network accessline 60
5. Дай ссылку на регистрацию: https://zoomkit.ru/register. - Network accessline 61
6. После регистрации предложи стартовое пополнение на 500 руб. в профиле: https://zoomkit.ru/profile. Уточни, что это пример, а не минимальная сумма, и напомни проверить добавляемые 6%. - Network accessline 62
7. После пополнения направь за ключом: https://zoomkit.ru/profile/api.
plugins/zoomkit/skills/zoomkit/references/YANDEX_DIRECT.md
- Network accessline 18
Для ручного управления открой https://zoomkit.ru/yandex/tokens. В [официальном снимке интерфейса](https://zoomkit.ru/common/help/sample7.png) есть действие «Убрать ключ», но открытые материалы подтверждают только потерю доступа к связанным - Network accessline 26
1. Открой в личном кабинете ZoomKit страницу https://zoomkit.ru/yandex/direct. - Network accessline 62
Названия и значение текстового поля задай вручную по `settings_url`. Если приходится идти через меню, [официальная анимация](https://zoomkit.ru/common/help/sample1.gif) показывает путь: «Яндекс.Директ» → список кампаний → выбрать кампанию и - Network accessline 64
После ручной настройки строки переключатели автоматизации можно включить через API. Заготовка `assets/url-check-product-protection.example.json` явно задаёт весь набор условий автоприостановки: оставляет включёнными HTTP 4xx и строковое пра
plugins/zoomkit/skills/zoomkit/scripts/report-wait.sh
plugins/zoomkit/skills/zoomkit/scripts/tests/fake_curl.sh
plugins/zoomkit/skills/zoomkit/scripts/tests/run.sh
- Executable scriptline 1
#!/bin/sh
plugins/zoomkit/skills/zoomkit/scripts/tests/test_cli.sh
- Executable scriptline 1
#!/bin/sh - Dangerous shell operationline 12
trap 'rm -rf "$TEST_TMP"' 0 - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 48
[Credential-related source omitted] - Network accessline 65
ZOOMKIT_CONFIG_FILE="$TEST_TMP/config.env" ZOOMKIT_CACHE_DIR="$TEST_TMP/cache" ZOOMKIT_API_BASE_URL="https://api.example.test/v1" ZOOMKIT_ALLOW_CUSTOM_API_BASE=1 ZOOMKIT_CURL_BIN="$FAKE_CURL" MOCK_LOG="$TEST_TMP/cur - Network accessline 66
ZOOMKIT_CACHE_DIR="$TEST_TMP/cache" \ ZOOMKIT_API_BASE_URL="https://api.example.test/v1" \ ZOOMKIT_ALLOW_CUSTOM_API_BASE=1 \ - Network accessline 67
ZOOMKIT_API_BASE_URL="https://api.example.test/v1" \ - Dangerous shell operationline 78
rm -f "$TEST_TMP/curl.log" - Network accessline 82
assert_contains "$TEST_TMP/out" "--confirm" [ ! -e "$TEST_TMP/curl.log" ] || fail "$_ztwg_name: заблокированное изменение дошло до curl" } - Dangerous shell operationline 90
rm -f "$TEST_TMP/curl.log" - Network accessline 91
[Credential-related source omitted] - Network accessline 92
assert_contains "$TEST_TMP/out" "Метод: $_ztdr_method" assert_contains "$TEST_TMP/out" "Адрес: https://api.example.test/v1$_ztdr_path" [ ! -e "$TEST_TMP/curl.log" ] || fail "$*: --dry-run вызвал curl" - Network accessline 93
assert_contains "$TEST_TMP/out" "Адрес: https://api.example.test/v1$_ztdr_path" [ ! -e "$TEST_TMP/curl.log" ] || fail "$*: --dry-run вызвал curl" } - Dangerous shell operationline 98
rm -f "$TEST_TMP/config.env" "$TEST_TMP/curl.log" - Network accessline 100
fail "запрос проектов без ключа завершился успешно" fi assert_contains "$TEST_TMP/out" "https://zoomkit.ru/profile/api" - Network accessline 101
fi assert_contains "$TEST_TMP/out" "https://zoomkit.ru/profile/api" assert_contains "$TEST_TMP/out" "ZoomKit помогает вести рекламу" - Network accessline 102
assert_contains "$TEST_TMP/out" "https://zoomkit.ru/profile/api" - Network accessline 103
assert_contains "$TEST_TMP/out" "ZoomKit помогает вести рекламу" assert_contains "$TEST_TMP/out" "50 руб./сутки + 2 руб./сутки" assert_contains "$TEST_TMP/out" "https://zoomkit.ru/register" - Network accessline 104
assert_contains "$TEST_TMP/out" "50 руб./сутки + 2 руб./сутки" assert_contains "$TEST_TMP/out" "https://zoomkit.ru/register" assert_contains "$TEST_TMP/out" "можно начать с 500 руб." - Network accessline 105
assert_contains "$TEST_TMP/out" "https://zoomkit.ru/register" - Access to secretsline 107
[Credential-related source omitted] - Network accessline 108
[Credential-related source omitted] - Access to secretsline 108
[Credential-related source omitted] - Network accessline 109
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted] - Network accessline 110
assert_before "$TEST_TMP/out" "https://zoomkit.ru/register" "можно начать с 500 руб." - Network accessline 111
assert_before "$TEST_TMP/out" "можно начать с 500 руб." "https://zoomkit.ru/profile/api" - Network accessline 112
[Credential-related source omitted] - Access to secretsline 112
[Credential-related source omitted] - Access to secretsline 113
[Credential-related source omitted] - Dangerous shell operationline 117
rm -f "$TEST_TMP/curl.log" - Network accessline 124
assert_contains "$TEST_TMP/out" "добавляемых при пополнении 6%" assert_contains "$TEST_TMP/out" "точный общий расход показывает команда balance" assert_contains "$TEST_TMP/out" "https://zoomkit.ru/help" - Network accessline 125
assert_contains "$TEST_TMP/out" "точный общий расход показывает команда balance" assert_contains "$TEST_TMP/out" "https://zoomkit.ru/help" assert_contains "$TEST_TMP/out" "https://zoomkit.ru/register" - Network accessline 126
assert_contains "$TEST_TMP/out" "https://zoomkit.ru/help" - Network accessline 127
assert_contains "$TEST_TMP/out" "https://zoomkit.ru/register" - Access to secretsline 129
[Credential-related source omitted] - Dangerous shell operationline 133
rm -f "$TEST_TMP/curl.log" - Network accessline 134
ZOOMKIT_CONFIG_FILE="$TEST_TMP/missing.env" sh "$ZOOMKIT_SCRIPT" billing-capabilities > "$TEST_TMP/out" 2>&1 assert_contains "$TEST_TMP/out" "недоступно: создание счета" assert_contains "$TEST_TMP/out" "https://zoomkit.ru/profile" - Network accessline 135
assert_contains "$TEST_TMP/out" "недоступно: создание счета" assert_contains "$TEST_TMP/out" "https://zoomkit.ru/profile" [ ! -e "$TEST_TMP/curl.log" ] || fail "справка о возможностях вызвала curl" - Network accessline 136
assert_contains "$TEST_TMP/out" "https://zoomkit.ru/profile" - Dangerous shell operationline 141
rm -f "$TEST_TMP/curl.log" - Access to secretsline 147
[Credential-related source omitted] - Access to secretsline 151
[Credential-related source omitted] - Dangerous shell operationline 157
rm -f "$TEST_TMP/curl.log" - Access to secretsline 159
[Credential-related source omitted] - Access to secretsline 162
[Credential-related source omitted] - Network accessline 166
[Credential-related source omitted] - Network accessline 167
[Credential-related source omitted] - Network accessline 168
assert_contains "$TEST_TMP/curl.log" "URL=https://api.example.test/v1/token" - Access to secretsline 176
[Credential-related source omitted] - Dangerous shell operationline 178
rm -f "$TEST_TMP/curl.log" - Dangerous shell operationline 183
rm -f "$TEST_TMP/curl.log" - Dangerous shell operationline 189
rm -f "$TEST_TMP/curl.log" - Network accessline 203
assert_contains "$TEST_TMP/out" "Строк таблицы: 3" assert_contains "$TEST_TMP/out" "В Яндекс.Директе без комментария: 1; из них porg-*: 1" assert_contains "$TEST_TMP/out" "https://zoomkit.ru/yandex/direct" - Network accessline 204
assert_contains "$TEST_TMP/out" "В Яндекс.Директе без комментария: 1; из них porg-*: 1" assert_contains "$TEST_TMP/out" "https://zoomkit.ru/yandex/direct" assert_contains "$TEST_TMP/out" "Клиенты и дневной расход" - Network accessline 205
assert_contains "$TEST_TMP/out" "https://zoomkit.ru/yandex/direct" - Dangerous shell operationline 227
rm -f "$TEST_TMP/curl.log" - Dangerous shell operationline 235
rm -f "$TEST_TMP/curl.log" - Dangerous shell operationline 243
rm -f "$TEST_TMP/curl.log" - Network accessline 244
[Credential-related source omitted] - Access to secretsline 244
[Credential-related source omitted] - Network accessline 245
[Credential-related source omitted] - Network accessline 246
ZOOMKIT_API_BASE_URL="http://collector.example/v1" \ - Dangerous shell operationline 257
rm -f "$TEST_TMP/curl.log" - Network accessline 258
[Credential-related source omitted] - Access to secretsline 258
[Credential-related source omitted] - Network accessline 259
[Credential-related source omitted] - Network accessline 260
ZOOMKIT_API_BASE_URL="http://localhost:80@collector.example/v1" \ - Network accessline 272
[Credential-related source omitted] - Access to secretsline 272
[Credential-related source omitted] - Network accessline 273
[Credential-related source omitted] - Network accessline 274
ZOOMKIT_API_BASE_URL="http://127.0.0.1:8765/v1" \ - Network accessline 276
ZOOMKIT_ALLOW_INSECURE_HTTP=1 \ sh "$ZOOMKIT_SCRIPT" token --dry-run > "$TEST_TMP/out" 2>&1 assert_contains "$TEST_TMP/out" "Адрес: http://127.0.0.1:8765/v1/token" - Network accessline 278
assert_contains "$TEST_TMP/out" "Адрес: http://127.0.0.1:8765/v1/token" - Dangerous shell operationline 304
rm -f "$TEST_TMP/curl.log" - Dangerous shell operationline 327
rm -f "$TEST_TMP/curl.log" - Dangerous shell operationline 341
rm -f "$TEST_TMP/curl.log" - Dangerous shell operationline 350
rm -f "$TEST_TMP/curl.log" - Network accessline 423
printf '%s\n' '{"campaign_id":56,"check_urls_enabled":true,"suspend_urls_enabled":true,"suspend_urls_if_301":false,"suspend_urls_if_302":false,"suspend_urls_if_303":false,"suspend_urls_if_307":false,"suspend_urls_if_400_499":true,"suspend_u - Network accessline 428
assert_contains "$TEST_TMP/out" "Искомая строка: В корзину" assert_contains "$TEST_TMP/out" "Ошибка при отсутствии строки: true" assert_contains "$TEST_TMP/out" "https://zoomkit.ru/yandex/direct/56/url-check-settings" - Network accessline 429
assert_contains "$TEST_TMP/out" "Ошибка при отсутствии строки: true" assert_contains "$TEST_TMP/out" "https://zoomkit.ru/yandex/direct/56/url-check-settings" assert_contains "$TEST_TMP/out" "Для аудита кабинета получите список командой camp - Network accessline 430
assert_contains "$TEST_TMP/out" "https://zoomkit.ru/yandex/direct/56/url-check-settings" - Network accessline 433
printf '%s\n' '{"id":91,"campaign_id":56,"complete":true,"sent":false,"status":"has_problems","groups":[{"adgroup_id":501,"problems":[{"type":"error","url":"https://shop.example/item","source_url":"https://shop.example/item?utm_source=yande - Network accessline 434
[Credential-related source omitted] - Network accessline 435
assert_contains "$TEST_TMP/out" "Состояние: has_problems" assert_contains "$TEST_TMP/out" "https://shop.example/item" assert_contains "$TEST_TMP/out" "HTTP 404" - Network accessline 436
assert_contains "$TEST_TMP/out" "https://shop.example/item" - Network accessline 442
[Credential-related source omitted] - Network accessline 443
assert_contains "$TEST_TMP/curl.log" "METHOD=POST" assert_contains "$TEST_TMP/curl.log" "URL=https://api.example.test/v1/stats/reports" assert_contains "$TEST_TMP/curl.log" "CONTENT_TYPE=Content-Type: application/json" - Network accessline 444
assert_contains "$TEST_TMP/curl.log" "URL=https://api.example.test/v1/stats/reports" - Dangerous shell operationline 456
rm -f "$TEST_TMP/report-counter" - Dangerous shell operationline 472
rm -f "$TEST_TMP/cache/report-12.json" - Network accessline 529
[Credential-related source omitted] - Network accessline 530
assert_contains "$TEST_TMP/out" "ключ ZoomKit API не найден или недействителен" assert_contains "$TEST_TMP/out" "https://zoomkit.ru/profile/api" assert_contains "$TEST_TMP/out" "Замените значение ZOOMKIT_API_TOKEN" - Network accessline 531
assert_contains "$TEST_TMP/out" "https://zoomkit.ru/profile/api" - Network accessline 535
fail "HTTP 401 ошибочно предлагает стартовое пополнение" fi if grep -F -- "https://zoomkit.ru/register" "$TEST_TMP/out" >/dev/null 2>&1; then - Network accessline 536
fi if grep -F -- "https://zoomkit.ru/register" "$TEST_TMP/out" >/dev/null 2>&1; then fail "HTTP 401 ошибочно предлагает повторную регистрацию" - Network accessline 537
if grep -F -- "https://zoomkit.ru/register" "$TEST_TMP/out" >/dev/null 2>&1; then
plugins/zoomkit/skills/zoomkit/scripts/zoomkit.sh
- Executable scriptline 1
#!/bin/sh - Network accessline 8
[Credential-related source omitted] - Access to secretsline 8
[Credential-related source omitted] - Network accessline 9
CACHE_DIR=${ZOOMKIT_CACHE_DIR:-"$SKILL_DIR/cache"} PROFILE_API_URL="https://zoomkit.ru/profile/api" PROFILE_URL="https://zoomkit.ru/profile" - Network accessline 10
PROFILE_API_URL="https://zoomkit.ru/profile/api" - Network accessline 11
PROFILE_URL="https://zoomkit.ru/profile" - Network accessline 12
REGISTER_URL="https://zoomkit.ru/register" - Network accessline 13
HELP_URL="https://zoomkit.ru/help" - Network accessline 14
DEFAULT_API_BASE_URL="https://zoomkit.ru/api/v1" - Network accessline 68
cat <<EOF Порядок подключения: 1. Если учётной записи ещё нет, зарегистрируйтесь: $REGISTER_URL - Network accessline 69
Порядок подключения: 1. Если учётной записи ещё нет, зарегистрируйтесь: $REGISTER_URL Если она уже есть, войдите: https://zoomkit.ru/login - Network accessline 70
1. Если учётной записи ещё нет, зарегистрируйтесь: $REGISTER_URL - Network accessline 71
Если она уже есть, войдите: https://zoomkit.ru/login - Network accessline 72
2. Пополните баланс в профиле: $PROFILE_URL - Network accessline 73
Для первого запуска можно начать с 500 руб. Это пример, а не заявленная минимальная сумма. Перед оплатой проверьте итог с добавляемыми 6%. 3. После пополнения создайте ключ API: $PROFILE_API_URL - Network accessline 74
минимальная сумма. Перед оплатой проверьте итог с добавляемыми 6%. 3. После пополнения создайте ключ API: $PROFILE_API_URL 4. Сохраните ключ в штатном постоянном файле навыка: - Network accessline 75
3. После пополнения создайте ключ API: $PROFILE_API_URL - Access to secretsline 78
[Credential-related source omitted] - Access to secretsline 79
[Credential-related source omitted] - Access to secretsline 81
[Credential-related source omitted] - Network accessline 90
cat >&2 <<EOF Восстановление доступа: 1. Войдите в существующую учётную запись: https://zoomkit.ru/login - Network accessline 91
Восстановление доступа: 1. Войдите в существующую учётную запись: https://zoomkit.ru/login 2. Откройте раздел ключей и выпустите замену недействительному ключу: - Network accessline 92
1. Войдите в существующую учётную запись: https://zoomkit.ru/login - Network accessline 93
2. Откройте раздел ключей и выпустите замену недействительному ключу: $PROFILE_API_URL 3. Замените значение ZOOMKIT_API_TOKEN в постоянном файле навыка: - Network accessline 94
$PROFILE_API_URL - Access to secretsline 96
[Credential-related source omitted] - Access to secretsline 97
[Credential-related source omitted] - Network accessline 136
добавляемых при пополнении 6% по публичной оферте. После подключения точный общий расход показывает команда balance. Перед расчётом проверьте актуальные цены: $HELP_URL - Network accessline 138
Перед расчётом проверьте актуальные цены: $HELP_URL - Network accessline 157
Профиль для выставления и оплаты счетов: $PROFILE_URL - Access to secretsline 177
[Credential-related source omitted] - Access to secretsline 178
[Credential-related source omitted] - Network accessline 223
ZOOMKIT_API_BASE_URL=${ZOOMKIT_API_BASE_URL:-$DEFAULT_API_BASE_URL} - Network accessline 232
if [ "$ZOOMKIT_API_BASE_URL" != "$DEFAULT_API_BASE_URL" ] && [ "${ZOOMKIT_ALLOW_CUSTOM_API_BASE:-0}" != 1 ]; then - Network accessline 236
case "$ZOOMKIT_API_BASE_URL" in https://*) ;; - Network accessline 237
https://*) ;; - Network accessline 238
http://*) - Access to secretsline 259
[Credential-related source omitted] - Access to secretsline 266
[Credential-related source omitted] - Access to secretsline 267
[Credential-related source omitted] - Network accessline 506
"В Яндекс.Директе без комментария: \($without_comments | length); из них porg-*: \($agency_without_comments | length).", "Если нужный кабинет не найден, но он подключён, не угадывайте соответствие по техническому имени." - Network accessline 507
"Если нужный кабинет не найден, но он подключён, не угадывайте соответствие по техническому имени.", "Откройте личный кабинет: https://zoomkit.ru/yandex/direct → «Клиенты и дневной расход» и заполните «Комментарий» для в - Network accessline 508
"Откройте личный кабинет: https://zoomkit.ru/yandex/direct → «Клиенты и дневной расход» и заполните «Комментарий» для всех непонятных аккаунтов, особенно porg-*; затем повторите clients." - Network accessline 705
invoice-create|invoices-create|payment-link|payment-link-create|invoice-download) printf '%s\n' "Ошибка: официальный ZoomKit API 1.9.0 не поддерживает эту операцию." >&2 printf '%s\n' "Доступны только balance и invoices; выс - Network accessline 706
printf '%s\n' "Ошибка: официальный ZoomKit API 1.9.0 не поддерживает эту операцию." >&2 printf '%s\n' "Доступны только balance и invoices; выставление и оплата выполняются в $PROFILE_URL" >&2 exit 4 - Network accessline 707
printf '%s\n' "Доступны только balance и invoices; выставление и оплата выполняются в $PROFILE_URL" >&2 - Network accessline 968
CURL_BIN=${ZOOMKIT_CURL_BIN:-curl} command -v "$CURL_BIN" >/dev/null 2>&1 || die "не найден curl" CURL_CONNECT_TIMEOUT=${ZOOMKIT_CURL_CONNECT_TIMEOUT:-10} - Network accessline 969
command -v "$CURL_BIN" >/dev/null 2>&1 || die "не найден curl" CURL_CONNECT_TIMEOUT=${ZOOMKIT_CURL_CONNECT_TIMEOUT:-10} CURL_MAX_TIME=${ZOOMKIT_CURL_MAX_TIME:-120} - Dangerous shell operationline 988
rm -f "$HEADERS_FILE" "$BODY_TMP" "$REQUEST_HEADERS_FILE" - Dangerous shell operationline 990
rm -f "$OUTPUT_TMP" - Access to secretsline 1000
[Credential-related source omitted]
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 3 facts
- Contacts schemas.openxmlformats.org, which SKILL.md, the README and the plugin manifest do not mentionblogger-ads-skill/scripts/inspect_links.py:27High confidence
- Contacts purl.oclc.org, which SKILL.md, the README and the plugin manifest do not mentionblogger-ads-skill/scripts/inspect_links.py:33High confidence
- Contacts schemas.openxmlformats.org, which SKILL.md, the README and the plugin manifest do not mentionblogger-ads-skill/scripts/render_contract.py:22High confidence
Signal confidence: 497 facts
- Dangerous shell operation in code of the SKILL.mdagent-deck/SKILL.md:118High confidence
- Instruction override signal in code of documentationagent-deck/references/config-reference.md:27Low confidence
- Instruction override signal in code of documentationagent-deck/references/config-reference.md:29Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valueagent-deck/references/config-reference.md:131Low confidence
- Network access in code of documentationagent-deck/references/config-reference.md:145Low confidence
- Network access in code of documentationagent-deck/references/config-reference.md:146Low confidence
- Access to secrets in code of documentationagent-deck/references/config-reference.md:158Low confidence
- Access to secrets in code of documentationagent-deck/references/config-reference.md:164Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valueagent-deck/references/config-reference.md:235Low confidence
- Access to secrets in code of documentationagent-deck/references/config-reference.md:241Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valueagent-deck/references/mcp-management.md:53Low confidence
- Network access in prose of documentationagent-deck/references/troubleshooting.md:126Low confidence
- Executable script in code of a file that runsagent-deck/scripts/launch-subagent.sh:1High confidence
- Network access in prose of documentationblogger-ads-skill/assets/accounting/xsd/SOURCE.md:3Low confidence
- Network access in prose of documentationblogger-ads-skill/assets/accounting/xsd/SOURCE.md:4Low confidence
- Network access in prose of documentationblogger-ads-skill/assets/accounting/xsd/SOURCE.md:5Low confidence
- Network access in prose of documentationblogger-ads-skill/assets/templates/Montserrat-OFL.txt:1Low confidence
- Network access in prose of documentationblogger-ads-skill/assets/templates/Montserrat-OFL.txt:3Low confidence
- Network access in prose of documentationblogger-ads-skill/assets/templates/Montserrat-OFL.txt:5Low confidence
- Network access in prose of documentationblogger-ads-skill/assets/templates/NotoEmoji-OFL.txt:3Low confidence
- Network access in prose of documentationblogger-ads-skill/assets/templates/NotoEmoji-OFL.txt:5Low confidence
- Network access in prose of documentationblogger-ads-skill/references/accounting.md:97Low confidence
- Network access in prose of documentationblogger-ads-skill/references/accounting.md:98Low confidence
- Network access in prose of documentationblogger-ads-skill/references/accounting.md:99Low confidence
- Network access in prose of documentationblogger-ads-skill/references/accounting.md:100Low confidence
- Network access in prose of documentationblogger-ads-skill/references/accounting.md:101Low confidence
- Network access in prose of documentationblogger-ads-skill/references/legal.md:11Low confidence
- Network access in prose of documentationblogger-ads-skill/references/legal.md:12Low confidence
- Network access in prose of documentationblogger-ads-skill/references/legal.md:13Low confidence
- Network access in prose of documentationblogger-ads-skill/references/legal.md:14Low confidence
- Network access in prose of documentationblogger-ads-skill/references/legal.md:18Low confidence
- Network access in prose of documentationblogger-ads-skill/references/legal.md:20Low confidence
- Network access in prose of documentationblogger-ads-skill/references/legal.md:21Low confidence
- Network access in prose of documentationblogger-ads-skill/references/legal.md:28Low confidence
- Network access in prose of documentationblogger-ads-skill/references/legal.md:42Low confidence
- Network access in prose of documentationblogger-ads-skill/references/legal.md:48Low confidence
- Network access in prose of documentationblogger-ads-skill/references/legal.md:56Low confidence
- Network access in prose of documentationblogger-ads-skill/references/legal.md:60Low confidence
- Network access in prose of documentationblogger-ads-skill/references/legal.md:62Low confidence
- Network access in prose of documentationblogger-ads-skill/references/legal.md:72Low confidence
- Network access in prose of documentationblogger-ads-skill/references/ord-edo.md:45Low confidence
- Network access in prose of documentationblogger-ads-skill/references/ord-edo.md:47Low confidence
- Network access in prose of documentationblogger-ads-skill/references/ord-edo.md:49Low confidence
- Network access in prose of documentationblogger-ads-skill/references/ord-edo.md:53Low confidence
- Network access in prose of documentationblogger-ads-skill/references/ord-edo.md:61Low confidence
- Network access in prose of documentationblogger-ads-skill/references/ord-edo.md:67Low confidence
- Network access in prose of documentationblogger-ads-skill/references/ord-edo.md:75Low confidence
- Network access in prose of documentationblogger-ads-skill/references/ord-edo.md:77Low confidence
- Network access in prose of documentationblogger-ads-skill/references/ord-edo.md:85Low confidence
- Network access in prose of documentationblogger-ads-skill/references/ord-edo.md:99Low confidence
and 447 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md plugins/agent-deck/skills/agent-deck/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md plugins/agent-deck/skills/agent-deck/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md plugins/agent-deck/skills/agent-deck/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md plugins/agent-deck/skills/agent-deck/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.