Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 1.13.0 · 2026-07-26 09:16 UTC

jnMetaCode / agency-orchestrator

🚀 One sentence → your one-person company of AI experts → complete deliverable in minutes. 267 CN + 184 EN + 5 more languages (ko/ru/pt-BR/id/ar) · zero-code YAML · auto-verified acceptance · Web Studio / Desktop / Docker · 11 LLM providers (7 key-free). 一句话组建你的「一人公司」AI 专家团队,几分钟交付完整方案;验收自动核验,网页 / 桌面 / Docker 全渠道。

TypeScript · JavaScriptApache-2.0★ 1 897 зірок⑂ 259 форківз бер. 2026 р.Переглянути на GitHub ↗

jnMetaCode/agency-orchestrator має індекс здоров’я 66 зі 100, що відповідає смузі «Помірний». Найвищий показник — Vitality (80/100), найнижчий — Security (39/100). Останнє оновлення було 3 дні тому. Більшість нещодавньої роботи виконує один учасник.

66
загалом / 100
Помірний

Індекс здоров'я програмного забезпечення

Метрики згруповано у зважені категорії на шкалі 1–100. Загальна оцінка починається як їхнє середнє; коли публічні дані активують Політику юрисдикцій високого ризику, рейтинг коригується й отримує верхню межу 49 («Під ризиком»). Готовність до ШІ не входить до індексу.

66
Відмінний85-100Зразковий; відповідає практично всім перевіреним критеріям
Добрий70-84Здоровий; незначні прогалини
Помірний50-69Прийнятний, але з помітними прогалинами; рекомендовано перевірку
У зоні ризику30-49Суттєві слабкі місця; впровадження потребує обережності
Критичний1-29Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

Профіль оцінок

Кожна вісь — окрема категорія. Форма важить більше, ніж середнє: здоровий об'єкт заповнює всю фігуру, тоді як профіль із піками та провалами означає, що сила в одному вимірі маскує ризик в іншому.

Власність

AI不止语Особистий обліковий запис
689 підписників121 публічний репозиторійз квіт. 2015 р. jnMetaCode@qq.com

Цей репозиторій належить особистому обліковому запису. Проєкт з єдиним власником несе більший ризик безперервності, ніж підтримуваний організацією.

Пакетні екосистеми

Метрики за категоріями

Життєздатність

Чи живий проєкт — чи пишеться код і чи виходять релізи?

80Добрий · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 3 дн. тому
10.4/36Ритм комітів — 15/52 тижнів із комітами
18/18Обсяг комітів — 390 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 25 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year390
human_commit_share1
days_since_last_push3
active_weeks_last_year15
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 16 релізів
36/36Свіжість релізів — останній реліз 6 дн. тому
27/27Ритм релізів — реліз кожні ~3,7 дн.
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Використані вхідні дані
releases_count16
latest_release_tagdesktop-v0.4.1
releases_from_tagsні
days_since_latest_release6
mean_days_between_releases3,7

Спільнота та впровадження

Чи має проєкт користувачів, завантаження, увагу та влаштовані умови для контриб’юторів?

72Добрий · 18% загального індексу
Як обчислюється оцінка
53.2/60Зірки — 1 897 зірок
20.1/25Форки — 259 форків
4.7/15Спостерігачі — 8 спостерігачів
Використані вхідні дані
forks259
stars1 897
watchers8
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (Apache-2.0)
18/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
6.3/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingтак
has_issue_templateні
has_code_of_conductні
has_pull_request_templateтак
Як обчислюється оцінка
45.6/80Щомісячні завантаження — 2 608 завантажень/місяць у npm
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packagesagency-orchestrator
dependents
ecosystemsnpm
total_downloads
monthly_downloads2 608
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

Сталість та врядування

Чи переживе проєкт своїх людей — бас-фактор, реактивність, хто за ним стоїть і як супроводжуються пакети?

59Помірний · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
0/22.5Розподіл комітів — головний контриб’ютор — автор 100% комітів
1.4/13.5Широта контриб’юторів — 1 контриб’юторів
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Використані вхідні дані
bus_factor1
contributors_sampled1
top_contributor_share1
Як обчислюється оцінка
32.7/46.8Вирішення issue — закрито 70% issue
36.9/38.3Прийняття PR — злито 54/56 вирішених PR
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs54
open_issues12
closed_issues28
issue_closed_ratio0,7
closed_unmerged_prs2
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
20.4/25Охоплення власника — 689 підписників у jnMetaCode
25/25Послужний список — 121 публічних репозиторіїв, вік облікового запису ~11 р.
Використані вхідні дані
followers689
owner_typeUser
is_verified
owner_loginjnMetaCode
public_repos121
account_age_days4 111
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

Супровід пакетів

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у npm
35/35Свіжість публікацій — остання публікація 6 дн. тому
20/20Історія версій — 41 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagesagency-orchestrator
ecosystemsnpm
any_deprecatedні
min_days_since_publish6

Інженерна якість

Чи наявні базові інженерні практики та документація?

76Добрий · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 4 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — немає даних
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: CI-Tests. Залишкові ваги перенормовано.

Документація

100Відмінний
Як обчислюється оцінка
30/30README
25/25Каталог документації
15/15Сайт документації / домашня сторінка — https://ao.aiolaola.com
10/10Опис репозиторію
10/10Теми — 20 тем
10/10Wiki
Використані вхідні дані
topicsai-agents, claude, crewai-alternative, deepseek, multi-agent, ollama, orchestrator, workflow, openai, codex, copilot, cursor, gemini-cli, mcp-server, agent-orchestration, autogen-alternative, langgraph-alternative, no-api-key, yaml-workflow, agency-agents
has_wikiтак
homepagehttps://ao.aiolaola.com
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

Чи міцні видимі практики безпеки й ланцюга постачання, без непослабленої пов’язаності з юрисдикціями високого ризику?

39У зоні ризику · 16% загального індексу

Стан безпеки

34У зоні ризику
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — немає даних
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Ліцензія — license file detected
7.5/7.5Maintained — 30 commit(s) and 25 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
1.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 77 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,4
Виключено з оцінювання (немає даних або не застосовно): ci_tests. Залишкові ваги перенормовано.
Як обчислюється оцінка
13.2/35Прямі залежності без відомих сповіщень — уражено 1: xlsx 0.18.5 (high 7.8)
13.2/25Непрямі залежності без відомих сповіщень — уражено 1: @hono/node-server 1.19.15 (moderate 5.9)
33.5/40Немає задавнених сповіщень — 1 пакет(ів) зі сповіщеннями без реакції понад 90 дн.; найдавніше опубліковано 1 188 дн. тому
Використані вхідні дані
sourceosv
advisories3
affected_packages2
assessed_packages181
unassessed_packages0
affected_by_severityhigh 1, moderate 1
direct_affected_packages1
Звірено з runtime-замиканням залежностей npm:agency-orchestrator@0.12.1 — тим, що тягне за собою встановлення опублікованого пакета, — 181 пакетів. Досяжність не аналізується.

Готовність до ШІ

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Незалежний, експериментальний бейдж — вага 0.0, тож він подається окремо і не впливає на загальний індекс здоров'я.

68Помірний · 0% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — CLAUDE.md, integrations/antigravity/AGENTS.md, integrations/gemini-cli/GEMINI.md, integrations/windsurf/.windsurfrules
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 99 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,99
agent_instruction_filesCLAUDE.md, integrations/antigravity/AGENTS.md, integrations/gemini-cli/GEMINI.md, integrations/windsurf/.windsurfrules
agent_instruction_max_bytes6 953
Як обчислюється оцінка
0/18Розгортання однією командою
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — tsconfig.json, website/tsconfig.json
10/10Відтворюване середовище — Dockerfile, lockfile
0/10Підтверджена практика роботи з агентами — серед останніх 100 комітів немає створених агентом
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Використані вхідні дані
has_nixні
has_testsтак
lockfilespackage-lock.json
has_dockerfileтак
typed_languageтак
bootstrap_files
has_devcontainerні
has_linter_configні
typecheck_configstsconfig.json, website/tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — TypeScript (статично типізована)
54.1/55Керовані розміри файлів — 3/190 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageTypeScript
largest_source_bytes105 808
source_files_sampled190
oversized_source_files3
Як обчислюється оцінка
0/40Схема API (OpenAPI/GraphQL/proto)
20/20Сервер MCP
40/40Придатні до запуску приклади — examples
Використані вхідні дані
example_dirsexamples
has_mcp_signalтак
api_schema_files

Ключові факти

1 897зірок GitHub
1контриб'юторів
390комітів за останні 12 місяців
3днів від останнього пушу
16релізів
1бас-фактор
12відкритих issue
npmпакетних екосистем

Попередження щодо збору даних

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Докладніше

Історія зірок і форків 0 ★ / 259 ⇿
0Зірки
259Форки
16Релізи

Коли додано кожну зірку й форк — зібрано з GitHub і згруповано за днями. Кумулятивне зростання розміщено просто над денними додаваннями, з яких воно складається, тож їх видно одне проти одного: рівномірне органічне накопичення виглядає зовсім інакше, ніж різкий короткочасний сплеск. Там, де цю різницю можна виміряти, її подано як автентичність росту.

05010015020025030025972026-032026-052026-07
Мажорні 0Мінорні 2Патчі 6
OpenSSF Scorecard 3.4 / 10
3.4сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).Scorecard v5.5.0 · 2026-07-26 09:16 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
н/дCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 25 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
3Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 3
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities77 existing vulnerabilities detected
Прямі залежності 24
РеєстрПакетОбмеження версіїМаніфест
npm@anthropic-ai/sdk^0.52.0package.json
npm@modelcontextprotocol/sdk^1.28.0package.json
npmagency-agents-zh^1.2.7package.json
npmhtml-to-docx^1.8.0package.json
npmjs-yaml^4.1.0package.json
npmmarked^18.0.5package.json
npmsmol-toml^1.7.0package.json
npmsuperpowers-zh^1.5.0package.json
npmxlsx^0.18.5package.json
npm@dagrejs/dagre^3.0.0website/package.json
npm@radix-ui/react-accordion^1.2.2website/package.json
npm@radix-ui/react-slot^1.1.1website/package.json
npm@xyflow/react^12.11.0website/package.json
npmclass-variance-authority^0.7.1website/package.json
npmclsx^2.1.1website/package.json
npmframer-motion^11.15.0website/package.json
npmlucide-react^0.469.0website/package.json
npmreact^18.3.1website/package.json
npmreact-dom^18.3.1website/package.json
npmreact-markdown^9.1.0website/package.json
npmreact-router-dom^6.28.0website/package.json
npmrecharts^2.15.4website/package.json
npmremark-gfm^4.0.1website/package.json
npmtailwind-merge^2.6.0website/package.json
Усі залежності не зібрано

Не вдалося зібрати розв'язаний набір залежностей для цього звіту: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Сповіщення про залежності 2

Встановлення npm:agency-orchestrator@0.12.1 тягне 181 пакетів, прямих і транзитивних: 2 мають відомі сповіщення, з них 1 — прямі залежності.

ПакетВерсіяЗв'язокКритичністьСповіщеньВиправлено в
xlsx0.18.5прямависока2
@hono/node-server1.19.15непрямапомірна12.0.5

Сповіщення означає, що версія, записана в графі залежностей, потрапляє в уражений діапазон. Досяжність не аналізується, а граф містить піниї розробки й тестування — знахідка може стосуватися інструментів, а не поставленого коду.

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [
        "ai-agents",
        "claude",
        "crewai-alternative",
        "deepseek",
        "multi-agent",
        "ollama",
        "orchestrator",
        "workflow",
        "openai",
        "codex",
        "copilot",
        "cursor",
        "gemini-cli",
        "mcp-server",
        "agent-orchestration",
        "autogen-alternative",
        "langgraph-alternative",
        "no-api-key",
        "yaml-workflow",
        "agency-agents"
      ],
      "is_fork": false,
      "size_kb": 53903,
      "has_wiki": true,
      "homepage": "https://ao.aiolaola.com",
      "languages": {
        "CSS": 2093,
        "HTML": 108491,
        "Shell": 74509,
        "Dockerfile": 1030,
        "JavaScript": 215582,
        "PowerShell": 1617,
        "TypeScript": 1238878
      },
      "pushed_at": "2026-07-23T07:13:39Z",
      "created_at": "2026-03-21T18:32:02Z",
      "owner_type": "User",
      "updated_at": "2026-07-26T08:02:10Z",
      "description": "🚀 One sentence → your one-person company of AI experts → complete deliverable in minutes. 267 CN + 184 EN + 5 more languages (ko/ru/pt-BR/id/ar) · zero-code YAML · auto-verified acceptance · Web Studio / Desktop / Docker · 11 LLM providers (7 key-free). 一句话组建你的「一人公司」AI 专家团队,几分钟交付完整方案;验收自动核验,网页 / 桌面 / Docker 全渠道。",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript",
        "JavaScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "AI不止语",
      "type": "User",
      "login": "jnMetaCode",
      "company": " jnMetaCode@qq.com",
      "location": null,
      "followers": 689,
      "avatar_url": "https://avatars.githubusercontent.com/u/12096460?v=4",
      "created_at": "2015-04-24T08:21:49Z",
      "is_verified": null,
      "public_repos": 121,
      "account_age_days": 4111
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "desktop-v0.4.1",
          "kind": "other",
          "published_at": "2026-07-20T07:45:59Z"
        },
        {
          "tag": "desktop-v0.4.0",
          "kind": "other",
          "published_at": "2026-07-19T15:00:45Z"
        },
        {
          "tag": "desktop-v0.3.0",
          "kind": "other",
          "published_at": "2026-07-17T11:31:55Z"
        },
        {
          "tag": "desktop-v0.2.9",
          "kind": "other",
          "published_at": "2026-07-08T07:18:26Z"
        },
        {
          "tag": "desktop-v0.2.8",
          "kind": "other",
          "published_at": "2026-07-08T06:40:24Z"
        },
        {
          "tag": "desktop-v0.2.7",
          "kind": "other",
          "published_at": "2026-06-23T22:08:29Z"
        },
        {
          "tag": "desktop-v0.2.6",
          "kind": "other",
          "published_at": "2026-06-23T14:02:09Z"
        },
        {
          "tag": "desktop-v0.2.5",
          "kind": "other",
          "published_at": "2026-06-16T16:32:43Z"
        },
        {
          "tag": "v0.7.5",
          "kind": "patch",
          "published_at": "2026-06-16T16:31:21Z"
        },
        {
          "tag": "v0.7.4",
          "kind": "patch",
          "published_at": "2026-06-16T16:02:36Z"
        },
        {
          "tag": "v0.7.3",
          "kind": "patch",
          "published_at": "2026-06-16T15:10:39Z"
        },
        {
          "tag": "v0.7.2",
          "kind": "patch",
          "published_at": "2026-06-16T14:45:47Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2026-06-16T14:45:44Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-06-15T19:34:21Z"
        },
        {
          "tag": "v0.5.1",
          "kind": "patch",
          "published_at": "2026-04-15T03:09:49Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-04-13T13:13:40Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "e09bdb757c6289f48f3b004bba9954ecf5c34fbc",
          "body": null,
          "is_bot": false,
          "headline": "README:新增/升级免费配套课程导流(双课+对应语言站入口)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-23T07:13:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "269ce940d253e8227d8e65043b6d2c6133764b3c",
          "body": "官网「文档」页(docs.ts)介绍/安装/compose 等 8 段落仍写 216 位专家,\n是全站计数迁移的漏网——CF 自动部署即修正。team.ts 注释同步。",
          "is_bot": false,
          "headline": "docs(website): 文档页专家数 216→267(官网可见文案最后一处旧数)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-20T08:31:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "428d88d3155ae8cdc20b94297c897f06e20a957c",
          "body": null,
          "is_bot": false,
          "headline": "release: 0.12.1 —— 我的角色可编辑 + 角色列表递归全量 + 验收文案中英;桌面 0.4.1",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-20T07:44:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6cbd5b1f61f83cf01f38551e6d1ac52e1a0addfb",
          "body": "- Studio 角色列表此前只收分类一层,嵌套角色(game-development/unity/*\n  等)缺席——zh 显示 252/267、语言包 172/187,与官网画廊口径不一致。\n  loadRoles 改递归(引擎同口径),详情路由支持带 %2F 的嵌套 id(前端\n  encodeURIComponent,Express 单段匹配自动解码),run-role 角色名查找\n  改按完整路径匹配\n- 「我的」自建角色支持编辑(#83 核心诉求):卡片新增 ✏️,与新建共用\n  表单弹窗(预填名称/描述/正文);PUT /api/roles/my/:id 字段级合并,\n  没传的字段不动,路径守卫与删除同规\n- formatVerification 支持英文(v0.11.0 审查遗留 cleanup):CLI 行/\n  summary/步骤文件头按该步内容语言选中英,英文工作流不再蹦中文验收文案\n- test/web-server.ts +5(递归/嵌套详情/PUT 编辑),45 通过;全量回归绿",
          "is_bot": false,
          "headline": "feat(studio): 我的角色可编辑 + 角色列表递归全量;验收文案随内容语言",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-20T03:10:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4dc8093dfbdba3c33fced956e6c4b7a65e5035a7",
          "body": null,
          "is_bot": false,
          "headline": "release: 0.12.0 —— 我的角色/提示生成闭环/☆常用/多语言角色库;桌面 0.4.0",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-19T14:59:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "284175a5910373aea94107c1ff5d67efd48edd5a",
          "body": "官网专家库此前只有中英——5 个社区语言包(ko/ru/pt-br/id/ar,各 187)发上\nnpm 后,画廊是它们唯一缺的展示面:\n\n- gen-experts.mjs: 叠加社区语言包(devDependencies,装了才生成),分类名\n  用英文;experts.json 7 套数据,提示词正文静态文件同步生成\n- Experts 页: 搜索框旁「角色库」下拉(与 Studio 同一套 id);?lib=ko 可\n  直链(语言仓 README 外链用),切换写回 URL;跟随站点语言,显式选择优先\n- SEO 文案里两处漏网的 216 一并修正(改为 7 语言口径)",
          "is_bot": false,
          "headline": "feat(website): 专家库支持 7 个角色库在线浏览(?lib= 直链)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-19T14:54:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94e3e680c3e2b4373e64bdd440d713d1d3cee35f",
          "body": "- 🆕 列表补「我的角色+提示生成闭环」「多语言角色库」两条\n- 新增 docs/screenshots/studio-role-lib-ko.png(中文界面选韩语库,展示\n  ☆常用/我的/角色库下拉三个新特性),README 中英双份嵌入\n- studio-roles-zh/en.png 刷新为当前 UI(旧图无星标/我的/下拉)\n- 生态表补 5 语言库一行;自带角色说明补 my/ 与语言包用法\n- README.en.md 漏网的 8 处 216 → 267",
          "is_bot": false,
          "headline": "docs(readme): 多语言角色库/我的角色上 README + Studio 角色组队截图刷新",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-19T14:33:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0fffb5057e29008bd5b3f64aaccc9ba2d22d7f0",
          "body": "5 个语言角色包(agency-agents-{pt-br,ko,ar,id,ru}@1.0.1)已发 npm,本次接入 Studio:\n\n- server: LANG_LIBS 映射(只认 node_modules,不做同级仓兜底防掩盖发布问题),\n  agentsDirFor/normalizeRoleLang 通吃 zh/en/语言包 id;/api/config 回 roleLibs;\n  roles/详情/chat/run-role/compose 全部支持 roleLang 参数\n- compose: 新增 agentsDirName 选项,选语言包组队时生成的 YAML agen\n[…]\nerver frontmatter 解析加宽松兜底(严格 YAML 失败退回引擎同款逐行解析),\n  翻译文本裸冒号不再让角色从列表消失;内置英文库 zk-steward 同因修复\n- 语言包装成 devDependencies:本地/CI 可验证,不随 AO 正式包分发\n- test/web-server.ts +3(roleLibs/?lang=ko/未知 lang 回落),40 通过;全套绿",
          "is_bot": false,
          "headline": "feat(studio): 多语言角色库下拉(pt-BR/ko/ar/id/ru) + frontmatter 宽松解析兜底",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-19T13:22:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d938eb187f9f189dbb2741f18366afa3b4c43bd7",
          "body": "- package.json 依赖 ^1.2.2 → ^1.2.7,实装验证 ao roles 267\n- README/CLAUDE/官网文案/CLI 帮助里散落的 216 全部对齐 267,\n  友仓表中国原创数 50→52(与 zh 仓 1.2.7 口径一致)",
          "is_bot": false,
          "headline": "chore(deps): agency-agents-zh 升 1.2.7(267 角色),全站计数 216→267 对齐",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-19T12:51:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "920726ab4d2861a1b192d059d42e9f3eb3364ace",
          "body": "自建专家此前只有 AO_AGENTS_DIR 整库替换一条路,攒一两个自己的角色\n就得放弃全部内置库。本次打通「生成→沉淀→组队」闭环:\n\n- 引擎: ~/.ao/roles(AO_USER_ROLES_DIR 可覆盖)为叠加式用户角色目录,\n  loadAgent 对 my/<id> 兜底解析(agents_dir 优先),run/compose/validate/\n  resume 全链路可用;listAgents 加 includeUser 参数,ao roles/MCP/\n  compose 目录叠加,测试 fixture 语义不变\n- server: /api/roles 合并「我的\n[…]\n新建后自动落入「我的」\n- 提示词优化 → 提示生成(导航/页头/按钮,中英),CLI 命令名不动;\n  system 模式生成结果新增「存为我的角色」一键沉淀为 my/ 角色\n- 测试: roles.ts +6(my/ 解析/叠加/穿越拦截),web-server.ts +7(CRUD/\n  越权守卫);全套 45 suite 通过,workflows 全目录 35/35 validate 通过",
          "is_bot": false,
          "headline": "feat(roles): 「我的」自建角色(叠加式) + 角色☆常用 + 提示词优化改名提示生成",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-19T11:01:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3497b452ccf5c37e877851e1cce406cc6f307b68",
          "body": "原来只写\"184 个英文角色 by @msitarzewski\",读者不知道要不要自己装。\n补上关键信息:MIT 授权署名保留,已随 npm 包内置,英文任务 ao compose\n自动启用、无需单独安装。中英 README 同步。",
          "is_bot": false,
          "headline": "docs(readme): agency-agents 英文角色库条目补全与 AO 的关系",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T14:14:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14c42aa7c2a32d36553d0b04f2d8d37d1339ae69",
          "body": "#93 Docker(NAS 场景):\n- Dockerfile:node:22-slim + npm 已发布版本(同源),HOST=0.0.0.0,\n  AO_DATA_DIR=/data 挂载卷(密钥/产物/自组工作流持久化),node fetch 健康检查\n- docker-compose.yml 一键部署示例;release-docker workflow 构建 amd64/arm64\n  双架构推 GHCR(GITHUB_TOKEN,零外部账号)\n- 本机实测:build → run → /api/health ok、/studio 200、模板 API 正常、\n  HEALTHCH\n[…]\n步骤级 llm 均可),键值原样并入请求体:\n  openai-compatible / claude(anthropic) / ollama(options) 三路连接器全接\n- 核心字段受保护:params 覆盖不了 model/messages/stream(流式解析安全)\n- azure-compat 测试 +4 项(透传生效 + 保护生效)\n\nREADME 中英补 Docker 部署说明",
          "is_bot": false,
          "headline": "feat: Docker/NAS 部署 (#93) + 供应商专有参数透传 (#90)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T12:59:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5020f1f49f9f9f3628e6f7826b0e35b7d0ab59e1",
          "body": "识别技术文档类场景:运行输入弹框每个输入旁加 📎 按钮,浏览器端 FileReader\n读文本文件内容一键填进输入变量——纯前端读取、不经服务器文件路径,与引擎的\nAO_NO_AT_FILE 防护(禁止网页按路径读服务器文件)互不冲突。\n\n- 上限 200 KB:值经 -i k=v 进程参数传给 CLI,留足 ARG_MAX 余量;超限给人话报错\n- 读入后输入框下显示 📎 文件名 · 大小,仍可手动编辑\n- accept 常见文本扩展名 + text/*;中英文案齐",
          "is_bot": false,
          "headline": "feat(studio): 工作流输入支持「从文件读入」(#96)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T12:29:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f758ef149a8a2e2b9cef059699529cdfd34e5101",
          "body": "原来两条并排的 📖(上手教程 + 配套学习)图标相同、措辞相近,读起来像重复。\n合并成一行、图标区分(📖 产品教程 · 🎓 配套学习导流),两个链接与关键数字\n全部保留,中英 README 同步。",
          "is_bot": false,
          "headline": "docs(readme): 头部两条教程/学习链接合并为一行",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T12:11:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12af37f104683806863f5980cd8b9cf4c5bbab06",
          "body": null,
          "is_bot": false,
          "headline": "chore(desktop): v0.3.0 —— 全新 AO 应用图标 + 内置引擎 0.11.0",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T11:29:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3483dd44ed19f47a130f4052485d02d9aae5d68c",
          "body": "用户实测反馈:系统体检卡的刷新按钮\"鼠标放上去没有提示\"——其实有原生\ntitle,但原生提示要悬停约 1 秒才出现,用户以为没有。全面排查后把所有\n纯图标按钮统一换成即时 Tip 组件(hover 立即显示):\n\n- 系统体检卡刷新(本次反馈源头)\n- API key 明文/隐藏切换(原先连 title 都没有,纯裸图标)+ 供应商返回键\n- 运行弹窗:终端输出、关闭\n- 普通对话:下载、清空、关闭\n- 历史/实时步骤:复制(CopyButton 无 label 时为纯图标)、下载\n\nTip 组件新增 className 透传——子元素需要绝对定位时(key 输入框的眼睛按钮)\n把定位类挪到包裹层,不破坏布局。带可见文字的按钮保留原生 title 不动。",
          "is_bot": false,
          "headline": "fix(studio): 图标按钮即时悬停提示全覆盖",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T11:16:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "181be22451d0c8e4a5c5d3814d55549df3174242",
          "body": "0.10.0(7-12 定稿)与 0.11.0(今日:acceptance 自动核验两期、引擎待重启自检、\n供应商配置修复、品牌视觉、引导/默认供应商调整)随本次一起发出。\n官网 changelog 页构建期自动同步本文件。",
          "is_bot": false,
          "headline": "chore(release): v0.11.0 —— 版本收口与更新日志定稿",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T11:01:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e71c09c55373833b83887742094504553f31e38d",
          "body": null,
          "is_bot": false,
          "headline": "fix(website): 顶栏/页脚/工作台 Logo 换新 AO 品牌图标(原为紫圈 ao 文字占位)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T11:00:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5486bed1658c4013c43612ca261511b39d66033",
          "body": "品牌资产(矢量手绘 AO 标:渐变紫蓝 A + 圆环 O + 中心圆点,对齐设计稿):\n- website/public/logo/:ao-mark.svg(主标)、ao-mark-white.svg(白色版)、\n  ao-app-icon.svg(圆角渐变应用图标)、ao-banner.png(README/宣传横幅 1600×400)\n- favicon.svg + favicon.ico(48/32/16)+ apple-touch-icon.png(180)——\n  官网此前连 favicon 都没有(404 默认地球图标)\n- og-image.png(1200×630) 接入 og\n[…]\n则最终版(与赞助商确认):\n- 进阶档(多元探索)定制权益 = 默认 provider 位:Studio 下拉默认选中 +\n  服务端 AO_PROVIDER 兜底(apinebula → duoyuanx)——不再占引导横幅\n- 无凭证引导横幅/CLI ② = 其余 6 家(旗舰 APINEBULA + 5 家标准)按自然日\n  轮换 2 家,等份轮值(每家 2/6 天数),示例命令跟随当日首位",
          "is_bot": false,
          "headline": "feat(brand+sponsors): AO 品牌资产全套上线 + 赞助位规则最终版",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T10:05:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d466d26736ed46455e3cf54d3ada560e0eb0f004",
          "body": "档位规则落成代码(src/utils/sponsor-guide.ts,CLI 与 web 服务共用一份数据源):\n- 进阶档(多元探索)固定第一位——档位专属权益,不参与轮换\n- 标准档(CCSub/Cubence/优云智算/火山引擎/RootFlowAI)按自然日轮换第二位:\n  同档等份轮值谁也不吃独食,也避免多个\"注册送 X\"并排稀释进阶档转化;\n  确定性轮换,可向赞助商解释每家 1/5 的天数份额\n- Studio 无凭证横幅与 CLI ② 引导同步生效\n\n赞助商点击埋点(复用现有 GA4 track(),本地无 gtag 自动静默不上报):\n- 无凭证横幅链接 → sponsor_click / need_key_banner\n- 供应商配置页右上角注册按钮 → sponsor_click / provider_register_cta\n- key 输入框下的优惠条领取链接 → sponsor_click / provider_perk\n配合赞助商自家推广链接后台的注册/充值数据,即可拼出完整转化漏斗",
          "is_bot": false,
          "headline": "feat(sponsors): 无凭证引导标准档按天轮换 + 赞助商点击埋点",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T09:07:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "435e4c2a6ee1b80a1f36087a773539350c4bfa2d",
          "body": "- 无凭证引导(Studio 横幅 + CLI ② 路径)赞助商列表加入多元探索(注册送 3 元)\n  并排第一——顺序按赞助档位:多元探索(进阶)> CCSub / Cubence(标准);\n  示例命令同步换成 --provider duoyuanx。供应商面板多元探索本就排首位,不动\n- 添加自定义供应商页顶部标注协议边界(中英):走 OpenAI 兼容协议\n  (端点/chat/completions · Bearer 鉴权)是聚合/中转商事实标准,所以\n  端点 + key + 模型名即可直连——回应\"表单这么简单真的够吗\"的合理疑惑;\n  同时指明 Anthropic 协议中转和运行参数(温度/超时/重试)各自的正确入口",
          "is_bot": false,
          "headline": "feat(sponsors)+docs(ui): 无凭证引导按赞助档位排序 + 自定义供应商标注协议边界",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T08:43:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40f2c5ac97986ea48cfb6d3c4ad4ae889235e71d",
          "body": "/api/config、/api/test-provider、/api/provider-models 三处已拦,\n/api/custom-providers 创建时存 key 是第四个入口——漏拦会把坏 key 落盘,\n之后每次运行/测试都撞底层 ByteString 报错。四个入口现已一致。",
          "is_bot": false,
          "headline": "fix(providers): 自定义供应商创建同样拦截含中文/全角字符的 API key",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T08:24:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70f74d9c94ccd00d5a60e89a0148c1a05877fe6c",
          "body": "多元探索真 key 实测反馈的三个问题:\n\n1. duoyuanx 默认模型(sonnet-5)未在平台定价上架,测试连接必报\n   \"价格尚未由管理员配置\"——改为实测可用的 sonnet-4-6\n2. 测试连接失败时上游 JSON 原样透传又被 UI 单行截断(只见\"价格尚未由管\"半句)\n   —— 服务端抽出 error.message 人读文案(截断上限 200→300),前端最多两行\n   折行 + hover 看全文\n3. API key 含中文/全角字符(复制时把说明文字带上了)时,undici 往\n   authorization 头塞非 Latin1 字符抛底层 ByteString 错误,用户完全看不懂\n   —— /api/config、/api/test-provider、/api/provider-models 三处前置校验,\n   给出\"请只粘贴 key 本身\"的人话提示\n\n回归实测(真 key):默认模型测试连接 ok 7.2s;坏模型返回完整人读报错;\n中文 key 返回校验提示",
          "is_bot": false,
          "headline": "fix(providers): 供应商配置页三连修——坏默认模型 / 报错截断 / 中文 key 谜之报错",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T08:00:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "683b3ba9d8a6c86f8744e8c4a6a517576463014c",
          "body": "用户实测踩坑两次:引擎进程 7/15 启动,多元探索 7/16 才进注册表、cc-switch 端点\n7/17 才存在——前端每次请求从磁盘读最新构建(认识新供应商),后端进程内存里是\n启动时加载的旧代码(/api/config、/api/test-provider 报 unknown provider 400,\n/api/ccswitch-providers 404),且引擎重启后自己好了极具迷惑性。\n\n- /api/health 新增 stale 标记:server.js / dist 注册表 / dist CLI 任一文件的\n  mtime 晚于进程启动时间 → 引擎代码已更新但未重启\n- 顶栏状态徽章:stale 时变琥珀色「引擎待重启」,hover 说明缘由与做法(中英)\n- unknown provider 报错带上 provider id 和请重启引擎后重试行动指引",
          "is_bot": false,
          "headline": "fix(studio): 引擎「待重启」自检——终结改码后不重启导致的 unknown provider 谜题",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T07:44:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cacc21fdbb6a5f3e4a1999e84b74ff1773712ceb",
          "body": "核验管线(feat 2e14bde 的补丁):\n- 核验结论 max_tokens 从固定 500 改为随验收标准长度伸缩(500~2000)——\n  此前条目越多越长(恰恰是最差产出)越容易截断 JSON,核验静默失效\n- parseVerify: pass=false 但给不出任何未满足条目 → 判核验不可用(触发重试/跳过),\n  不再带着空清单烧一轮返工、显示\"验收 ⚠️ 0 条未满足\"\n- 条目内嵌换行压平成单行——CLI ⚠️ 行、步骤文件头引用块、SSE 逐行解析都按单行消费\n- 核验调用加外层超时兜底(同主链路 withTimeout 哲学),connector 内部超时失灵时\n[…]\nmpare 中断此前无痕消失)\n- resume 复用步骤把上次档案的角色名/验收标准/核验结果带回新档案——\n  续跑的 metadata 不再丢验收记录\n\nStudio SSE(feat 8ae801f 的补丁):\n- 空行终止 verify-item 窗口——正文里以 ⚠️ 开头的行不再被误吞成核验条目\n\ntest/verify.ts 新增 3 项(32 通过);全量 npm test 通过",
          "is_bot": false,
          "headline": "fix(verify+flush): 修复代码审查确认的 9 个缺陷",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T07:26:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8ae801f6af1c8d1c5ce0d84001925d421a27dd51",
          "body": "Q1 acceptance 自动核验的第二期(展示与文档):\n\n- Studio 实时运行:步骤行的「验收 ✓/⚠️」拆成彩色徽章(绿=通过/琥珀=未满足);\n  核验未满足条目由服务端拦成 step-verify-item 事件,独立卡片展示,\n  不再混入步骤正文(复制/下载的产出保持干净)\n- Studio 运行历史:步骤行显示核验徽章(hover 提示是否返工过),\n  展开详情时未满足条目在验收标准卡片下方逐条列出(metadata.verification 透传)\n- 文档站新增「验收与自动核验」页(迭代优化分组):acceptance 字段写法、\n  核验+返工机制与设计底线、三\n[…]\nose 提示词(中英)注明 acceptance 会被逐条真核验+未过自动返工,\n  要求每条仅凭产出文本即可客观判定\n\n已实测:真实 claude-code 走 web SSE 全链路——step-done meta 带「验收 ⚠️ 1 条\n未满足(已返工 1 轮)」、step-verify-item 事件携带未满足条目、正文无 ⚠️ 混入;\n历史 API verification 字段完整透传",
          "is_bot": false,
          "headline": "feat(studio+docs): 验收核验状态可视化 + 文档 + compose 提示词注明真核验",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T04:57:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2e14bde3cced4860513baa323fb66be38f4b2b92",
          "body": "写了 acceptance 的步骤产出后,用同一 provider 逐条核对验收标准——未过则把\n「上一版产出 + 未满足条目」交回同一专家针对性返工一轮再复核。验收从\"注入\nprompt 的嘱咐\"升级为\"跑完真的有人对着查\"的机制。\n\n设计底线:\n- 验收不过是质量信号而非执行错误:步骤不会因此 failed,最坏得到带 ⚠️ 的\n  返工版照常流向下游\n- 核验器自身故障(网络/解析失败)跳过核验不拦产线;返工生成失败保留第一版\n- 核验/返工 token 如实累进该步成本(max_tokens 500 的小额调用)\n\n三级开关:CLI --verify/--no-verify > YAM\n[…]\n/core/verify.ts(核验器 + 返工块,复用 --compare 盲评解析套路)\n- executor 抽出 callLLM 局部函数,返工二次生成走同一套 retry/timeout 策略\n- 核验状态进 CLI 结果行、summary.md 徽章、metadata.json、步骤文件头\n- test/verify.ts 29 项单测;validate 校验 verify 必须为布尔",
          "is_bot": false,
          "headline": "feat(core): acceptance 自动核验 + 一轮自动返工(默认开)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T04:41:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "207b9377ff69378a5e890bd17b6dfaf3b931b7f7",
          "body": "- 专家咨询自动保存进「我的工作流」(标题用角色显示名,api_key 绝不写入 yaml)\n- SIGTERM/Ctrl-C 优雅存档:引擎收到终止信号把已完成步骤落盘成 metadata 再退出,\n  网页端关页 / 终端 Ctrl-C 的运行不再无痕消失\n- 历史「继续运行」:metadata 记录源工作流路径(file)与失败原因(error),\n  未完成运行在历史详情一键续跑;服务端把裸目录名补全为 ao-output/ 绝对路径\n- 工作流卡片图标按钮即时悬停提示(新 ui/tip 组件,替代延迟 1 秒的原生 title)\n- 新增供应商:多元探索 DuoyuanX(OpenAI 兼容聚合,赞助商)+ 图标压缩\n- docs: v0.8 截图归档",
          "is_bot": false,
          "headline": "feat+fix: 专家咨询落盘/中断存档/历史续跑/悬停提示 + 多元探索供应商",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-17T04:40:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "21fe2ea9fcf6bfb1b6f1882fbbf57b991d0de18d",
          "body": null,
          "is_bot": false,
          "headline": "docs(website): 多元探索与优云智算调换展示位置",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-15T10:39:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2c36361433113c37201f34ef62b9f99eb56bb45",
          "body": null,
          "is_bot": false,
          "headline": "feat(website): 新增赞助商多元探索",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-15T10:26:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86de081cee558dcb8ddbb33d13480c6ea9cb31f3",
          "body": "- 修真 UI bug:t.studio.run 缺 notifyDoneBody/notifyFailBody/goConfigureKey 三个\n  key——运行结束的系统通知正文是 undefined、401 报错时\"去配置密钥\"按钮无文字。\n  中英补齐后 website tsc 错误归零(本轮前 7 个)\n- 演示站模板快照(gen-workflows.mjs → workflows.json)带上 category/featured,\n  公开站(无后端)的货架也能像本地一样「一人公司」系列分组置顶;快照已重新生成\n  (zh 25 / en 10)\n- 火山引擎加入后 provider 计数 10→11:README 中英(含 API key 表新增火山行、\n  自定义 API 示例移除火山——已内置)、官网 hero 统计卡、features、docs 页、\n  package.json 描述",
          "is_bot": false,
          "headline": "fix+docs: 补齐缺失 i18n key(通知/去配key按钮)+ 演示站快照带类目 + 计数 10→11",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-13T01:04:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74a1bc437e480cf9febea935550d0f4ce911f44a",
          "body": null,
          "is_bot": false,
          "headline": "docs(providers): 文档页新增火山引擎豆包小节(不替换优云智算——两家都是赞助商)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-12T23:47:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f44d761a653a0e8e945bf2a6179a53d0062a6fcb",
          "body": null,
          "is_bot": false,
          "headline": "docs: changelog 0.10.0 补火山引擎供应商条目",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-12T16:05:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f22045e64d6ba668e496295c073c430953518a30",
          "body": "赞助商火山引擎(字节火山方舟 Ark)完整对接,端点与模型对齐 cc-switch 预设:\n- 直连:注册表新增 volcengine(OpenAI 兼容 /api/v3,key 走官方 ARK_API_KEY,\n  默认模型 doubao-seed-2-1-pro-260628);Studio 供应商卡片带山峰 logo/赞助商标/\n  注册直达(活动页 utm_term=agency-agents-zh),中英 hint 文案\n- CLI 中转预设:cc 走 Anthropic 兼容 /api/compatible、codex 走 /api/v3;\n  豆包模型名与官方三档不同,Sonnet/Opus/Haiku 统一预填映射\n- 修中转预设模型预填被吞:初值用 ?? 时,存过一次空字符串就永远盖住预设——\n  改与 base_url 同一先例(点预设行=用这家,预设优先);顺带补上\n  CliRelayPreset 的三档模型字段类型(消掉 3 个既有 tsc 错误)\n\nprovider 相关测试 + web-server 冒烟全过;GUI 实测卡片/预设下拉/配置页预填",
          "is_bot": false,
          "headline": "feat(providers): 火山引擎接入(直连 API + 编码 CLI 中转预设)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-12T16:04:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9791718608362a502681b3b0d169a4941062aa38",
          "body": null,
          "is_bot": false,
          "headline": "release: 0.10.0(验收标准 + 一人公司系列 + 我的工作流资产化 + 画布修复)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-12T12:07:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26c06d8ca95fa7eacb67f6cdabf37890e4eaa193",
          "body": "- README 中英:主标语下加副句「你当老板,AI 当团队——自动组队、重大决策\n  请你签字、按验收标准交付」;中文 Studio 特性列表加「一人公司」系列入口\n  (明示交付的是可验收成果,不承诺奇迹)\n- 官网 hero 副标题(中英):一人公司钩子开头,流程链补\"重大决策请你签字 →\n  按验收标准交付\"(对应新引擎能力,非空话)\n- npm keywords 加 one-person-company\n\n刻意不改产品名与主标题:一人公司作系列名+营销叙事,主定位待系列被\n市场验证后再考虑升级",
          "is_bot": false,
          "headline": "docs+site: 「一人公司」副叙事上 README 与官网 hero(方案2:主定位不动)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-12T11:18:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a0a0b8dce3e19eeef76daed7ff2ac3b23915fcd",
          "body": "- 画布保存的 QA #14 守卫(每步必须有 role)误杀本就无 role 的\n  approval / human_input 节点——含签字闸门的模板(如一人公司·做投研)\n  和带中途提问的组队产物在画布里一律 400 存不了。守卫对这两类节点放行\n- 编辑侧栏适配:闸门/提问节点显示说明条 + 提示语编辑框(不再显示无意义\n  的角色下拉和任务框);普通节点新增「验收标准」编辑框(acceptance,\n  graph 往返本就保真,此前只是没有编辑入口);节点卡片对无 role 节点\n  显示「签字闸门/等待输入」标题并回退展示 prompt\n\ntest/web-server.ts +1(approval 节点无 role → 200 可保存),29 项全过",
          "is_bot": false,
          "headline": "fix(canvas): approval/human_input 节点被\"缺角色\"守卫误杀 + 编辑侧栏适配",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-12T04:11:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ab440f8f37321d6c073b1ee6adaf5bc551a3915",
          "body": null,
          "is_bot": false,
          "headline": "feat(website): 火山引擎英文站改用 BytePlus logo(logo 支持按语言取值)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-12T03:31:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be6bd7ca9b76adae3bb21c1e5d4fe0cfae32abd7",
          "body": null,
          "is_bot": false,
          "headline": "feat(website): 新增赞助商火山引擎(中英文分站链接)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-12T03:12:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ceb8ff599c9a5bba297fc847e9292680a632246",
          "body": "一人公司 = 你当老板,AI 当团队。系列四件套(含既有全员大会)归入\n「一人公司」类目并置顶货架:\n- 做产品:老板简报 → PRD → 技术方案 → 冲刺计划 → 启动包\n- 做内容:定位 → 观众洞察 → 选题库 → 首条脚本 → 作战日历\n- 做投研:宏观 → 行业 → 估值 → 风控 → 老板签字(approval) → 研究报告,\n  含免责声明(仅供研究参考,不构成投资建议)\n\n关键步骤带 acceptance 验收标准(吃新引擎能力的狗粮);投研版示范\n高风险签字闸门。全部通过 ao validate 与模板门禁",
          "is_bot": false,
          "headline": "feat(workflows): 「一人公司」系列模板(做产品/做内容/做投研)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-12T02:08:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99561cc6d623e20962ba4ea7c445f92d61af6cb0",
          "body": "把\"验收写成数据\"作为质量机制(而非再叠一个 Reviewer Agent):\n- step 新增可选 acceptance:(支持 {{变量}})——执行时注入该步 prompt 末尾\n  作最后指令;渲染后存入 StepResult/metadata;步骤文件头部展示;\n  运行历史查看器以独立面板展示;--compare 盲评以最终步 acceptance 为\n  首要评分锚点(两份产出同一把尺)\n- validate:acceptance 纳入 {{变量}} 引用校验(漏了会 run 期才崩)+\n  字符串类型检查;不改动既有错误文案(compose 自修复解析契约)\n- compose 提示词(中英):教模型给关键步骤写 acceptance;金融/医疗/\n  法律/花真金白银类任务在最终步前自动插 type: approval 签字闸门\n\ntest/acceptance.ts 15 项全过;workflows/ 全目录批量 validate 通过;\n全量 npm test 通过",
          "is_bot": false,
          "headline": "feat(engine): acceptance 验收标准字段 + compose 高风险自动 approval",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-12T02:07:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "952a6b638d3f2833f5d0f3508228ccf8cd3dfb8d",
          "body": "- 原生 window.confirm 带 \"127.0.0.1:8088 显示\" 抬头且不跟主题,换成\n  ConfirmDialog(新 ui 组件,可复用;Button 新增 destructive 变体)。\n  删除失败原因显示在框内;文件已被外部删除时幂等成功(404 视为已删)\n- 我的工作流排序:点 ☆ 置顶优先,其余按最近修改倒序。不做拖拽——网格\n  里拖拽换行难用,手动顺序还会和\"最近修改\"信号打架,星标钉住更直接\n- 我的分区内卡片去掉冗余的 \"· 我的\" 后缀",
          "is_bot": false,
          "headline": "feat(studio): 删除确认改应用内弹框 + 我的工作流 ☆ 置顶",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-11T15:39:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad3b9d0ef5adde3aad9d9ad6499610b2c6a3f740",
          "body": "用户组的工作流是核心资产却排在类目第 5 位、不可删、带不走(#92、agents-zh#98):\n- 「我的工作流」独立分区置顶,按最近修改倒序(meta 新增 mtime/deletable)\n- 卡片支持删除(DELETE /api/workflows,严格限 COMPOSED_DIR,内置模板与\n  AO_USER_WORKFLOWS_DIR 一律 403)与下载 YAML(复用 /api/workflows/yaml)\n\n画布\"怎么改都存不了\"(#91)是两个问题叠加:\n- POST /api/workflows/graph 只校验不修复——现接入 compose 同款确定性补边\n \n[…]\ngDependsOn(#87),只补边不改名,修不动才 400;响应带 autoFixes\n- 前端错误处理读 e.errors 但 postJSON 挂在 e.body 上,用户只见 \"invalid\n  workflow\" 没细节——改读 e.body.errors;成功时显示补边数并把新边画回画布\n\ntest/web-server.ts:+7 条(删除守卫/元数据标记/自动补边),28 通过",
          "is_bot": false,
          "headline": "feat(studio): 我的工作流资产化(置顶/删除/下载)+ 画布保存自动补边",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-11T15:18:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bb8e97c775bbcb49321c5fb254071b7eb6c727b5",
          "body": null,
          "is_bot": false,
          "headline": "docs(en): 英文 README 与中文版对齐——hero 改用英文 GUI 演示动图,终端 GIF 下移到 CLI 区",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-08T07:38:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d9988e5375172a29159ae1cacd6a1c079e81ef0",
          "body": "…AMFI 拦)",
          "is_bot": false,
          "headline": "fix(desktop): afterSign 钩子强制 ad-hoc 完整重签,修 arm64 Mac 装了打不开(未签名版签名残缺被 …",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-08T07:16:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "462fa6565a758323782b3a967008a74469ea4f92",
          "body": null,
          "is_bot": false,
          "headline": "fix(ci): test 前构建 Studio(web-server 冒烟需前端产物,修 CI 一直 failing 的 503)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-08T06:42:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c94088384f0b3d3cfe2db4d63d1019c1fca9b53",
          "body": null,
          "is_bot": false,
          "headline": "release: 0.9.0 (CLI) + desktop 0.2.8",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-08T06:38:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0dbf4d559590633d7ddc0c8253c5b4f82f09ed7c",
          "body": "- hero 从终端 GIF 换成「网页 Studio 一句话自动组队」的 GUI 演示动图(demo-studio-zh.gif,\n  puppeteer 抓帧 + ffmpeg 合成),突出图形界面/客户端;终端 GIF 下移到「一句话出结果」CLI 区\n- 网页 Studio 区去掉与 hero 重复的角色页静图,保留工作流图\n- evalNote 软化:强调「有能力≠贵(DeepSeek/本地 70B 就够),只是别用 8B 级小模型」,\n  不打压免费/本地路径,也不像在推付费",
          "is_bot": false,
          "headline": "docs: README hero 改用 GUI 演示动图 + evalNote 软化",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-08T01:32:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d656532f52ec396f324443dd1598fbbabb61c174",
          "body": "- demo 脚本的版本号硬编码 v0.5.0(现为 v0.8.1)→ 改为构建时的当前版本\n- 用 asciinema + agg 重录 demo-zh.gif / demo.gif,README hero 自动更新为当前版本",
          "is_bot": false,
          "headline": "docs: 重录 README demo GIF(修掉过时的 v0.5.0 版本号)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-08T00:31:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d2703dbd78ebfcc6baad677d363fe0fefc6c285",
          "body": null,
          "is_bot": false,
          "headline": "fix(studio): 补上 Studio/RolesPicker 依赖的 ChatPanel(前序提交遗漏,缺它分支构建失败)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-08T00:08:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a79174f88aa780b04d3e1383ede910d1a376e93",
          "body": "- desktop/main.cjs:桌面端(Electron)启动器增强\n- ProviderSelect:顶栏供应商下拉分组\n- OneLinerDemo + studio-workflows.webp:首页「一句话出结果」演示图更新\n- RoleDetail / RunManager / RunViewer / BaselineCompareOverlay:Studio 运行/角色/对比视图微调\n- providers-manifest.json:远程赞助商清单更新(部署即生效)\n\n注:docs/screenshots/v0.8/(37MB 暂存图,未被代码/README 引用)未纳入,避免仓库膨胀。",
          "is_bot": false,
          "headline": "feat: 桌面端启动器 + 供应商下拉 + 首页 demo + 运行视图(既有 WIP)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-08T00:07:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2004dc15baf79ac289fe90bd6f285f2f566a6cc1",
          "body": "UI 改动后重拍:角色页现含「省钱模式」勾选、顶栏模型下拉/供应商等新样式。\n用系统浏览器无头渲染 + 固定 2184×1796 视口截取,与原图规格一致。",
          "is_bot": false,
          "headline": "docs: 重新生成 4 张 Studio 截图(roles/workflows × 中/英)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-07T23:58:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "beefd79b5e7713fe67028770dc87dbefc07eb778",
          "body": "- 供应商 logo 接入(列表行 + 配置页头像,复用已有 sponsors 图标)\n- 顶栏模型下拉只给精简推荐集,不再倒灌聚合商全量目录;配置页大列表按厂商分组\n- 「复制为供应商」:把品牌供应商复制成自定义供应商(预填端点+模型)\n- 新增 CCSub 赞助商(前端);自定义供应商预设精简为 5 家主流大厂\n- 首跑引导(网页/桌面同后端):/api/compose 无凭证时返回结构化三选一,前端渲染引导卡\n- 省钱模式开关:RolesPicker 勾选传 budget 给 /api/compose(默认不勾)\n- 系统官方 CLI 配置体检卡:被第三方写坏时一键恢复(/api/claude/* 后端 + 卡片)\n- 修 Studio 白屏(TDZ:setTab/refreshConfig 定义顺序)+ 中转配置行删冗余注册按钮\n- 无 key 拉模型时给友好引导而非原始 401\n\n注:这些文件里同时含会话前既有的 provider 下拉 WIP(同文件交织,无法逐块分离)。",
          "is_bot": false,
          "headline": "feat(studio): 供应商 UX + 首跑引导 + 省钱开关 + 官方 CLI 配置体检卡",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-07T15:53:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50853f1fb08ed5e96fa6fd367e62aea737f876cb",
          "body": "- ao doctor [--fix]:一条命令自检 provider/凭证/已装 CLI/官方 CLI 登录配置;\n  --fix 检测到本机官方 CLI 配置被第三方写坏(假 token/中转地址顶掉官方登录)时一键清除恢复(写前自动备份)\n- ao compose/run --temperature 0~2:采样温度(0=近确定性、可复现);\n  连接器透传(openai 兼容/anthropic 原生/ollama),parser 整体透传,per-step 亦可覆写\n- ao compose --budget:轻活步骤(抽取/汇总/格式化)自动降便宜档、重活(分析/设计/创作)保强档\n[…]\nmpose 首跑引导:无可用凭证时给「三选一」路径(已装 CLI/送额度中转/本地模型)而非晦涩连接器错\n- 新增配置急救模块(诊断/修复被第三方写坏的官方 CLI 登录配置)\n- 新增 workflows/省钱混用示例.yaml(per-step 模型混用示范)、research/ 自动研究循环日志\n\n仅含引擎/CLI 侧改动;provider 配置的前端部分与既有 WIP 交织,未纳入本提交。",
          "is_bot": false,
          "headline": "feat(cli): 新增 ao doctor 自检、--budget 省钱分档、--temperature、compose 首跑引导",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-07T15:47:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "49b9a9c2067245a10ceec4085674f17d0aa13596",
          "body": null,
          "is_bot": false,
          "headline": "fix(website): _headers 用 ! 移除 /assets 上叠加的兜底 Cache-Control",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-07T08:24:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6cef6eefaed34e596e71436c2f2add5afba99b7a",
          "body": null,
          "is_bot": false,
          "headline": "fix(website): _headers 兜底所有 SPA 路由不缓存 HTML,杜绝过期 HTML 引用旧资源",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-07T07:49:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3446f781175b01ca42dabd621d7ed7648eb10a7",
          "body": null,
          "is_bot": false,
          "headline": "fix(website): 变更 CSS 内容强制刷新资源哈希,绕过被污染的边缘缓存",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-07T07:27:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a59e2f1a18359119cf74073637f3b5d64f2fb636",
          "body": null,
          "is_bot": false,
          "headline": "fix(website): CCSub 文案移除已下架的 DeepSeek",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-07T07:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb84c324e1004c4e0da5e7985546e57fc957136c",
          "body": null,
          "is_bot": false,
          "headline": "feat(website): 新增赞助商 CCSub",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-07T06:41:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "807facd4b1ed7de89708fde8f896c3efe4c8d781",
          "body": "- 14+ 项平铺改为分组:聚合平台(赞助商在列)/模型公司/本地 CLI/本地模型/\n  自定义,\"想配某家模型公司的 API\"一眼能找到\n- 修复:远程清单上架的赞助商此前只出现在面板,不在顶部下拉里,无法切换;\n  现已纳入聚合平台组,赞助商标同步显示\n- 注册表加 vendor 标区分模型公司官方 API 与聚合平台",
          "is_bot": false,
          "headline": "feat(studio): 顶部 provider 下拉分组展示 + 纳入远程清单赞助商",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-06T15:32:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "226b7552605bb5c7f4a1a20fa550dfeb2e98b7ba",
          "body": "- ProviderSelect 旁新增 ModelSelect:显示当前供应商正在用的模型,展开时实时\n  拉取该供应商的真实可用模型列表(/models),点选即保存为该供应商默认,下次\n  运行立即生效——聚合商用户(如在同一家的不同大模型间来回切)一键完成\n- 拉取失败退回静态模型建议;CLI provider 用各自工具的登录态选模型,不显示\n- CLI_PROVIDER_IDS 抽为共享常量,与后端 CLI_PROVIDERS 对齐",
          "is_bot": false,
          "headline": "feat(studio): 顶栏模型快切下拉——同一聚合商下换模型不再钻配置页",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-06T15:23:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db3b2e500ec9806c6ff52c7525a6dea52875f814",
          "body": "PROVIDERS 列表漏了 codex-cli/copilot-cli/hermes-cli——供应商面板里能看到\n这三个(甚至已检测到),顶部下拉却选不了;PROVIDER_LABELS 同步补齐,面板\n不再显示小写原始 id",
          "is_bot": false,
          "headline": "fix(studio): 顶部 provider 下拉补齐缺失的 3 个 CLI + 面板显示正式名称",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-06T15:13:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9279f52a85f8e651d9e5f82743cc99ca1a08beb",
          "body": "Cubence 行原来并排三个无动词的 CLI 名称按钮,用户看不懂是干什么的。\n改为一个「配置中转 ▾」下拉,展开后选择给哪个 CLI 配置(端点仍自动预填);\n说明行同步改为\"同时支持三家 CLI 工具\"的表述",
          "is_bot": false,
          "headline": "fix(studio): 中转商行三个裸按钮改为「配置中转」下拉",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-06T15:09:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbd856a2db97ae635156bea1af69f712879e6751",
          "body": "- 单独对话(run-role)的内容流过滤 ====== 分隔线和\"详细输出\"页脚:之前这些\n  终端装饰混进复制/下载的 markdown,分隔线还会把上一行渲染成超大 H1 标题\n  (用户截图反馈的格式灾难根因)\n- 保存位置可见:服务端把\"详细输出\"行解析成 output-dir 事件(解析为绝对路径,\n  桌面端 AO_DATA_DIR 下的真实位置),运行完成后弹窗底部显示 📁 完整路径,\n  点击即复制——用户不用再猜产物存在哪",
          "is_bot": false,
          "headline": "fix(studio): 单独对话内容不再混入终端装饰 + 运行完成显示保存位置",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-06T14:40:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "149dfeeca2bd54ba222cd5fc74343917248129af",
          "body": "- 测试连接不再要求先保存 key:请求带上输入框当前值(apiKey/baseUrl/model\n  覆盖参数),填了就能测;按钮不再置灰,没 key 时点击会得到明确的红字提示\n- CLI 中转配置页隐藏\"测试连接\":claude-code/gemini 中转走各自 CLI 原生协议,\n  用 OpenAI 格式去测会误报失败,宁可不测不误导\n- 注册直跳按钮统一收到配置页右上角(金色,更醒目);中转配置页选中某家中转商\n  端点时同样显示",
          "is_bot": false,
          "headline": "feat(studio): 测试连接免保存直测 + 注册按钮移至配置页右上角/列表行",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-06T14:31:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52bbed715f329064aa204dc882927bd07e2139fa",
          "body": "- 赞助商徽章从灰色中性改为金色(带闪光图标),与旗舰同色系,列表上一眼可辨\n- 配置页 API Key 旁新增「注册领取 Key」金色直跳按钮:APINEBULA/CompShare/\n  RootFlowAI 带各自推广链接;Cubence 中转行和中转配置页(选中其端点时)同样\n  有注册直跳;远程清单 providers/relayPresets 支持 signupUrl 字段(https 白名单)\n- 清单字段改为白名单透传,链接类字段一律强制 https",
          "is_bot": false,
          "headline": "feat(studio): 赞助商徽章金色高亮 + 注册直跳按钮",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-06T14:16:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a96de8a680183b156557c1620588db5678d89d7a",
          "body": "- Cubence 端点从 api-dmit 线路改为主端点 api.cubence.com(与 cc-switch 预设\n  一致;api-cf/api-dmit/api-bwg 为备用线路)\n- CLI 中转商行(Cubence)移到本地 CLI 区块首行,赞助商曝光位提前\n- 自定义供应商预设图库收敛为官方厂商端点(阿里云 DashScope/魔搭/火山方舟/\n  智谱/Kimi/MiniMax/StepFun/百川/零一/Mistral):第三方聚合商展示位留给\n  付费赞助商(经远程清单上架到云端 API 区),移除 SiliconFlow/OpenRouter/\n  Together/Groq/Fireworks",
          "is_bot": false,
          "headline": "fix(studio): Cubence 主端点对齐 + 中转商行置顶 + 预设图库只收官方厂商",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-06T13:53:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a22850a95b58943f7ef675d919fdc5964ed4e894",
          "body": "- 新增 website/public/providers-manifest.json(随官网 Vercel 部署):providers=\n  增量上架的聚合 API 赞助商,relayPresets=增量 CLI 中转商,removedProviders=\n  下架的内置 id。运营动作=改清单 push 官网仓,几分钟全球生效\n- web/server.js 启动拉取清单(AO_MANIFEST_URL 可覆盖,6h 缓存,失败静默回退\n  空清单+10min 短缓存,离线不受影响);远程供应商走\"自定义供应商\"同一运行\n  通道(base_url/key 直传),引擎零改动,老版本客户端\n[…]\nrovider(已用恶意\n  清单条目实测全部被过滤,deepseek 不可被劫持)\n- Studio:远程赞助商在云端 API 区渲染(带赞助商标),removedProviders 隐藏\n  对应内置行,远程中转商并入 CLI 中转商行与配置页预设\n- 已验证全链路:清单上架假赞助商 → 面板出现 → 存 key → 真实跑通工作流\n  (请求带正确 Bearer token 和清单默认模型)",
          "is_bot": false,
          "headline": "feat(providers): 远程供应商清单——赞助商上/下架不再需要发版",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-06T13:37:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4c121168539a8c0e47a0d338e7b362fd8f477a9e",
          "body": "- 主列表压成两列紧凑行(名称+徽章+key状态+设为当前/配置),5 屏长页变 1 屏,\n  参考 cc-switch 的列表密度;本地 CLI 区同步压紧\n- 新增全屏配置页 ProviderConfigView(基本信息/连接配置/模型三个分区卡片,\n  顶栏返回+头像+标题,官网链接可点):key/base_url/模型/测试连接/CLI 中转/\n  添加自定义供应商全部收进来,替代原卡片内联表单和 CustomProviderModal\n- 「获取模型列表」:新增 POST /api/provider-models,真实调用供应商 /models\n  接口拉可用模型点选,不再依赖硬编\n[…]\n持编辑(新增 PUT /api/custom-providers/:id,\n  之前创建后元数据锁死);标识不可改并说明原因\n- CLI 中转商预设:Cubence(赞助商)在本地 CLI 区有列表级独立行,点对应 CLI\n  按钮直达中转配置且端点预填;配置页内也有预设胶囊\n- 内置供应商配置页显示真实默认端点;Claude 原生 SDK 不支持自定义 base_url,\n  不再显示无效输入框",
          "is_bot": false,
          "headline": "feat(studio): 供应商面板紧凑化重构 + 全屏配置页 + 获取模型列表",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-06T13:17:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "382a2d5816ec9f47670109e053a415cf44d75900",
          "body": "- 新增 src/connectors/api-providers.ts 统一注册表:OpenAI 兼容 provider 的\n  env 变量名/默认 base_url/默认模型一处定义,factory/cli/web 全部查表——\n  以后新增一家聚合商只改 2 个文件(后端表+前端表)\n- 接入 RootFlowAI(赞助商):api.rootflowai.com/v1,Studio 供应商面板第 3 位\n- Studio 测试连接修复:聚合商此前误用 OpenAI 官方端点和默认模型去测(必 404),\n  现按注册表取各家真实 base_url/模型,并尊重用户已存模型\n- CLI \n[…]\n确认)\n- 自定义供应商:任意 OpenAI 兼容 endpoint 可在 Studio 直接添加/编辑/删除,\n  含 15 个常见预设(SiliconFlow/OpenRouter/火山方舟/智谱/Kimi 等)一键填\n  base_url;buildLLMConfig 补上 api_key 直传,自定义与内置走同一机制\n- ao init 对已注册聚合商不再误报\"还缺 --base-url\"",
          "is_bot": false,
          "headline": "feat(providers): 供应商统一注册表 + RootFlowAI + CLI 中转 + 自定义供应商",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-06T11:44:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b336c5724607ac37b4cb5c6f47f1b398ae8b06ac",
          "body": "- 子进程输出改为按 Buffer 收集、严格 UTF-8 校验解码,非法字节在 Windows 上\n  回退 GBK——修复 cmd.exe 的 \"'gemini' 不是内部或外部命令\" 被按 UTF-8 硬解\n  成乱码、用户看不出真实原因的问题(网页版 Gemini CLI 报错乱码的根因)\n- shell:true 下命令不存在时 cmd.exe 吞掉 ENOENT,新增按 stderr 内容识别\n  \"命令未找到\",给出明确的安装指引;claude-code 独立实现同步修复\n- gemini-cli / copilot-cli / codex-cli 补上 installHint(注释里有但没接线)\n- 新增 GBK 真实字节序列回归测试(含完整 spawn 链路)",
          "is_bot": false,
          "headline": "fix(cli-connector): Windows 中文系统下 CLI 报错乱码 + 命令未安装识别",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-06T11:44:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a067526a5102bb69b03d32d6965f91772bd973d",
          "body": "- 新增 autoFixMissingDependsOn: \"变量名对但漏连 depends_on 边\"这类 compose\n  最常见错误改为确定性自动补边(按 YAML 缩进结构识别真实 step 边界,带环检测),\n  不再需要额外 LLM 修复调用;issue #87 截图场景收录为回归测试\n- compose 系统提示词(中英)加入 human_input 步骤类型说明:任务需要用户中途\n  澄清时插入交互步骤,而不是让角色在 task 里\"假装提问\" (#88)\n- \"依赖不存在的 step\" 错误纳入修复链,不再漏过",
          "is_bot": false,
          "headline": "fix(compose): AI 组队常见校验失败自动修复 + 教会编排器 human_input (#87 #88)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-06T11:43:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27bed1268b6d647a78212184e1af2c5cde9cfff2",
          "body": null,
          "is_bot": false,
          "headline": "feat(website): 新增赞助商 Cubence",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-06T08:00:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "515a9960c6a941199ceeef5b089c95b8fb900813",
          "body": "标准位卡片描述超出 4 行截断后,鼠标悬停在卡片下方浮层展示完整文案,替代原来的 title 提示",
          "is_bot": false,
          "headline": "feat(website): 赞助商卡片描述悬停展示完整内容",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-05T06:45:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ee2532026f96bab08d2aa0e2ba1a66e3d7f1b37",
          "body": "放大专属福利表格 logo 尺寸并加宽容器,卡片名称/描述加悬停完整内容提示,CTA 文案改为「前往」",
          "is_bot": false,
          "headline": "feat(website): 赞助商板块细节优化",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-05T06:24:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31b505fb4b8b3a6eb46ed835e0db637fc28d61f8",
          "body": "大模型 API 聚合平台,标准位赞助",
          "is_bot": false,
          "headline": "feat(website): 新增赞助商 RootFlowAI",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-07-05T06:08:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0a55825dee4a8eed6204b3f84369e936515d613",
          "body": "滚动超过约一屏才出现,平滑回顶;专家库/文档/创意库等长页面适用。",
          "is_bot": false,
          "headline": "feat(web): 加全局「回到顶部」浮动按钮",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-24T04:01:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "108f6de9e1c2f974e48512d999c06a025b194b30",
          "body": null,
          "is_bot": false,
          "headline": "chore(desktop): bump 0.2.7(随 desktop-v0.2.7 重切,含报告导出 + 产物名对齐 tag)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-23T22:07:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b16a61b6f96a1c1caa2444d081567bb70316c3a",
          "body": "报告导出:Word / PDF / Excel + Skill / 可执行计划",
          "is_bot": false,
          "headline": "Merge pull request #85 from jnMetaCode/feature/export-formats",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-23T20:42:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b2ba91e62e899160cb0c8b8ec3eb182f3732b56",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump 0.8.1(报告导出:Word/PDF/Excel + Skill/可执行计划)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-23T20:41:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef68ab756d8b45235d54b0bab7c76772d9cae3be",
          "body": "命令行也能一键导出本次产出(与 --materialize 并列);懒加载转换器不拖慢普通运行;\npdf 无 pandoc 时回退打印就绪 HTML 并提示。",
          "is_bot": false,
          "headline": "feat(export): CLI ao run --export docx|pdf|xlsx|skill|plan",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-23T16:58:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5baa9e4c97b4b701ec9c27e3de46ac9ccfa1e04b",
          "body": "- POST /api/export(markdown+format → 文件下载,RFC5987 中文文件名);冒烟测试覆盖 docx/skill/400 守卫\n- RunViewer 加「导出 ▾」:Word/PDF/Excel + 存为 Skill / 可执行计划(给机器)\n- downloadExport() 前端 helper(blob 下载);埋点 export 事件",
          "is_bot": false,
          "headline": "feat(export): /api/export 端点 + 运行视图「导出」下拉",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-23T16:35:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f11643dd0c60bacb609d004762919ad5336da0ad",
          "body": "确定性转换(非 LLM,参考 n8n 的 convert-to-file 用库的做法):\n- docx/pdf:有 pandoc 用它(pdf 走 xelatex 最佳排版),无则纯 JS 兜底(marked+html-to-docx;pdf 退打印就绪 HTML)\n- xlsx:SheetJS 从 Markdown 表格抽(每表一 sheet)\n- skill:把报告包成可复用 skill(.md+frontmatter);plan:包成交编码 agent 自动执行的计划\n- 探测 pandoc 复用 providers/detect;单测 test/export-convert.ts 11/11",
          "is_bot": false,
          "headline": "feat(export): 报告转换核心(Word/PDF/Excel + Skill/可执行计划)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-23T16:29:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a521d3004a39b0c031c96c12de07e3ab4c513b9",
          "body": "…line\n\nRelease 0.8.0:零配置首跑 + 可编辑画布 + 创意库 + 发布闸 + #80/#81/#82/#67 修复",
          "is_bot": false,
          "headline": "Merge pull request #84 from jnMetaCode/feature/zeroconfig-canvas-base…",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-23T13:59:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5e06344d511ff0b2b653ea5f9ac37aa35ab12a2",
          "body": "track() helper → 关键事件:compose_start/success/error(自动组队核心激活信号)、\nworkflow_run、compare_open(card/run)、creative_prompt_copy。\n发布后即可用真实数据判断哪些功能被用、激活率多少;gtag 缺失静默跳过不影响功能。",
          "is_bot": false,
          "headline": "feat(analytics): 加激活漏斗埋点(GA4)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-23T00:17:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e8cab3c2092c5976bbbcf84ae86e5450e4ebb14",
          "body": "命中价值时刻——用户看完多智能体产出,一键再跑单次基线 + 盲评,直观看到强在哪。\n复用 run.source(file/inputs/provider)+ 已有 BaselineCompareOverlay,同 z-[60] 后置渲染压在运行视图上。",
          "is_bot": false,
          "headline": "feat(studio): 工作流跑完后在运行视图加「对比单个 AI」CTA(P1 价值可见)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-23T00:01:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c32f96e517f5566298b1658371bb7b8da6f6bc09",
          "body": "- release.yml:推 v* tag → 校验 tag 与 package.json 版本一致 → build + verify:release + 全量测试 → npm publish(需 NPM_TOKEN secret)\n- release-desktop.yml:除手动触发外,推 desktop-v* tag 也自动出三平台包\n- 根治'代码已修但线上没发'(#80/#81):发布从手工仪式变成 tag 一推即走、且强制过闸",
          "is_bot": false,
          "headline": "ci(release): 加 tag 驱动的 npm 发布流水线 + 桌面包支持 tag 触发",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-22T23:52:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bafb352dcf38f4d893d0ff755ce4b0b7e7d3b830",
          "body": "- 桌面端自带引擎,无需另装 ao;provider CLI 需本机装+登录(AO 自动探测);API key 类无需装 CLI\n- 自定义目录:AO_DATA_DIR / AO_AGENTS_DIR / AO_HOME",
          "is_bot": false,
          "headline": "docs(#44): README 安装段讲清桌面端 vs CLI + provider 要求 + 自定义目录",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-22T23:35:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9cde745f19607213a0de1b5b1390e6e782160dc3",
          "body": "只补已验证存在的能力;模板计数/分类表(dev/*.yaml 体系)不动,避免误改。",
          "is_bot": false,
          "headline": "docs(readme): Studio 段补充新能力(AI 自动组队 / 可视化画布 / 创意库 / 零配置首跑)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-22T20:59:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "719e027ba9b4598f8896afe62c35136b204ce069",
          "body": "发布 0.8.0 时把 [Unreleased] 改名为 ## [0.8.0] - <日期> 即可;站内更新日志页自动同步。",
          "is_bot": false,
          "headline": "docs(changelog): 补本批改动到 Unreleased(零配置/画布/创意库/stall修复/SEO/导航等)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-22T20:27:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eeff83bb0a9a89ace55e3525e57b88472c18514c",
          "body": "- useSeo:页面卸载时还原 title/description/og,避免从设了 SEO 的页切到没设的页(首页)时标题残留\n- 导航「帮助」组的 React key 从 i18n label 改为稳定 id 'help',切换语言不再重挂载该组",
          "is_bot": false,
          "headline": "fix(web): useSeo 卸载还原标题/meta + 导航 group 用稳定 key",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-22T20:07:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "209b7369bca57d99629081962fde331993f55e2e",
          "body": "两种方式都上:index.html 加 baidu-site-verification meta;public 根放 baidu_verify_*.html(字节精确匹配)。CF Pages/本地服务静态文件优先于 SPA 回退,验证文件可被直接抓取。",
          "is_bot": false,
          "headline": "feat(seo): 加百度站长验证(meta 标签 + 根目录验证文件)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-22T19:54:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4789ff92dba4385d80d4ae8d860a1e0c2240efeb",
          "body": "子页此前继承首页标题,搜索结果千篇一律。各页独立 meta(专家库针对'216 AI 专家角色'等关键词)。",
          "is_bot": false,
          "headline": "feat(seo): 专家库/提示词/文档/教程 加 per-page title+description",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-22T19:15:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bf5fcd3e91854117b57229ae90f215a75877bcd",
          "body": "权威数 = loader 递归枚举:agency-agents-zh 216、agency-agents 184。\nREADME/CLAUDE 的 216 本就正确,仅 npm 描述写错为 211,此处订正。",
          "is_bot": false,
          "headline": "fix(#67): package.json 描述角色数 211 → 216(与 loader 实际枚举 216中/184英 对齐)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-22T19:15:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed9fc714946a235f05d88ae6a83f8630c9c2a8ae",
          "body": "顶层 7 项:工作台·专家库·创意库·影视提示词·提示词优化·帮助▾·赞助商。\n影视提示词跳 prompts.aiolaola.com;创意库内重复的视频 CTA 移除(导航已有专项入口)。",
          "is_bot": false,
          "headline": "refactor(nav): 文档/教程/更新日志/学习 收进「帮助」下拉 + 新增「影视提示词」外链",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-22T19:04:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92a4487b9208ca785d66757ceb3eadfda69ecc00",
          "body": "工作台·专家库·创意库·提示词优化·文档·教程·学习·赞助商。\n去掉「能力」(首页锚点价值低)和「更新日志」(移出顶栏,路由仍在);撤回下拉分组,改回扁平直显。",
          "is_bot": false,
          "headline": "refactor(nav): 扁平化导航为 8 项",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-22T18:47:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3fb418a54df55901fa7eb5f31712a374aa436ef3",
          "body": "含本批:零配置首跑、可编辑画布(+执行点亮)、创意库、标准开发工作流、\nDeepSeek stall 修复、发布闸、工作流分组/收藏、SEO 基础、导航重组、QA 修复。",
          "is_bot": false,
          "headline": "chore(release): bump 版本 0.7.5 → 0.8.0",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-22T18:30:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cffff04c7ec3fcf91cd8e21eeebd1a9f90db6fdc",
          "body": "能力 · 工作台 · 资源▾(专家库/创意库/提示词优化) · 帮助▾(文档/教程/更新日志/配套学习) · 赞助商。\n赞助商保持不动;桌面悬浮下拉、移动端分组展开;aiolaola 外链归入「帮助」组",
          "is_bot": false,
          "headline": "refactor(nav): 导航分组,10 项收成 5 顶层",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-22T18:28:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5aa9aca64283fd08d7c54c70cb12e454a6f2359a",
          "body": "- robots.txt(指向 sitemap) + sitemap.xml(首页/专家/创意库/文档等公开页)\n- useSeo 轻量 hook:每页独立 title/description/og(创意库针对 nano banana 提示词)\n- 注:仅对会跑 JS 的引擎(Google)有效;百度等需预渲染/SSG(下一步)",
          "is_bot": false,
          "headline": "feat(seo): 加 robots.txt + sitemap.xml + per-page meta(创意库)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-22T18:01:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "184f1426ad38a54d05ac197bf706df067b303e18",
          "body": "- 导航加「学习」项,跳转配套学习平台 aiolaola.com(新标签页)\n- 创意库页加「找视频提示词?」CTA,跳转 prompts.aiolaola.com(图像在站内,视频外链)\n- SiteNavbar 支持 external 链接(桌面+移动端)",
          "is_bot": false,
          "headline": "feat(nav): 加「学习」外链(aiolaola.com)+ 创意库视频提示词入口(prompts.aiolaola.com)",
          "author_name": "AI不止语",
          "author_login": "jnMetaCode",
          "committed_at": "2026-06-22T17:16:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 16,
      "commits_last_year": 390,
      "latest_release_at": "2026-07-20T07:45:59Z",
      "latest_release_tag": "desktop-v0.4.1",
      "releases_from_tags": false,
      "days_since_last_push": 3,
      "active_weeks_last_year": 15,
      "days_since_latest_release": 6,
      "mean_days_between_releases": 3.7
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 71,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "agency-orchestrator",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [
            "multi-agent",
            "ai-agents",
            "agent-orchestration",
            "orchestrator",
            "workflow",
            "yaml-workflow",
            "dag",
            "llm",
            "claude",
            "openai",
            "deepseek",
            "ollama",
            "crewai-alternative",
            "langgraph-alternative",
            "autogen-alternative",
            "no-code",
            "no-api-key",
            "subscription-based",
            "copilot-cli",
            "codex-cli",
            "ai-roles",
            "chinese-ai",
            "copilot",
            "cursor",
            "windsurf",
            "aider",
            "kiro",
            "trae",
            "gemini-cli",
            "codex",
            "qwen",
            "openclaw",
            "opencode",
            "claude-code",
            "deerflow",
            "antigravity",
            "mcp",
            "one-person-company"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/agency-orchestrator",
          "is_deprecated": false,
          "latest_version": "0.12.1",
          "repository_url": "https://github.com/jnMetaCode/agency-orchestrator",
          "versions_count": 41,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2608,
          "first_published_at": "2026-03-21T18:32:55.089000Z",
          "latest_published_at": "2026-07-20T07:50:19.705000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        }
      ]
    },
    "popularity": {
      "forks": 259,
      "stars": 1897,
      "watchers": 8,
      "fork_history": {
        "days": [
          {
            "date": "2026-03-22",
            "count": 1
          },
          {
            "date": "2026-03-23",
            "count": 3
          },
          {
            "date": "2026-03-25",
            "count": 1
          },
          {
            "date": "2026-03-26",
            "count": 1
          },
          {
            "date": "2026-03-27",
            "count": 1
          },
          {
            "date": "2026-03-28",
            "count": 1
          },
          {
            "date": "2026-03-29",
            "count": 3
          },
          {
            "date": "2026-03-30",
            "count": 2
          },
          {
            "date": "2026-03-31",
            "count": 1
          },
          {
            "date": "2026-04-01",
            "count": 1
          },
          {
            "date": "2026-04-02",
            "count": 1
          },
          {
            "date": "2026-04-03",
            "count": 1
          },
          {
            "date": "2026-04-04",
            "count": 2
          },
          {
            "date": "2026-04-05",
            "count": 1
          },
          {
            "date": "2026-04-07",
            "count": 5
          },
          {
            "date": "2026-04-08",
            "count": 3
          },
          {
            "date": "2026-04-09",
            "count": 3
          },
          {
            "date": "2026-04-10",
            "count": 6
          },
          {
            "date": "2026-04-12",
            "count": 1
          },
          {
            "date": "2026-04-13",
            "count": 2
          },
          {
            "date": "2026-04-14",
            "count": 4
          },
          {
            "date": "2026-04-15",
            "count": 3
          },
          {
            "date": "2026-04-16",
            "count": 2
          },
          {
            "date": "2026-04-17",
            "count": 4
          },
          {
            "date": "2026-04-18",
            "count": 2
          },
          {
            "date": "2026-04-19",
            "count": 4
          },
          {
            "date": "2026-04-20",
            "count": 4
          },
          {
            "date": "2026-04-21",
            "count": 4
          },
          {
            "date": "2026-04-22",
            "count": 4
          },
          {
            "date": "2026-04-23",
            "count": 7
          },
          {
            "date": "2026-04-24",
            "count": 7
          },
          {
            "date": "2026-04-25",
            "count": 2
          },
          {
            "date": "2026-04-26",
            "count": 3
          },
          {
            "date": "2026-04-27",
            "count": 6
          },
          {
            "date": "2026-04-28",
            "count": 1
          },
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-05-01",
            "count": 5
          },
          {
            "date": "2026-05-02",
            "count": 3
          },
          {
            "date": "2026-05-03",
            "count": 3
          },
          {
            "date": "2026-05-04",
            "count": 2
          },
          {
            "date": "2026-05-05",
            "count": 3
          },
          {
            "date": "2026-05-06",
            "count": 3
          },
          {
            "date": "2026-05-07",
            "count": 2
          },
          {
            "date": "2026-05-08",
            "count": 2
          },
          {
            "date": "2026-05-09",
            "count": 6
          },
          {
            "date": "2026-05-11",
            "count": 3
          },
          {
            "date": "2026-05-12",
            "count": 2
          },
          {
            "date": "2026-05-14",
            "count": 1
          },
          {
            "date": "2026-05-15",
            "count": 4
          },
          {
            "date": "2026-05-16",
            "count": 1
          },
          {
            "date": "2026-05-17",
            "count": 2
          },
          {
            "date": "2026-05-18",
            "count": 4
          },
          {
            "date": "2026-05-19",
            "count": 1
          },
          {
            "date": "2026-05-20",
            "count": 3
          },
          {
            "date": "2026-05-21",
            "count": 3
          },
          {
            "date": "2026-05-22",
            "count": 1
          },
          {
            "date": "2026-05-23",
            "count": 4
          },
          {
            "date": "2026-05-25",
            "count": 2
          },
          {
            "date": "2026-05-27",
            "count": 4
          },
          {
            "date": "2026-05-28",
            "count": 2
          },
          {
            "date": "2026-05-29",
            "count": 2
          },
          {
            "date": "2026-06-01",
            "count": 2
          },
          {
            "date": "2026-06-02",
            "count": 2
          },
          {
            "date": "2026-06-03",
            "count": 5
          },
          {
            "date": "2026-06-04",
            "count": 4
          },
          {
            "date": "2026-06-05",
            "count": 1
          },
          {
            "date": "2026-06-06",
            "count": 3
          },
          {
            "date": "2026-06-07",
            "count": 1
          },
          {
            "date": "2026-06-08",
            "count": 1
          },
          {
            "date": "2026-06-09",
            "count": 3
          },
          {
            "date": "2026-06-12",
            "count": 3
          },
          {
            "date": "2026-06-15",
            "count": 2
          },
          {
            "date": "2026-06-16",
            "count": 2
          },
          {
            "date": "2026-06-17",
            "count": 1
          },
          {
            "date": "2026-06-19",
            "count": 1
          },
          {
            "date": "2026-06-20",
            "count": 3
          },
          {
            "date": "2026-06-21",
            "count": 2
          },
          {
            "date": "2026-06-23",
            "count": 1
          },
          {
            "date": "2026-06-24",
            "count": 2
          },
          {
            "date": "2026-06-25",
            "count": 2
          },
          {
            "date": "2026-06-26",
            "count": 3
          },
          {
            "date": "2026-06-27",
            "count": 1
          },
          {
            "date": "2026-06-29",
            "count": 2
          },
          {
            "date": "2026-06-30",
            "count": 2
          },
          {
            "date": "2026-07-01",
            "count": 3
          },
          {
            "date": "2026-07-02",
            "count": 1
          },
          {
            "date": "2026-07-03",
            "count": 1
          },
          {
            "date": "2026-07-04",
            "count": 3
          },
          {
            "date": "2026-07-05",
            "count": 5
          },
          {
            "date": "2026-07-06",
            "count": 1
          },
          {
            "date": "2026-07-07",
            "count": 1
          },
          {
            "date": "2026-07-08",
            "count": 1
          },
          {
            "date": "2026-07-09",
            "count": 2
          },
          {
            "date": "2026-07-10",
            "count": 1
          },
          {
            "date": "2026-07-14",
            "count": 1
          },
          {
            "date": "2026-07-15",
            "count": 3
          },
          {
            "date": "2026-07-16",
            "count": 1
          },
          {
            "date": "2026-07-17",
            "count": 1
          },
          {
            "date": "2026-07-18",
            "count": 5
          },
          {
            "date": "2026-07-19",
            "count": 4
          },
          {
            "date": "2026-07-21",
            "count": 3
          },
          {
            "date": "2026-07-22",
            "count": 4
          },
          {
            "date": "2026-07-24",
            "count": 2
          },
          {
            "date": "2026-07-25",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 259,
        "total_forks": 259
      },
      "star_history": null,
      "open_issues_and_prs": 13
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tsconfig.json",
        "website/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 105808,
      "source_files_sampled": 190,
      "oversized_source_files": 3,
      "agent_instruction_files": [
        "CLAUDE.md",
        "integrations/antigravity/AGENTS.md",
        "integrations/gemini-cli/GEMINI.md",
        "integrations/windsurf/.windsurfrules"
      ],
      "agent_instruction_max_bytes": 6953
    },
    "dependencies": {
      "manifests": [
        "desktop/package.json",
        "package.json",
        "website/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "xlsx",
            "direct": true,
            "version": "0.18.5",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.8,
            "advisory_ids": [
              "GHSA-4r6h-8v6p-xvw6",
              "GHSA-5pgg-2g8v-p4x9"
            ],
            "fixed_version": null,
            "advisory_count": 2,
            "oldest_advisory_days": 1188
          },
          {
            "name": "@hono/node-server",
            "direct": false,
            "version": "1.19.15",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.9,
            "advisory_ids": [
              "GHSA-frvp-7c67-39w9"
            ],
            "fixed_version": "2.0.5",
            "advisory_count": 1,
            "oldest_advisory_days": 4
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 1,
          "moderate": 1
        },
        "advisory_count": 3,
        "affected_count": 2,
        "assessed_count": 181,
        "malicious_count": 0,
        "assessed_package": "npm:agency-orchestrator@0.12.1",
        "unassessed_count": 0,
        "direct_affected_count": 1
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@anthropic-ai/sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.52.0"
        },
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.28.0"
        },
        {
          "name": "agency-agents-zh",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.7"
        },
        {
          "name": "html-to-docx",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.8.0"
        },
        {
          "name": "js-yaml",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.1.0"
        },
        {
          "name": "marked",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^18.0.5"
        },
        {
          "name": "smol-toml",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.7.0"
        },
        {
          "name": "superpowers-zh",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.5.0"
        },
        {
          "name": "xlsx",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.18.5"
        },
        {
          "name": "@dagrejs/dagre",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.0"
        },
        {
          "name": "@radix-ui/react-accordion",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.2"
        },
        {
          "name": "@radix-ui/react-slot",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.1.1"
        },
        {
          "name": "@xyflow/react",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.11.0"
        },
        {
          "name": "class-variance-authority",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.7.1"
        },
        {
          "name": "clsx",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.1"
        },
        {
          "name": "framer-motion",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.15.0"
        },
        {
          "name": "lucide-react",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.469.0"
        },
        {
          "name": "react",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^18.3.1"
        },
        {
          "name": "react-dom",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^18.3.1"
        },
        {
          "name": "react-markdown",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.1.0"
        },
        {
          "name": "react-router-dom",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.28.0"
        },
        {
          "name": "recharts",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.15.4"
        },
        {
          "name": "remark-gfm",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.1"
        },
        {
          "name": "tailwind-merge",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.6.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 1,
        "merged_prs": 54,
        "open_issues": 12,
        "closed_ratio": 0.7,
        "closed_issues": 28,
        "closed_unmerged_prs": 2
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "jnMetaCode",
          "commits": 389,
          "avatar_url": "https://avatars.githubusercontent.com/u/12096460?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release-desktop.yml",
        "release-docker.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 25 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 3,
            "reason": "dependency not pinned by hash detected -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "77 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "e09bdb757c6289f48f3b004bba9954ecf5c34fbc",
        "ran_at": "2026-07-26T09:16:04Z",
        "aggregate_score": 3.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-23T07:21:12Z",
      "oldest_open_prs": [
        {
          "number": 98,
          "created_at": "2026-07-19T13:09:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-06-23T20:42:12Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": [
        {
          "number": 44,
          "created_at": "2026-06-17T17:25:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 66,
          "created_at": "2026-06-19T12:41:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 83,
          "created_at": "2026-06-23T05:15:08Z",
          "last_comment_at": "2026-07-20T07:53:38Z",
          "last_comment_author": "jnMetaCode"
        },
        {
          "number": 86,
          "created_at": "2026-06-24T07:23:11Z",
          "last_comment_at": "2026-07-17T12:08:12Z",
          "last_comment_author": "jnMetaCode"
        },
        {
          "number": 88,
          "created_at": "2026-06-26T02:04:33Z",
          "last_comment_at": "2026-07-17T12:05:51Z",
          "last_comment_author": "jnMetaCode"
        },
        {
          "number": 90,
          "created_at": "2026-06-30T14:46:09Z",
          "last_comment_at": "2026-07-20T07:54:06Z",
          "last_comment_author": "jnMetaCode"
        },
        {
          "number": 91,
          "created_at": "2026-07-09T03:44:51Z",
          "last_comment_at": "2026-07-17T11:46:46Z",
          "last_comment_author": "jnMetaCode"
        },
        {
          "number": 92,
          "created_at": "2026-07-09T03:51:20Z",
          "last_comment_at": "2026-07-17T11:46:22Z",
          "last_comment_author": "jnMetaCode"
        },
        {
          "number": 93,
          "created_at": "2026-07-13T08:00:02Z",
          "last_comment_at": "2026-07-20T07:54:02Z",
          "last_comment_author": "jnMetaCode"
        },
        {
          "number": 94,
          "created_at": "2026-07-14T08:26:31Z",
          "last_comment_at": "2026-07-17T12:05:45Z",
          "last_comment_author": "jnMetaCode"
        },
        {
          "number": 96,
          "created_at": "2026-07-15T02:56:34Z",
          "last_comment_at": "2026-07-20T07:53:57Z",
          "last_comment_author": "jnMetaCode"
        },
        {
          "number": 97,
          "created_at": "2026-07-18T16:59:28Z",
          "last_comment_at": "2026-07-20T07:54:37Z",
          "last_comment_author": "jnMetaCode"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/jnMetaCode/agency-orchestrator",
    "host": "github.com",
    "name": "agency-orchestrator",
    "owner": "jnMetaCode"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 66,
      "inputs": {
        "security": 39,
        "vitality": 80,
        "community": 72,
        "governance": 59,
        "engineering": 76
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 80,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "commits_last_year": 390,
              "human_commit_share": 1,
              "days_since_last_push": 3,
              "active_weeks_last_year": 15
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 3 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "15/52 weeks with commits",
                "points": 10.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 15
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "390 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 390
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 25 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 16,
              "latest_release_tag": "desktop-v0.4.1",
              "releases_from_tags": false,
              "days_since_latest_release": 6,
              "mean_days_between_releases": 3.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "16 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 16
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 72,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "good",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "forks": 259,
              "stars": 1897,
              "watchers": 8,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1,897 stars",
                "points": 53.2,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1897
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "259 forks",
                "points": 20.1,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 259
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "8 watchers",
                "points": 4.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 57,
            "inputs": {
              "packages": [
                "agency-orchestrator"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 2608
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,608 downloads/month across npm",
                "points": 45.6,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2608,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 59,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "merged_prs": 54,
              "open_issues": 12,
              "closed_issues": 28,
              "issue_closed_ratio": 0.7,
              "closed_unmerged_prs": 2
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "70% of issues closed",
                "points": 32.7,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 70
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "54/56 decided PRs merged",
                "points": 36.9,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 54,
                      "decided": 56
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 69,
            "inputs": {
              "followers": 689,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "jnMetaCode",
              "public_repos": 121,
              "account_age_days": 4111
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "689 followers of jnMetaCode",
                "points": 20.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 689,
                      "login": "jnMetaCode"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "121 public repos, account ~11 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 121
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 11
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "agency-orchestrator"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 6
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 6 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "41 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 41
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 76,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "4 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "ai-agents",
                "claude",
                "crewai-alternative",
                "deepseek",
                "multi-agent",
                "ollama",
                "orchestrator",
                "workflow",
                "openai",
                "codex",
                "copilot",
                "cursor",
                "gemini-cli",
                "mcp-server",
                "agent-orchestration",
                "autogen-alternative",
                "langgraph-alternative",
                "no-api-key",
                "yaml-workflow",
                "agency-agents"
              ],
              "has_wiki": true,
              "homepage": "https://ao.aiolaola.com",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://ao.aiolaola.com",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "20 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 39,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 34,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.4
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 25 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "77 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "moderate",
            "name": "Dependency advisories",
            "note": "Matched the npm:agency-orchestrator@0.12.1 runtime dependency closure — what installing the published package pulls in — 181 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:agency-orchestrator@0.12.1",
                  "assessed": 181
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "source": "osv",
              "advisories": 3,
              "affected_packages": 2,
              "assessed_packages": 181,
              "unassessed_packages": 0,
              "affected_by_severity": "high 1, moderate 1",
              "direct_affected_packages": 1
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "1 affected: xlsx 0.18.5 (high 7.8)",
                "points": 13.2,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "xlsx 0.18.5 (high 7.8)"
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "1 affected: @hono/node-server 1.19.15 (moderate 5.9)",
                "points": 13.2,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "@hono/node-server 1.19.15 (moderate 5.9)"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "1 advisory-carrying package(s) unaddressed past 90 days; oldest published 1188 days ago",
                "points": 33.5,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 1,
                      "oldest": 1188
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 181,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 68,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.99,
              "agent_instruction_files": [
                "CLAUDE.md",
                "integrations/antigravity/AGENTS.md",
                "integrations/gemini-cli/GEMINI.md",
                "integrations/windsurf/.windsurfrules"
              ],
              "agent_instruction_max_bytes": 6953
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md, integrations/antigravity/AGENTS.md, integrations/gemini-cli/GEMINI.md, integrations/windsurf/.windsurfrules",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md, integrations/antigravity/AGENTS.md, integrations/gemini-cli/GEMINI.md, integrations/windsurf/.windsurfrules"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "99 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 99,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 46,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "tsconfig.json",
                "website/tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json, website/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tsconfig.json, website/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 105808,
              "source_files_sampled": 190,
              "oversized_source_files": 3
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "3/190 source files over 60KB",
                "points": 54.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 190,
                      "oversized": 3
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "moderate",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T09:16:13.797771Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/j/jnMetaCode/agency-orchestrator.svg",
  "full_name": "jnMetaCode/agency-orchestrator",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

Оцінки — це сигнали, а не гарантії. Вони відображають публічно видимі практики на GitHub — це не аудит коду й не гарантія безпеки.

Відсутні дані виключаються, а ваги перенормовуються — нуль за відсутність ніколи не ставиться. Методологія версіонована й відкрита: метрики v1.13.0, схема v0.27.0 — повна методологія · вікі метрик.

Як окремий результат виглядає на тлі всього реєстру: сукупна статистикаnpm.