[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ACAZ1M5SJQH1SHFFY7CXQF":3,"skill-same:01M6ACAZ1M5SJQH1SHFFY7CXQF":149},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":6,"updatedAt":52,"install":53,"resources":66},"01M6ACAZ1M5SJQH1SHFFY7CXQF","airflow-translations",null,"Add or update translations for the Apache Airflow UI. Guides through setting up locales, scaffolding translation files, translating with locale-specific guidelines, and validating results. Use when working with i18n tasks in airflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fpublic\u002Fi18n\u002Flocales\u002F.","apache\u002Fairflow","apache","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F47359?v=4","01M6AC83E6K4FDKK7HZ8WNMQKE","The Apache Software Foundation","01M6ACADDFF6RHG1DBAJXFG7E5",47442,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,9,35,36,37],"airflow translations","airflow","for","locale","when","add","ui","src","i18n","guides","files","up","scaffolding","translation","update","apache airflow","tasks","guidelines","core","2026-11-10 10:12:30",false,"---\nname: airflow-translations\ndescription: >\n  Add or update translations for the Apache Airflow UI.\n  Guides through setting up locales, scaffolding translation files, translating\n  with locale-specific guidelines, and validating results. Use when working with\n  i18n tasks in airflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fpublic\u002Fi18n\u002Flocales\u002F.\nlicense: Apache-2.0\n---\n\u003C!-- SPDX-License-Identifier: Apache-2.0\n     https:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0 -->\n\n# Airflow Translations\n\n## Determining the Task\n\nTranslation work falls into one of two categories depending on whether the\ntarget locale already exists. Check if a directory for the locale exists under\n`airflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fpublic\u002Fi18n\u002Flocales\u002F\u003Clocale>\u002F`. If it does, skip\nahead to **Updating an Existing Translation**. If not, start with **Adding a Translation** below.\n\n---\n\n## Adding a Translation\n\nWhen adding a translation, some configuration files need to be updated before translation work can begin.\n\n### Setting up the locale\n\nFirst, create the locale directory:\n\n```\nmkdir -p airflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fpublic\u002Fi18n\u002Flocales\u002F\u003Clocale>\u002F\n```\n\nThen update the following configuration files, keeping the existing alphabetical\nordering in each file:\n\n**`airflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fsrc\u002Fi18n\u002Fconfig.ts`**: add the locale to the\n`supportedLanguages` array:\n\n```ts\n{ code: \"\u003Clocale>\", name: \"\u003Cnative name>\" },\n```\n\n**`dev\u002Fbreeze\u002Fsrc\u002Fairflow_breeze\u002Fcommands\u002Fui_commands.py`**: add the plural\nsuffixes for the language to the `PLURAL_SUFFIXES` dict. Check the i18next\nplural rules for the language at \u003Chttps:\u002F\u002Fjsfiddle.net\u002F6bpxsgd4> to determine\nwhich suffixes are needed:\n\n```\n\"\u003Clocale>\": [\"\u003Csuffixes>\"],\n```\n\n**`.github\u002Fboring-cyborg.yml`**: under `labelPRBasedOnFilePath`, add:\n\n```yaml\ntranslation:\u003Clocale>:\n  - airflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fpublic\u002Fi18n\u002Flocales\u002F\u003Clocale>\u002F*\n```\n\n### Scaffolding the translation files\n\nOnce the configuration is in place, run the breeze command to copy every\nEnglish namespace file into the new locale directory. This populates each key\nwith a `TODO: translate:` stub:\n\n```bash\nbreeze ui check-translation-completeness --language \u003Clocale> --add-missing\n```\n\nThe generated files will look like this:\n\n```json\n{\n  \"allRuns\": \"TODO: translate: All Runs\",\n  \"blockingDeps\": {\n    \"dependency\": \"TODO: translate: Dependency\",\n    \"reason\": \"TODO: translate: Reason\"\n  }\n}\n```\n\n### Translating\n\nWith the scaffolded files in place, read the locale-specific guideline for the\ntarget language (see the table under **Locale-Specific Guidelines** below). If\none exists, it contains the glossary, tone rules, and formatting conventions\nthat must be followed. If no locale-specific guideline exists yet, follow the\ntranslation rules described later in this document.\n\nReplace every `TODO: translate: \u003CEnglish terminology>` entry, including the prefix,\nwith the translated string.\n\nAfter all entries are translated, continue to **Validation** below.\n\n---\n\n## Updating an Existing Translation\n\nWhen a locale already exists and you need to fill translation gaps, revise\nexisting translations, or remove stale keys, start by reading the\nlocale-specific guideline for the language (see the table under\n**Locale-Specific Guidelines** below). This establishes the glossary and\nformatting rules to follow.\n\nNext, read the locale's existing JSON files under\n`airflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fpublic\u002Fi18n\u002Flocales\u002F\u003Clocale>\u002F` to learn the\nterminology already in use. Consistency with established translations is\ncritical. If a term has been translated a certain way, reuse that exact\ntranslation.\n\nThen check the current state of completeness:\n\n```bash\nbreeze ui check-translation-completeness --language \u003Clocale>\n```\n\nIf there are **missing** keys, scaffold them with `TODO: translate:` stubs:\n\n```bash\nbreeze ui check-translation-completeness --language \u003Clocale> --add-missing\n```\n\nIf there are **unused** keys — keys that are not required, meaning they are\nabsent from the English locale or are plural suffixes this language does not\nneed — remove them:\n\n```bash\nbreeze ui check-translation-completeness --language \u003Clocale> --remove-unused\n```\n\nNow translate the `TODO: translate:` entries following the locale-specific\nguideline, then continue to **Validation** below.\n\n---\n\n## Validation\n\nAfter completing translations, run these checks:\n\nCheck completeness. The output table should show 0 missing, 0 TODOs, 0 unused,\nand 100% coverage:\n\n```bash\nbreeze ui check-translation-completeness --language \u003Clocale>\n```\n\nFor machine-readable validation, add `--json` and check the language's totals\ninstead — stdout carries only the JSON document:\n\n```bash\nbreeze ui check-translation-completeness --language \u003Clocale> --json\n```\n\nRun pre-commit hooks to fix formatting, licenses, and linting issues:\n\n```bash\nprek run --from-ref main --hook-stage pre-commit\n```\n\n---\n\n## General Translation Rules\n\nThe following rules apply globally. If the locale-specific guideline for a\nlanguage states differently, follow the locale-specific guideline.\n\n### Terms Kept in English\n\nThe terms below should remain in English by default. Locale-specific guidelines\nmay override individual entries where an established local convention exists:\n\n| Term                     | Reason                                       |\n| ------------------------ | -------------------------------------------- |\n| `Airflow`                | Product name                                 |\n| `Dag` \u002F `Dags`           | Airflow convention; always `Dag`, never `DAG`|\n| `XCom` \u002F `XComs`         | Airflow cross-communication mechanism name   |\n| `Provider` \u002F `Providers` | Airflow extension package name               |\n| `REST API`               | Standard technical term                      |\n| `JSON`                   | Standard technical format name               |\n| `ID`                     | Universal abbreviation                       |\n| `PID`                    | Unix process identifier                      |\n| `UTC`                    | Time standard                                |\n| `Schema`                 | Database term                                |\n\n### Variables and Placeholders\n\nTranslation strings use `{{variable}}` interpolation (i18next format).\nNever translate or remove variable names inside `{{…}}`. Placeholders may be\nreordered as needed for natural word order, but the exact variable casing must\nbe preserved (e.g., `{{dagDisplayName}}`).\n\nCounters use the i18next `number` formatter so they get the locale's digit\ngrouping (e.g., `{{count, number}}`, `{{total, number}}`). Keep the `, number`\nsuffix exactly as it appears in the English string.\n\n### Plural Forms\n\nAirflow uses i18next plural suffixes (`_one`, `_other`, and optionally `_zero`,\n`_two`, `_few`, `_many`). Provide translations for all plural suffixes that the\nlanguage requires — the locale-specific guideline specifies which ones. If no\nlocale guideline exists, check the i18next plural rules at\n\u003Chttps:\u002F\u002Fjsfiddle.net\u002F6bpxsgd4> and provide at minimum `_one` and `_other`.\n\n### Hotkeys\n\nHotkey values (e.g., `\"hotkey\": \"e\"`) are literal key bindings and should\n**not** be translated unless the locale-specific guideline says otherwise.\n\n---\n\n## Translation File Structure\n\nAll translation files are JSON files located at:\n\n```\nairflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fpublic\u002Fi18n\u002Flocales\u002F\u003Clocale-name>\u002F\n```\n\nEach locale directory contains namespace JSON files that mirror the English\nlocale (`en\u002F`). The English locale is the **default locale** and the primary\nsource for all translations. The current namespace files are:\n\n\u003C!-- START namespace-files, please keep comment here to allow auto update -->\n`admin.json`, `assets.json`, `browse.json`, `common.json`, `components.json`, `dag.json`, `dags.json`, `dashboard.json`, `hitl.json`, `tasks.json`\n\u003C!-- END namespace-files, please keep comment here to allow auto update -->\n\n---\n\n## Locale-Specific Guidelines\n\nBefore translating, read the locale-specific guideline file for the target\nlanguage. These contain glossaries, tone rules, and formatting conventions\ntailored to each language. If a locale-specific guideline states differently\nfrom a global rule in this document, follow the locale-specific guideline.\n\n| Locale Code | Language                | Guideline File                  |\n| ----------- | ----------------------- | ------------------------------- |\n| `ar`        | Arabic                  | [locales\u002Far.md](locales\u002Far.md)  |\n| `ca`        | Catalan                 | [locales\u002Fca.md](locales\u002Fca.md)  |\n| `de`        | German                  | [locales\u002Fde.md](locales\u002Fde.md)  |\n| `el`        | Greek                   | [locales\u002Fel.md](locales\u002Fel.md)  |\n| `es`        | Spanish                 | [locales\u002Fes.md](locales\u002Fes.md)  |\n| `fr`        | French                  | [locales\u002Ffr.md](locales\u002Ffr.md)  |\n| `he`        | Hebrew                  | [locales\u002Fhe.md](locales\u002Fhe.md)  |\n| `hi`        | Hindi                   | [locales\u002Fhi.md](locales\u002Fhi.md)  |\n| `hu`        | Hungarian               | [locales\u002Fhu.md](locales\u002Fhu.md)  |\n| `it`        | Italian                 | [locales\u002Fit.md](locales\u002Fit.md)  |\n| `ja`        | Japanese                | [locales\u002Fja.md](locales\u002Fja.md)  |\n| `ko`        | Korean                  | [locales\u002Fko.md](locales\u002Fko.md)  |\n| `nl`        | Dutch                   | [locales\u002Fnl.md](locales\u002Fnl.md)  |\n| `pl`        | Polish                  | [locales\u002Fpl.md](locales\u002Fpl.md)  |\n| `pt`        | Portuguese              | [locales\u002Fpt.md](locales\u002Fpt.md)  |\n| `ru`        | Russian                 | [locales\u002Fru.md](locales\u002Fru.md)  |\n| `th`        | Thai                    | [locales\u002Fth.md](locales\u002Fth.md)  |\n| `tr`        | Turkish                 | [locales\u002Ftr.md](locales\u002Ftr.md)  |\n| `zh-CN`     | Simplified Chinese      | [locales\u002Fzh-CN.md](locales\u002Fzh-CN.md) |\n| `zh-TW`     | Traditional Chinese     | [locales\u002Fzh-TW.md](locales\u002Fzh-TW.md) |\n\nIf the target locale file does not yet exist, follow only the global rules in\nthis document.\n","\u003C!-- SPDX-License-Identifier: Apache-2.0\n     https:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0 -->\n\n# Airflow Translations\n\n## Determining the Task\n\nTranslation work falls into one of two categories depending on whether the\ntarget locale already exists. Check if a directory for the locale exists under\n`airflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fpublic\u002Fi18n\u002Flocales\u002F\u003Clocale>\u002F`. If it does, skip\nahead to **Updating an Existing Translation**. If not, start with **Adding a Translation** below.\n\n---\n\n## Adding a Translation\n\nWhen adding a translation, some configuration files need to be updated before translation work can begin.\n\n### Setting up the locale\n\nFirst, create the locale directory:\n\n```\nmkdir -p airflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fpublic\u002Fi18n\u002Flocales\u002F\u003Clocale>\u002F\n```\n\nThen update the following configuration files, keeping the existing alphabetical\nordering in each file:\n\n**`airflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fsrc\u002Fi18n\u002Fconfig.ts`**: add the locale to the\n`supportedLanguages` array:\n\n```ts\n{ code: \"\u003Clocale>\", name: \"\u003Cnative name>\" },\n```\n\n**`dev\u002Fbreeze\u002Fsrc\u002Fairflow_breeze\u002Fcommands\u002Fui_commands.py`**: add the plural\nsuffixes for the language to the `PLURAL_SUFFIXES` dict. Check the i18next\nplural rules for the language at \u003Chttps:\u002F\u002Fjsfiddle.net\u002F6bpxsgd4> to determine\nwhich suffixes are needed:\n\n```\n\"\u003Clocale>\": [\"\u003Csuffixes>\"],\n```\n\n**`.github\u002Fboring-cyborg.yml`**: under `labelPRBasedOnFilePath`, add:\n\n```yaml\ntranslation:\u003Clocale>:\n  - airflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fpublic\u002Fi18n\u002Flocales\u002F\u003Clocale>\u002F*\n```\n\n### Scaffolding the translation files\n\nOnce the configuration is in place, run the breeze command to copy every\nEnglish namespace file into the new locale directory. This populates each key\nwith a `TODO: translate:` stub:\n\n```bash\nbreeze ui check-translation-completeness --language \u003Clocale> --add-missing\n```\n\nThe generated files will look like this:\n\n```json\n{\n  \"allRuns\": \"TODO: translate: All Runs\",\n  \"blockingDeps\": {\n    \"dependency\": \"TODO: translate: Dependency\",\n    \"reason\": \"TODO: translate: Reason\"\n  }\n}\n```\n\n### Translating\n\nWith the scaffolded files in place, read the locale-specific guideline for the\ntarget language (see the table under **Locale-Specific Guidelines** below). If\none exists, it contains the glossary, tone rules, and formatting conventions\nthat must be followed. If no locale-specific guideline exists yet, follow the\ntranslation rules described later in this document.\n\nReplace every `TODO: translate: \u003CEnglish terminology>` entry, including the prefix,\nwith the translated string.\n\nAfter all entries are translated, continue to **Validation** below.\n\n---\n\n## Updating an Existing Translation\n\nWhen a locale already exists and you need to fill translation gaps, revise\nexisting translations, or remove stale keys, start by reading the\nlocale-specific guideline for the language (see the table under\n**Locale-Specific Guidelines** below). This establishes the glossary and\nformatting rules to follow.\n\nNext, read the locale's existing JSON files under\n`airflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fpublic\u002Fi18n\u002Flocales\u002F\u003Clocale>\u002F` to learn the\nterminology already in use. Consistency with established translations is\ncritical. If a term has been translated a certain way, reuse that exact\ntranslation.\n\nThen check the current state of completeness:\n\n```bash\nbreeze ui check-translation-completeness --language \u003Clocale>\n```\n\nIf there are **missing** keys, scaffold them with `TODO: translate:` stubs:\n\n```bash\nbreeze ui check-translation-completeness --language \u003Clocale> --add-missing\n```\n\nIf there are **unused** keys — keys that are not required, meaning they are\nabsent from the English locale or are plural suffixes this language does not\nneed — remove them:\n\n```bash\nbreeze ui check-translation-completeness --language \u003Clocale> --remove-unused\n```\n\nNow translate the `TODO: translate:` entries following the locale-specific\nguideline, then continue to **Validation** below.\n\n---\n\n## Validation\n\nAfter completing translations, run these checks:\n\nCheck completeness. The output table should show 0 missing, 0 TODOs, 0 unused,\nand 100% coverage:\n\n```bash\nbreeze ui check-translation-completeness --language \u003Clocale>\n```\n\nFor machine-readable validation, add `--json` and check the language's totals\ninstead — stdout carries only the JSON document:\n\n```bash\nbreeze ui check-translation-completeness --language \u003Clocale> --json\n```\n\nRun pre-commit hooks to fix formatting, licenses, and linting issues:\n\n```bash\nprek run --from-ref main --hook-stage pre-commit\n```\n\n---\n\n## General Translation Rules\n\nThe following rules apply globally. If the locale-specific guideline for a\nlanguage states differently, follow the locale-specific guideline.\n\n### Terms Kept in English\n\nThe terms below should remain in English by default. Locale-specific guidelines\nmay override individual entries where an established local convention exists:\n\n| Term                     | Reason                                       |\n| ------------------------ | -------------------------------------------- |\n| `Airflow`                | Product name                                 |\n| `Dag` \u002F `Dags`           | Airflow convention; always `Dag`, never `DAG`|\n| `XCom` \u002F `XComs`         | Airflow cross-communication mechanism name   |\n| `Provider` \u002F `Providers` | Airflow extension package name               |\n| `REST API`               | Standard technical term                      |\n| `JSON`                   | Standard technical format name               |\n| `ID`                     | Universal abbreviation                       |\n| `PID`                    | Unix process identifier                      |\n| `UTC`                    | Time standard                                |\n| `Schema`                 | Database term                                |\n\n### Variables and Placeholders\n\nTranslation strings use `{{variable}}` interpolation (i18next format).\nNever translate or remove variable names inside `{{…}}`. Placeholders may be\nreordered as needed for natural word order, but the exact variable casing must\nbe preserved (e.g., `{{dagDisplayName}}`).\n\nCounters use the i18next `number` formatter so they get the locale's digit\ngrouping (e.g., `{{count, number}}`, `{{total, number}}`). Keep the `, number`\nsuffix exactly as it appears in the English string.\n\n### Plural Forms\n\nAirflow uses i18next plural suffixes (`_one`, `_other`, and optionally `_zero`,\n`_two`, `_few`, `_many`). Provide translations for all plural suffixes that the\nlanguage requires — the locale-specific guideline specifies which ones. If no\nlocale guideline exists, check the i18next plural rules at\n\u003Chttps:\u002F\u002Fjsfiddle.net\u002F6bpxsgd4> and provide at minimum `_one` and `_other`.\n\n### Hotkeys\n\nHotkey values (e.g., `\"hotkey\": \"e\"`) are literal key bindings and should\n**not** be translated unless the locale-specific guideline says otherwise.\n\n---\n\n## Translation File Structure\n\nAll translation files are JSON files located at:\n\n```\nairflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fpublic\u002Fi18n\u002Flocales\u002F\u003Clocale-name>\u002F\n```\n\nEach locale directory contains namespace JSON files that mirror the English\nlocale (`en\u002F`). The English locale is the **default locale** and the primary\nsource for all translations. The current namespace files are:\n\n\u003C!-- START namespace-files, please keep comment here to allow auto update -->\n`admin.json`, `assets.json`, `browse.json`, `common.json`, `components.json`, `dag.json`, `dags.json`, `dashboard.json`, `hitl.json`, `tasks.json`\n\u003C!-- END namespace-files, please keep comment here to allow auto update -->\n\n---\n\n## Locale-Specific Guidelines\n\nBefore translating, read the locale-specific guideline file for the target\nlanguage. These contain glossaries, tone rules, and formatting conventions\ntailored to each language. If a locale-specific guideline states differently\nfrom a global rule in this document, follow the locale-specific guideline.\n\n| Locale Code | Language                | Guideline File                  |\n| ----------- | ----------------------- | ------------------------------- |\n| `ar`        | Arabic                  | [locales\u002Far.md](locales\u002Far.md)  |\n| `ca`        | Catalan                 | [locales\u002Fca.md](locales\u002Fca.md)  |\n| `de`        | German                  | [locales\u002Fde.md](locales\u002Fde.md)  |\n| `el`        | Greek                   | [locales\u002Fel.md](locales\u002Fel.md)  |\n| `es`        | Spanish                 | [locales\u002Fes.md](locales\u002Fes.md)  |\n| `fr`        | French                  | [locales\u002Ffr.md](locales\u002Ffr.md)  |\n| `he`        | Hebrew                  | [locales\u002Fhe.md](locales\u002Fhe.md)  |\n| `hi`        | Hindi                   | [locales\u002Fhi.md](locales\u002Fhi.md)  |\n| `hu`        | Hungarian               | [locales\u002Fhu.md](locales\u002Fhu.md)  |\n| `it`        | Italian                 | [locales\u002Fit.md](locales\u002Fit.md)  |\n| `ja`        | Japanese                | [locales\u002Fja.md](locales\u002Fja.md)  |\n| `ko`        | Korean                  | [locales\u002Fko.md](locales\u002Fko.md)  |\n| `nl`        | Dutch                   | [locales\u002Fnl.md](locales\u002Fnl.md)  |\n| `pl`        | Polish                  | [locales\u002Fpl.md](locales\u002Fpl.md)  |\n| `pt`        | Portuguese              | [locales\u002Fpt.md](locales\u002Fpt.md)  |\n| `ru`        | Russian                 | [locales\u002Fru.md](locales\u002Fru.md)  |\n| `th`        | Thai                    | [locales\u002Fth.md](locales\u002Fth.md)  |\n| `tr`        | Turkish                 | [locales\u002Ftr.md](locales\u002Ftr.md)  |\n| `zh-CN`     | Simplified Chinese      | [locales\u002Fzh-CN.md](locales\u002Fzh-CN.md) |\n| `zh-TW`     | Traditional Chinese     | [locales\u002Fzh-TW.md](locales\u002Fzh-TW.md) |\n\nIf the target locale file does not yet exist, follow only the global rules in\nthis document.\n",{"name":5,"license":15,"description":43},"Add or update translations for the Apache Airflow UI. Guides through setting up locales, scaffolding translation files, translating with locale-specific guidelines, and validating results. Use when working with i18n tasks in airflow-core\u002Fsrc\u002Fairflow\u002Fui\u002Fpublic\u002Fi18n\u002Flocales\u002F.\n","main","84a2037827b7da4db45a4899b607fa4b1e4f809e",".agents\u002Fskills\u002Fairflow-translations",18343,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow","https:\u002F\u002Fairflow.apache.org\u002F","https:\u002F\u002Fgithub.com\u002Fapache","https:\u002F\u002Fwww.apache.org\u002F","2026-11-11 11:20:17",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add apache\u002Fairflow --skill airflow-translations",{"tool":59,"command":60},"bunx","bunx skills add apache\u002Fairflow --skill airflow-translations",{"tool":62,"command":63},"pnpm","pnpm dlx skills add apache\u002Fairflow --skill airflow-translations","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002FSKILL.md",true,[67,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"locales\u002Far.md","REFERENCE","参考文档",6637,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Far.md",{"path":74,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":75,"sourceHtmlUrl":76},"locales\u002Fca.md",9039,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fca.md",{"path":78,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":79,"sourceHtmlUrl":80},"locales\u002Fde.md",15049,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fde.md",{"path":82,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":83,"sourceHtmlUrl":84},"locales\u002Fel.md",12053,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fel.md",{"path":86,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":87,"sourceHtmlUrl":88},"locales\u002Fes.md",12975,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fes.md",{"path":90,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":91,"sourceHtmlUrl":92},"locales\u002Ffr.md",7966,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Ffr.md",{"path":94,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":95,"sourceHtmlUrl":96},"locales\u002Fhe.md",11149,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fhe.md",{"path":98,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":99,"sourceHtmlUrl":100},"locales\u002Fhi.md",2235,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fhi.md",{"path":102,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":103,"sourceHtmlUrl":104},"locales\u002Fhu.md",9030,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fhu.md",{"path":106,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":107,"sourceHtmlUrl":108},"locales\u002Fit.md",2494,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fit.md",{"path":110,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":111,"sourceHtmlUrl":112},"locales\u002Fja.md",2882,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fja.md",{"path":114,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":115,"sourceHtmlUrl":116},"locales\u002Fko.md",5205,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fko.md",{"path":118,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":119,"sourceHtmlUrl":120},"locales\u002Fnl.md",6414,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fnl.md",{"path":122,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":123,"sourceHtmlUrl":124},"locales\u002Fpl.md",4844,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fpl.md",{"path":126,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":127,"sourceHtmlUrl":128},"locales\u002Fpt.md",4412,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fpt.md",{"path":130,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":131,"sourceHtmlUrl":132},"locales\u002Fru.md",7536,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fru.md",{"path":134,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":135,"sourceHtmlUrl":136},"locales\u002Fth.md",11645,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fth.md",{"path":138,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":139,"sourceHtmlUrl":140},"locales\u002Ftr.md",10885,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Ftr.md",{"path":142,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":143,"sourceHtmlUrl":144},"locales\u002Fzh-CN.md",3980,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fzh-CN.md",{"path":146,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":147,"sourceHtmlUrl":148},"locales\u002Fzh-TW.md",5771,"https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-translations\u002Flocales\u002Fzh-TW.md",[150,180,201,227,255,276],{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":166,"publishedAt":38},"01M6ACBAC3S7GHPX3EB91CA2K5","sql-reporting","Conventions and review steps for writing analytics SQL against the warehouse. Use whenever the task involves querying tables, building a report, or aggregating metrics.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002Fproviders\u002Fcommon\u002Fai\u002Fsrc\u002Fairflow\u002Fproviders\u002Fcommon\u002Fai\u002Fexample_dags\u002Fskills\u002Fsql-reporting\u002FSKILL.md",[156,161],{"categoryNo":157,"categoryName":158,"taxonomyType":159,"taxonomyTypeDesc":160},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":162,"categoryName":163,"taxonomyType":164,"taxonomyTypeDesc":165},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[167,168,169,170,171,172,173,174,175,176,177,178,179,21],"sql","sql reporting","reporting","writing","review","analytics","report","metrics","use","task","conventions","warehouse","tables",{"skillNo":181,"name":182,"nameZh":6,"description":183,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":184,"categories":185,"keywords":186,"publishedAt":38},"01M6ACB7P9C6TV0J1FGWW5HECF","aip-tracker","Track Airflow Improvement Proposal (AIP) implementation progress by comparing Confluence specs against codebase evidence. Use when asked to assess, report on, or compare AIP status.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002Fproviders\u002Fcommon\u002Fai\u002Fsrc\u002Fairflow\u002Fproviders\u002Fcommon\u002Fai\u002Fexample_dags\u002Fskills\u002Faip-tracker\u002FSKILL.md",[],[187,188,189,190,173,20,191,175,192,193,194,195,196,197,198,199,200,23],"aip tracker","tracker","aip","status","confluence","evidence","implementation","progress","proposal","compare","assess","improvement","codebase","track",{"skillNo":202,"name":203,"nameZh":6,"description":204,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":205,"categories":206,"keywords":207,"publishedAt":38},"01M6ACB55GGWPTWFKM3BVQS4W5","upgrade-fab-provider","Upgrade the pinned Flask-AppBuilder (FAB) dependency in the Apache Airflow FAB provider (`providers\u002Ffab\u002F`). Bumps the exact `flask-appbuilder==` pin and its mirror constant, regenerates `uv.lock`, drives the `test_fab_alignment.py` drift tripwire, reviews the vendored security-manager `override.py` against the new upstream FAB, and conditionally re-vendors static assets \u002F DB migrations. Use when asked to \"upgrade FAB\", \"bump flask-appbuilder\", or move the FAB provider to a newer Flask-AppBuilder release.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fupgrade-fab-provider\u002FSKILL.md",[],[208,209,210,211,212,213,20,9,34,214,215,216,217,218,219,220,221,222,223,224,225,23,226],"upgrade fab provider","provider","upgrade","security","test","release","tripwire","dependency","bump","uv","alignment","drift","db","move","re","reviews","lock","static","new",{"skillNo":228,"name":229,"nameZh":6,"description":230,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":231,"categories":232,"keywords":236,"publishedAt":38},"01M6ACB2TYRC6SB5TQ351K2Q7Q","prepare-providers-documentation","Replace the manual commit-by-commit classification step in `breeze release-management prepare-provider-documentation` with AI-driven classification. For each provider with pending changes, analyze every PR (batched into one sub-agent per provider, not one per PR), pay special attention to potentially breaking changes by inspecting the actual diff, scope multi-provider PRs to the current provider's slice, ask the release manager when uncertain, and apply version bumps + changelog entries. Use during the regular provider release cycle as an alternative to the interactive breeze prompts.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fprepare-providers-documentation\u002FSKILL.md",[233],{"categoryNo":234,"categoryName":235,"taxonomyType":159,"taxonomyTypeDesc":160},"01JBSEEDCAT000000000000023","Skill与智能体开发",[237,238,239,240,241,242,213,243,244,245,246,247,248,249,250,251,252,253,254,23],"prepare","documentation","prepare providers documentation","Providers","commit","pr","changelog","analyze","ask","diff","multi-provider","cycle","attention","as","scope","pay","manager","sub-agent",{"skillNo":256,"name":257,"nameZh":6,"description":258,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":259,"categories":260,"keywords":261,"publishedAt":38},"01M6ACAWMSPCZCQMCJ0WPVTFQ9","airflow-publish-changes","Prepare or carry out authorized publication of Apache Airflow changes, including remote checks, pre-push verification, PR creation, and tracking deferred work. Also use when planning these steps or managing contribution issues.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-publish-changes\u002FSKILL.md",[],[20,262,263,264,237,242,265,266,267,268,9,34,269,270,175,271,272,273,274,23,275],"airflow publish changes","publish","changes","planning","issues","verification","push","work","tracking","pr creation","creation","contribution","remote","Publication",{"skillNo":277,"name":278,"nameZh":6,"description":279,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":280,"categories":281,"keywords":282,"publishedAt":38},"01M6ACAT3JW1XZD3Z9EPP4H68M","airflow-pr-draft-summary","Draft Apache Airflow commit messages, PR titles and descriptions, or GitHub comments and reviews. Also use for release-note decisions when preparing a contribution.","https:\u002F\u002Fgithub.com\u002Fapache\u002Fairflow\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fairflow-pr-draft-summary\u002FSKILL.md",[],[242,283,20,284,285,286,287,288,241,213,9,34,289,290,291,175,273,292,223,21,23],"pr draft summary","airflow pr draft summary","pr draft","summary","draft","github","messages","commit messages","decisions","comments"]