Public record
Software health reportschema 0.27.0 · metrics 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 stars⑂ 259 forkssince Mar 2026View on GitHub ↗

jnMetaCode/agency-orchestrator holds a health index of 66 out of 100, placing it in the Moderate band. It scores highest on Vitality (80/100) and lowest on Security (39/100). It was last updated 3 days ago. A single contributor accounts for most of its recent work.

66
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

66
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

AI不止语Personal account
689 followers121 public repossince Apr 2015 jnMetaCode@qq.com

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Package ecosystems

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

80Good · 22% of overall
How it's scored
36/36Push recency — last push 3 days ago
10.4/36Commit cadence — 15/52 weeks with commits
18/18Commit volume — 390 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 25 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year390
human_commit_share1
days_since_last_push3
active_weeks_last_year15
How it's scored
27/27Ships releases — 16 releases published
36/36Release recency — latest release 6 days ago
27/27Release cadence — a release every ~3.7 days
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count16
latest_release_tagdesktop-v0.4.1
releases_from_tagsno
days_since_latest_release6
mean_days_between_releases3.7

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

72Good · 18% of overall
How it's scored
53.2/60Stars — 1,897 stars
20.1/25Forks — 259 forks
4.7/15Watchers — 8 watchers
Inputs used
forks259
stars1,897
watchers8
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (Apache-2.0)
18/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
6.3/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductno
has_pull_request_templateyes
How it's scored
45.6/80Monthly downloads — 2,608 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packagesagency-orchestrator
dependents
ecosystemsnpm
total_downloads
monthly_downloads2,608
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

59Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0/22.5Commit distribution — top contributor authored 100% of commits
1.4/13.5Contributor breadth — 1 contributors
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Inputs used
bus_factor1
contributors_sampled1
top_contributor_share1
How it's scored
32.7/46.8Issue resolution — 70% of issues closed
36.9/38.3PR acceptance — 54/56 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs54
open_issues12
closed_issues28
issue_closed_ratio0.7
closed_unmerged_prs2
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
20.4/25Owner reach — 689 followers of jnMetaCode
25/25Track record — 121 public repos, account ~11 yr old
Inputs used
followers689
owner_typeUser
is_verified
owner_loginjnMetaCode
public_repos121
account_age_days4,111
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 1 package(s) on npm
35/35Publish recency — latest publish 6 days ago
20/20Version history — 41 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesagency-orchestrator
ecosystemsnpm
any_deprecatedno
min_days_since_publish6

Engineering Quality

Are baseline engineering and documentation practices in place?

76Good · 20% of overall
How it's scored
24/24CI workflows — 4 workflow(s)
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — no data
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.

Documentation

100Excellent
How it's scored
30/30README
25/25Documentation directory
15/15Documentation / homepage site — https://ao.aiolaola.com
10/10Repository description
10/10Topics — 20 topics
10/10Wiki
Inputs used
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_wikiyes
homepagehttps://ao.aiolaola.com
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

39At risk · 16% of overall
How it's scored
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 — no data
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.5License — 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
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3.4
Excluded from scoring (no data or not applicable): ci_tests. Remaining weights renormalized.
How it's scored
13.2/35Direct dependencies free of known advisories — 1 affected: xlsx 0.18.5 (high 7.8)
13.2/25Indirect dependencies free of known advisories — 1 affected: @hono/node-server 1.19.15 (moderate 5.9)
33.5/40No advisories left outstanding — 1 advisory-carrying package(s) unaddressed past 90 days; oldest published 1,188 days ago
Inputs used
sourceosv
advisories3
affected_packages2
assessed_packages181
unassessed_packages0
affected_by_severityhigh 1, moderate 1
direct_affected_packages1
Matched the npm:agency-orchestrator@0.12.1 runtime dependency closure — what installing the published package pulls in — 181 packages. Reachability is not analyzed.

AI Readiness

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.

68Moderate · 0% of overall
How it's scored
45/45Agent instructions — CLAUDE.md, integrations/antigravity/AGENTS.md, integrations/gemini-cli/GEMINI.md, integrations/windsurf/.windsurfrules
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 99 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
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
How it's scored
0/18One-command bootstrap
22/22Automated tests
0/11Lint / format config
11/11Static type checking — tsconfig.json, website/tsconfig.json
10/10Reproducible environment — Dockerfile, lockfile
0/10Demonstrated agent practice — no agent-authored commits among the last 100
0/8Automated maintenance — no automated dependency updates observed
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Inputs used
has_nixno
has_testsyes
lockfilespackage-lock.json
has_dockerfileyes
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configstsconfig.json, website/tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
How it's scored
45/45Type-checkable code — TypeScript (statically typed)
54.1/55Manageable file sizes — 3/190 source files over 60KB
Inputs used
primary_languageTypeScript
largest_source_bytes105,808
source_files_sampled190
oversized_source_files3
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
20/20MCP server
40/40Runnable examples — examples
Inputs used
example_dirsexamples
has_mcp_signalyes
api_schema_files

Key facts

1,897GitHub stars
1contributors
390commits, last 12 months
3days since last push
16releases
1bus factor
12open issues
npmpackage ecosystems

Data collection 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

More detail

Star and fork history 0 ★ / 259 ⇿
0Stars
259Forks
16Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

05010015020025030025972026-032026-052026-07
Major 0Minor 2Patch 6
OpenSSF Scorecard 3.4 / 10
3.4aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).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
n/aCI-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
Direct dependencies 24
RegistryPackageVersion constraintManifest
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
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Dependency advisories 2

Installing npm:agency-orchestrator@0.12.1 pulls in 181 packages, direct and transitive: 2 carry known advisories, of which 1 are direct dependencies.

PackageVersionRelationSeverityAdvisoriesFixed in
xlsx0.18.5directhigh2
@hono/node-server1.19.15indirectmoderate12.0.5

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "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"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsnpm.