JSON-Rohbericht maschinenlesbar
{
"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"
}