原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 8716,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 2917618,
"CSS": 4257,
"HTML": 54913,
"Shell": 13554,
"Python": 291047,
"JavaScript": 25900,
"TypeScript": 5054,
"Go Template": 23413
},
"pushed_at": "2026-07-20T16:40:34Z",
"created_at": "2026-07-19T14:57:55Z",
"owner_type": "User",
"updated_at": "2026-07-20T16:41:21Z",
"description": "Terminal AI coding assistant — mocode-agent",
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "main",
"license_spdx_raw": null,
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": null,
"name": "nextsko",
"type": "User",
"login": "nextsko",
"company": null,
"location": null,
"followers": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/231282484?v=4",
"created_at": "2025-09-09T15:52:40Z",
"is_verified": null,
"public_repos": 8,
"account_age_days": 320
},
"license": {
"state": "absent",
"spdx_id": null,
"raw_spdx": null,
"file_present": false,
"scorecard_found": false,
"profile_has_license": false
},
"activity": {
"releases": [
{
"tag": "v0.7.8",
"kind": "patch",
"published_at": "2026-07-20T13:47:07Z"
},
{
"tag": "v0.7.7",
"kind": "patch",
"published_at": "2026-07-19T16:56:38Z"
},
{
"tag": "v0.7.6",
"kind": "patch",
"published_at": "2026-07-19T16:37:20Z"
},
{
"tag": "v0.7.5",
"kind": "patch",
"published_at": "2026-07-19T16:25:50Z"
},
{
"tag": "v0.7.4",
"kind": "patch",
"published_at": "2026-07-19T16:14:00Z"
},
{
"tag": "v0.7.3",
"kind": "patch",
"published_at": "2026-07-19T15:58:26Z"
},
{
"tag": "v0.7.2",
"kind": "patch",
"published_at": "2026-07-19T15:57:13Z"
}
],
"recent_commits": [
{
"oid": "0e0b447f601354569fc65ce007d01ca740e486bf",
"body": "详细描述:\n- 删除 kngs 知识管理系统(store/watcher/init)\n- 删除 memory 记忆系统(service/tools/search)\n- 清理 agent、app、tools 层相关依赖\n- 新增 docs/architecture/templates 目录",
"is_bot": false,
"headline": "♻️ refactor(core): 移除 knowledge 知识库模块",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-20T16:39:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e32b171a944afdd3a27498a2e9774a61472652fe",
"body": "详细描述:\n- 删除 evaluation 评估模块(criterion/evalset/llmjudge)\n- 删除 hooks 钩子运行机制模块\n- 清理 coordinator、UI 层相关依赖",
"is_bot": false,
"headline": "♻️ refactor(core): 移除 hooks/evaluation 死代码",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-20T16:09:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c6bd0513cd9f478e115820b5fb697b474c71977a",
"body": "详细描述:\n- 删除 candidate 候选选择器模块(llmselector、evalselector)\n- 删除 extension 生命周期钩子管理模块\n- 删除 roundtable 圆桌多 Agent 协作模块\n- 清理 coordinator、config、workspace 相关依赖",
"is_bot": false,
"headline": "♻️ refactor(agent): 移除 roundtable 圆桌机制及相关代码",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-20T15:19:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f490d63d74f0654bf5563e77c5a857a0cd9448f",
"body": "- docs/plans/dead-chain-removal.md: 完整 active link 边界分析\n + 9 类子系统 dead/active 状态表 + Phase A/B/C 执行清单\n- docs/plans/self-evolution/03-current-status-and-integration-plan.md:\n evolution 子系统当前 wiring 状态 + 5 阶段集成计划",
"is_bot": false,
"headline": "📝 docs(plans): 归档 dead-chain 决策 + self-evolution 集成计划",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-20T14:26:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c13f38773b1fe73066dd599a7fbcd4a72bcc6924",
"body": "删除两个 0 引用的 dead chain (-2738 行):\n- internal/core/evolution/ (14 文件): reviewer/dreamer/cron/distillation\n 子系统代码完整但 coordinator 未接线, 永不执行\n- internal/domain/types/ (3 文件): 空 types 包, 无任何导入\n\n配套修复 7 个 test/源文件跟随调整:\n- sessionlog_test.go, tools/registry_*_test.go,\n tools/{result,runtime,transfer}.go + _test.go\n\n验证:\n- go build -buildvcs=false ./... -> PASS\n- 详见 docs/plans/dead-chain-removal.md 风险矩阵",
"is_bot": false,
"headline": "🧹 refactor(deps): 移除 dead chain — evolution + domain/types",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-20T14:26:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c05d94a9da091f9be5b9916d633a48deb66ec21e",
"body": "- 触发原因: /summary slash 命令异步化 (M0-M5 全部合并)\n- 主变更: 避免 TUI 同步阻塞; pubsub 链路完成\n- 改动统计: 8 文件 +185/-23 (按 3 commit 切分)",
"is_bot": false,
"headline": "🔧 chore: 升级版本到 0.7.8-fromsko",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-20T13:36:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3d4f5d53326ac2bc77aae7a3c1eb418ac93a3d76",
"body": "- 状态表 M0-M5 全部改为 ✅ 已合并\n- 追加变更日志: 文件级 diff 统计 + 决策偏差 + 验证结果 + 端到端步骤 + 未覆盖项\n- 记录 B1 busy 守卫保留 / SummarizeWithPath 命名 / 单测补全留给后续 PR",
"is_bot": false,
"headline": "📝 docs(plans): 标记 /summary 异步化方案为已落地",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-20T13:28:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6c81e9ce81bcfc4731b73e0e1b30195ab92bb7b",
"body": "- ui_dialogs.ActionSummarize: 调用 AgentEnqueueSummary 而非 AgentSummarize,\n 立即返回 \"Summarizing session…\" InfoMsg\n- 移除 filepath.Glob 写盘后扫描 (改由 SummaryCompletedMsg.Path 直接带路径)\n- ui.Update 加 agent.SummaryCompletedMsg case:\n - 成功 -> InfoMsg \"Session summary saved: <path>\"\n - 失败 -> ReportError \"Failed to summarize: …\"\n - 空路径 -> InfoMsg \"Session summarized\"\n- 保留 isAgentBusy() 守卫 (B1 选项: 防 UI spam)",
"is_bot": false,
"headline": "🎨 refactor(ui): 切换 /summary slash 走异步 + UI 接收 SummaryCompletedMsg",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-20T13:27:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0e9e0d2850a5b7dcc7c4521210e932714fcab731",
"body": "- 加 SummaryCompletedMsg 类型 + summaryDone broker (coordinator)\n- 加 SummarizeWithPath 返回导出路径, 作为 M2 出参基础\n- 加 EnqueueSummaryAndDrain: 入队后立即 drain (不等 Run defer)\n- 加 SummarySubscribe 暴露给 app.events 转发\n- session_summary_queue: drain 时 publish SummaryCompletedMsg\n- workspace 接口 + app_workspace: 实现 AgentEnqueueSummary\n- app.InitCoderAgent 末尾挂 summary 订阅到 app.events",
"is_bot": false,
"headline": "♻️ refactor: 暴露 /summary 异步化底层链路",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-20T13:27:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aff5b359944a652a2086c53869126813608fd1af",
"body": "…entation notes\n\nThree documents covering the design journey of mocode's self-evolution\nsubsystem:\n\n- 00-upstream-survey.md — Deep code-level analysis of four upstream agent\n projects' self-evolution mechanisms:\n * MiMo-Code (TypeScript, OpenCode fork): /dream + /distill + Checkpoint\n writer + \n[…]\nthout embedder, fail-open semantics, snapshot metrics placeholder),\n 9 known limitations (L1-L9) with v2 fix directions, delta vs upstream\n systems, v2/v3 roadmap, and the Evaluator prune rationale.",
"is_bot": false,
"headline": "📝 docs(plans/self-evolution): upstream survey + architecture + implem…",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-19T22:58:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0977acf960424881e4977407b01358df7d2674db",
"body": "… framework\n\nIntroduce the self-evolution subsystem so the agent becomes more useful over time:\n\n- Reviewer: every N turns, a detached background agent extracts durable user\n preferences / project rules / verified facts into memory (hermes-agent\n background_review pattern).\n- Dreamer: when the ses\n[…]\n Background review agent\n dreamer/ Idle consolidation agent\n evolutioncron/ SuggestionEngine + guardrails + cron runner\n system.go Top-level System handle (AfterTurn / TickIdle / StartCron)",
"is_bot": false,
"headline": "✨ feat(evolution): self-evolution system v1 + prune Evaluator offline…",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-19T22:58:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "125319f82b963649a5ac841fa7f0e9a3e05848bf",
"body": "详细描述:\n- docs/plans/summary-async/01-sync-blocking-root-cause.md(183 行):\n /summary slash 同步阻塞 TUI 的根因分析:tea.Cmd 直包 RPC 调用 Update 循环冻结,\n 澄清 drainQueuedSummaries 触发时机。\n- docs/plans/summary-async/02-async-fix-options.md(228 行):\n 三方案对比:就地异步 / 复用 summaryQueue(选定)+ 主动 drain / 假进度;含\n busy 守卫语义差异(B1/B2/B\n[…]\n手动测试矩阵;含 V1–V4 端到端验证步骤。\n- docs/README.md:新增「参考研究(外部项目深度分析)」分类索引表,覆盖\n search-tools × 5、agentic-fetch × 3、summary-async × 5 共 13 个新文档。\n- 5 篇 summary-async 合计 1038 行 + README 索引 18 行新增。\n- 仅新增文档,未触及任何源码。",
"is_bot": false,
"headline": "📝 docs(plans): 增加 summary-async 异步化方案 5 篇 + docs/README 索引",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-19T22:06:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b0a13df3fc66f60055c557b427b8213e8f63c7fd",
"body": "详细描述:\n- docs/plans/agentic-fetch/01-context-canceled-failure.md(149 行):\n agentic_fetch 端点不可用时反复报「context canceled」的失败链路追踪:从子 Agent\n 继承父 context → SDK RequestTimeout → 硬失败路径全貌。\n- docs/plans/agentic-fetch/02-fallback-strategy.md(144 行):\n 四层降级策略设计:L1 缓存 → L2 主链 Provider → L3 静态快照 / DuckDuckGo 直退\n 路\n[…]\n策)。\n- docs/plans/agentic-fetch/03-context-isolation-plan.md(172 行):\n 子 Agent context 隔离改造方案:独立 deadline、软取消 vs 硬取消分类、SDK 切换、\n 接口兼容性矩阵。\n- 3 篇合计 465 行,作为 agentic_fetch 工具的根因分析 + 修复蓝图。\n- 仅新增文档,未触及任何源码。",
"is_bot": false,
"headline": "📝 docs(plans): 增加 agentic_fetch 失败链路与降级方案 3 篇",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-19T22:06:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c5fb203017eb9a46860b8e433f48bac3ee645d30",
"body": "详细描述:\n- docs/plans/search-tools/01-grep-tool-architecture.md(705 行):\n oh-my-pi grep 工具 TS 层完整架构,含输入处理管道、路径解析、输出格式化。\n- docs/plans/search-tools/02-web-search-provider-chain.md(512 行):\n Web Search 22 Provider 懒加载 Registry + Fallback 链 + Credential 解析。\n- docs/plans/search-tools/03-ast-grep-design.md(4\n[…]\n现要点。\n- docs/plans/search-tools/05-search-testing-observability.md(271 行):\n 搜索工具测试金字塔 + 可观测性指标 + 会话级行为测试策略。\n- 5 篇文档合计 2738 行,记录 oh-my-pi 项目的搜索工具体系作为 mocode 工具系统\n 改进的参考设计,每篇都标注来源文件路径。\n- 仅新增文档,未触及任何源码。",
"is_bot": false,
"headline": "📝 docs(plans): 增加 search-tools 深度研究 5 篇",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-19T22:06:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "063a8d3b87a123e09e54eb3a459e5fb360a80421",
"body": "详细描述:\n- 新增 docs/plans/README.md,作为 plans/ 子目录的组织规范与索引:\n * 按主题分子目录,编号前缀保持顺序\n * 父级 docs/README.md 同步索引\n * 修正 ASCII 目录树前缀(tool-call-arguments/ 改为 ├──,summary-async/ 保留 └──)\n- 新增 docs/plans/tool-call-arguments/01-empty-arguments-bad-request.md,记录\n Step 3.7 Flash 等 provider 在 Yolo 模式多轮工具调用下报\n 「400 B\n[…]\nte vs Stream 路径不对称\n * 4 套修复方案对比:归一化 / 拦截重试 / 上游 PR / 历史 JSONL 迁移\n * 测试矩阵 + 上游 PR diff 草稿 + 验证 checklist + 跟踪元数据\n- 仅新增 2 个文件,并修正 plans/README.md 中一处 ASCII 树前后缀不一致的小问题。\n- 状态标记为「🟡 开放中」,等待后续开发实施修复 A 方案。",
"is_bot": false,
"headline": "📝 docs(plans): 建立 plans/ 子目录索引 + tool-call-arguments 跟踪笔记",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-19T22:06:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7ce9dd7ace0fbb5bdee8e0c4bbc2db2411bc39ee",
"body": "详细描述:\n- docs/guides/04-gfw-workarounds.md 末尾新增「Windows 下批量 Git Clone 踩坑记录」一节,\n 覆盖:\n 1) .git/objects/pack/*.lock 残留目录的清理(含 powershell 强杀进程)\n 2) Git for Windows 不读取 HTTP_PROXY/HTTPS_PROXY,需 git config --global 显式配置\n 3) 目录已存在会阻断后续 clone 的现象与应对\n 4) 实测结论:能直连时优先直连\n 5) 小建议表:批量 / 目录冲突 / 卡死误判 / 清理失败\n- 文中部分示例保留 C:\\Users\\16143 本机路径作为上下文说明,不含任何凭证。\n- 仅修改 docs/guides/04-gfw-workarounds.md,未触及任何源码。",
"is_bot": false,
"headline": "📝 docs(guides): 补充 Windows 下批量 Git Clone 踩坑记录",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-19T22:06:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "974e5e5ee55620e79c39f8dc3e274a16775cabdb",
"body": "详细描述:\n- 新增 docs/architecture/06-playwright-cli-design.md,记录 Playwright CLI 适配层\n 的设计:薄分发层 + Skill 包装器,所有命令委派给 playwright-core 的 CLI client。\n- 主要覆盖 program()、skillCheck.js、bundled SKILL.md 三块关系,以及视频\n 录制、网络拦截、会话管理等核心能力。\n- 仅新增文档,未触及任何源码。",
"is_bot": false,
"headline": "📝 docs(architecture): 增加 Playwright CLI 设计说明",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-19T22:06:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e3ecad992a89a337670fd95e20c3095abfd04685",
"body": "详细描述:\n- 新增 docs/architecture/05-wechat-butler-arch.md,记录 WeChat iLink Bot 平台\n 的完整实现链路(Gateway Runtime → Transport → 协议层 → Agent 执行层)。\n- 文档面向后续接手 WeChat 集成的开发者,包含入口层、传输层、解码/编码层、\n 会话管理、Agent 调用等关键模块与责任划分。\n- 仅新增文件,未触及任何源码。",
"is_bot": false,
"headline": "📝 docs(architecture): 增加 WeChat Butler 架构文档",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-19T22:06:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "09134c7f437b7ef9789231a4a4d0edb9a816f176",
"body": "详细描述:\n- 将 docs/guides/10-mcp-configuration.md 的示例中硬编码的真实 BigModel\n API token 替换为占位符 <YOUR_BIGMODEL_API_TOKEN>;原 token 形如\n {user_id}.{secret},暴露在 audit 中属于高风险事故。\n- 在字段说明中追加安全提示:推荐用 env / 系统环境变量承载 token,\n 提示读者立即到 Z.ai 控制台 rotate 任何曾经在文档中以明文贴出的 key。\n- 仅修改 docs/guides/10-mcp-configuration.md,避免与其它 untracked 文件\n 混提,确保后续可单独 revert。",
"is_bot": false,
"headline": "🐛 fix(docs): redact leaked Z.ai BigModel API key in MCP guide",
"author_name": "nextsko",
"author_login": "nextsko",
"committed_at": "2026-07-19T22:04:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4774518e0b6472d7c249ad27a1a7c27a3f8fea6a",
"body": null,
"is_bot": false,
"headline": "fix(npm): 恢复 platform 包发布 + 保留 NPM_CONFIG_USERCONFIG 修复",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T16:49:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "667d668020b5afdb52669be46459fee5a8d2a048",
"body": null,
"is_bot": false,
"headline": "fix(npm): unset NPM_CONFIG_USERCONFIG 让 .npmrc 写入生效",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T16:30:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6a9b76c9677247b481c51576077d1e99094516ef",
"body": null,
"is_bot": false,
"headline": "fix(npm): 只发布 @fromsko/mocode-cli 主包,不推送 platform 分包",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T16:17:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7cbacd8b190bf874322da295f72333965a887c9e",
"body": null,
"is_bot": false,
"headline": "fix(npm): 完善 publish.sh 中 .npmrc 配置修复 npm publish 404",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T16:06:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d3d30d9aef347eb24b2f0075b6c4445d50374be2",
"body": null,
"is_bot": false,
"headline": "chore(release): bump version to v0.7.3",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T15:50:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f298c77def962ca23a10ab23bb2337e75270a6e6",
"body": null,
"is_bot": false,
"headline": "fix(.goreleaser.yml): 移除 stray </input> 标签修复 YAML 解析",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T15:48:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba224978ea7060cc520e319a8ec6422df41966ff",
"body": null,
"is_bot": false,
"headline": "fix(cmd): 移除损坏的 heartbit 乱码,使 --version 终端全平台兼容",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T15:35:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0e9267e373571c54b5bd94019b75656b1f143b97",
"body": null,
"is_bot": false,
"headline": "fix(release): 修正 .goreleaser.yml 中旧仓库名 mocode-build 引用",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T15:32:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b4c2b44d05ef3f17a16cb2731573da55d5b02250",
"body": null,
"is_bot": false,
"headline": "fix(deps): 修复 openai-go v3 依赖升级后的 RequestOption 类型不匹配问题",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T15:21:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d9d2908c2143ac3e63318e1482780148adecc38a",
"body": "chore(deps): 合并 Go 依赖库升级",
"is_bot": true,
"headline": "chore(deps): bump the all group with 18 updates (#2)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-19T15:15:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "31d50b9fa04846641cc1c1e3b7f627ee33a72e04",
"body": null,
"is_bot": false,
"headline": "chore(release): 升级版本到 v0.7.1,并修正 Taskfile 版本路径",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T15:09:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bb78a3a2b604bd5900abbdf7c6e9616d2538b455",
"body": null,
"is_bot": false,
"headline": "chore(ci): 更新 Taskfile 释放逻辑,支持推送至 agent 远端及 test.yml 校验",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T15:04:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "69bcc54089eb61a8244e8d86cf4309c6a475ff20",
"body": null,
"is_bot": false,
"headline": "chore(ci): 删除冗余的 build.yml 工作流",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T14:59:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba706cab4ab515f504f526b07fbcb8314e4a87e9",
"body": null,
"is_bot": false,
"headline": "🔧 config: 修复 goreleaser 发布目标为 mocode-build",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T14:37:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "36267fdb93c05b46ba7cc248e373a8bab4bbac5b",
"body": null,
"is_bot": false,
"headline": "feat(npm): @fromsko/mocode-cli optional-deps 模式,biome/claude-code 同款结构",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T14:36:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42a480f649f47740791bfdc8de12524f7945a406",
"body": null,
"is_bot": false,
"headline": "feat(ci): 合并 release CI、多平台 goreleaser、@mocode/cli npm 包",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T14:25:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "770e92d0949cf88a718d3b7dbfd012586a24dd12",
"body": null,
"is_bot": false,
"headline": "🔧 config: 修复 goreleaser 发布目标为 nextsko",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T14:19:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ddd7ab3d745e97690adbaf0c5443762513b45b14",
"body": null,
"is_bot": false,
"headline": "♻️ refactor: 工具系统扁平化与配置优化",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T14:10:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f49550f034ce13cb1d42fec9269a16a02456bef9",
"body": "- .github/workflows/test.yml: --config=.golangci.ci.yml → --config=.golangci.yml\n- Taskfile.yaml: LINT_CONFIG 默认值 .golangci.ci.yml → .golangci.yml\n- Taskfile.yaml: lint:strict 改为统一引用 {{.LINT_CONFIG}},超时由 5m 提升到 10m\n- README.md: 修正 task lint 说明,去除'legacy'措辞",
"is_bot": false,
"headline": "🔧 chore(ci): 统一 golangci 配置路径并修正 lint 描述",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T07:01:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "37c7c96c0c630ded35f53540ac1a81143ff8a9a3",
"body": "所有 internal/core/agent/tools/builtin/ 与 plugins/ 下的工具实现已扁平化到根级 tools/ 包。\n\n调用方批量更新(76+ 文件):\n- internal/core/agent/* agent 协调器、agentic_fetch_tool、agent_lifecycle 等\n- internal/core/app/* app 实例化、LSP 事件\n- internal/core/config/* config 与 store 相关\n- internal/core/toolutil/lsputil \n[…]\n → tools\n- internal/core/agent/tools/lsp → tools/lsp\n- internal/core/agent/tools/mcp → tools/mcp\n- internal/core/agent/tools/filter → tools/filter\n\nDataDirectory 字段访问统一替换为 infra.DataDir() 调用。",
"is_bot": false,
"headline": "🗑️ refactor(internal): 删除旧的 internal/core/agent/tools/ 目录",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T07:01:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c9d21b795a0a0f2c2722d0d26409b91ef35bda7f",
"body": "将 internal/core/agent/tools/builtin/ 与 plugins/ 下所有工具实现扁平化到 tools/ 根目录,\n使用 builtin_xxx_xxx.go / plugin_xxx_xxx.go 命名规范区分来源。\n\n子包结构(保留):\n- tools/lsp/ LSP 客户端/管理器/处理器\n- tools/lsp/util/ LSP 工具函数\n- tools/mcp/ MCP 协议支持\n- tools/filter/ 工具过滤器\n- tools/plugi\n[…]\n- tools/plugins/gitopscommon/ Git 操作共享逻辑\n- tools/plugins/giteacommon/ Gitea 共享\n- tools/plugins/sshcommon/ SSH 共享服务\n\n新增工具实现 60+ 个,统一 package tools。\n通过 tools/tools.go 重新导出 netcommon 等子包的关键类型供外部代码使用。",
"is_bot": false,
"headline": "♻️ refactor(tools): 扁平化所有工具实现到 tools/ 根包",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T07:00:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e4bb03d8c04095bd4e36503316ce3792f4e1dd08",
"body": "- tools/registry.go 重写为 plugin struct 内联注册,去除动态注册 loader\n- tools/loader.go 删除(由静态 Build() 函数取代)\n- 删除 tools/builtin/all、tools/plugins/all、tools/plugins/{glob,grep,think,todos,web_fetch,web_search} 旧子包,工具实现将扁平化到 tools/ 根目录\n- 保留 tools/filter/、tools/plugins/{netcommon,searchcommon} 作为支持性子包\n- 框架核心契约(Tool, ToolContext, ToolResult)保留不变",
"is_bot": false,
"headline": "♻️ refactor(tools): 升级根级 tools/ 框架并删除旧 builtin/plugins 子包",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T07:00:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c7ee86e2718a78cb689e8f4bf55de00ca77e17a5",
"body": "- 删除 docs/ 下已迁移到 guides/ 的旧目录(tui-spec/、superpowers/、design/ 原文件、dev-notes/)\n- 删除根级游离文档(ci-fix-log、evaluation-plan、evolution-loop-plan、slash-command-arch、tool-system-comparison),均已归入新分类\n- 删除 pkg/ —— 全仓搜索确认无任何 import,已无实际用途\n- 删除 openspec/、examples/ 空目录\n- 删除根目录遗留文件 .golangci.ci.yml、CONTRIBUTING.md、HOOKS.md、LICENSE.md",
"is_bot": false,
"headline": "🗑️ chore: 删除冗余的旧目录与遗留文档",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T07:00:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be2320f3eb6a222a131bbb78d623a810bd6b2d2e",
"body": "将原 docs/ 下分散的子目录(tui-spec/、superpowers/、design/、dev-notes/)统一合并到三个分类:\n\n- docs/README.md 新建总目录索引\n- docs/architecture/01-04 原有架构文档重新编号\n- docs/design/01-15 合并 tui-spec + superpowers + design 共 15 篇\n- docs/guides/01-09 迁移原 dev-notes/ 全部 9 篇\n\n每个子目录独立从 01 开始编号,便于按主题检索与维护。",
"is_bot": false,
"headline": "📝 docs: 重组 docs/ 目录结构并按子目录独立编号",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-19T07:00:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e203f8fb0d1738f857e5d003ee065d50607eb6c9",
"body": "详细描述:\n- 将 help 相关方法迁移到 ui_help.go\n- 将 paste 相关逻辑迁移到 ui_paste.go\n- 将 agent runtime/topology 相关逻辑迁移到 ui_agent_runtime.go\n- 将 agent cancel/todo continuation/notification 迁移到 ui_agent_control.go\n- 移除 ui.go 中不再使用的 encoding/json、net/http 等依赖导入",
"is_bot": false,
"headline": "♻️ refactor(ui): 拆分 ui.go 大文件为按职责划分的独立模块",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-16T19:20:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1eed6eb6db9a11aa4fc5df1365ec714748833372",
"body": "详细描述:\n- 新增 tool_call_integrity 规则块\n- 要求所有工具调用必须提供完整且符合 schema 的参数\n- 明确禁止空调用、占位调用或缺失必填参数的工具调用\n- 对校验错误建立明确的 remediation 路径",
"is_bot": false,
"headline": "✨ feat(core): 在 coder agent 模板中增加 tool_call 完整性校验",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-16T19:20:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "458900d105c1852b203934bdb204061a3d255aa3",
"body": "详细描述:\n- 更新 docs/tui-spec/README.md 目录,补全 08-10 章节索引和页数统计\n- 新增 08-team-mode-architecture.md 团队模式架构解析\n- 新增 09-hermes-and-claude-code-evolution.md 自进化与动态工作流演进\n- 新增 10-tty-input-and-bg-tasks.md TTY 输入与后台任务追踪\n- 新增 .plans/toolkit-migration 系列计划文档",
"is_bot": false,
"headline": "📝 docs: 扩展 TUI 规范并新增架构文档与 toolkit 计划",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-16T19:20:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "860e07dc7d940bab3a064e2a7023a547dc36fff3",
"body": "- Update Taskfile install task behavior\n- Tune message debounce behavior",
"is_bot": false,
"headline": "🔧 chore: update taskfile and app debounce details",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-16T18:50:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "584a20c629b88f7de25a4b14f4f05b9e3c19c0ef",
"body": "- Tune tool rendering, debounce, and toast behavior\n- Refresh slash/theme constants and dialog handlers\n- Adjust completions and panel view wiring",
"is_bot": false,
"headline": "🔧 chore: update UI components, styles, and model details",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-16T18:50:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1538df845d724832ec1e05011cb0bacc48f3fd10",
"body": "- Add Workspace.ReloadConfig and ReloadMCP\n- Register /reload and /reload-mcp slash commands\n- Add dialog actions and handlers for reload flows",
"is_bot": false,
"headline": "✨ feat: add /reload and /reload-mcp support",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-16T18:50:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fd5dabf2332822ac77bb7de509a0909a707789be",
"body": "- Add rule priority order and failure recovery requirements\n- Reduce duplicated guidance while keeping hard constraints\n- Keep all template variables intact",
"is_bot": false,
"headline": "♻️ refactor: simplify coder system prompt template",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-16T18:50:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f5bec3a1f8d3c8181ef4e7f8da4c8ba3e332d18e",
"body": "- Delete internal/core/agent/evo/* and internal/core/agent/evolution/*\n- Remove internal/transport/cmd/evolve.go\n- Remove injected evolution/error-learner wiring from agent and coordinator",
"is_bot": false,
"headline": "♻️ refactor: remove self-evolution packages and injection paths",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-16T18:50:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4ddd8ff0de0773a6075fa6a8c6c6bfd06b977661",
"body": "- Add coding standards, design techniques, state/layout guidance\n- Add component API and extending/testing references\n- Add HTML-to-TUI prototyping and Claude code patterns",
"is_bot": false,
"headline": "📝 docs: add TUI specification documents",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-07-16T18:50:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a8daae45c58a4f4d54a874086388fa3da57c0af1",
"body": null,
"is_bot": false,
"headline": "append docs/tool-system-comparison.md",
"author_name": "pi-crew agent",
"author_login": null,
"committed_at": "2026-06-30T08:57:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0a585864f9cccd93e2851c41bc8e3131387a2248",
"body": null,
"is_bot": false,
"headline": "✨ feat: 迁移首批插件工具",
"author_name": "pi-crew agent",
"author_login": null,
"committed_at": "2026-06-30T02:22:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e4eeac10fcf332a7f54d26cba75160d4071a7732",
"body": null,
"is_bot": false,
"headline": "✨ feat: 迁移后台任务内置工具",
"author_name": "pi-crew agent",
"author_login": null,
"committed_at": "2026-06-30T02:22:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d29ddc53925df59206589d39472c0a0defd9b774",
"body": null,
"is_bot": false,
"headline": "🐛 fix: 修复工具注册并发竞态",
"author_name": "pi-crew agent",
"author_login": null,
"committed_at": "2026-06-30T02:21:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5eec5bc393e90d44b3f981eff63848a6e2c13cf8",
"body": null,
"is_bot": false,
"headline": "✨ feat: 增加工具运行时依赖上下文",
"author_name": "pi-crew agent",
"author_login": null,
"committed_at": "2026-06-30T02:21:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5100e387c4c38a863d80be0625a0fd26967420b4",
"body": null,
"is_bot": false,
"headline": "feat(agent): add agentToolContext adapter skeleton",
"author_name": "pi-crew agent",
"author_login": null,
"committed_at": "2026-06-29T16:56:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "31f5b9ee7eb3d1f403910eb7f7b4f349d14bae1b",
"body": null,
"is_bot": false,
"headline": "test(tools): cover registry and loader behaviour",
"author_name": "Mocode Agent",
"author_login": null,
"committed_at": "2026-06-29T16:44:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ecab0d4912d3aa262e3892a2cb5f74502a5c4ec7",
"body": null,
"is_bot": false,
"headline": "test(tools/filter): port filter tests to new Tool contract",
"author_name": "mocode agent",
"author_login": null,
"committed_at": "2026-06-29T16:33:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a5cf65f2a755ad2cff93066c79dbe0bd6217b515",
"body": null,
"is_bot": false,
"headline": "feat(tools): add framework-agnostic filter",
"author_name": "pi-crew",
"author_login": null,
"committed_at": "2026-06-29T16:25:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "58d83ce00c505ea76b5b89c3d8145e3335bfb81d",
"body": null,
"is_bot": false,
"headline": "feat(tools): implement registry with init-time loader",
"author_name": "pi-crew agent",
"author_login": null,
"committed_at": "2026-06-29T16:22:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2e4b152f14f2f7d99818a4ce0766cf2ea161e9d4",
"body": "Introduce the toolkit's 9+ core type declarations in tools/contracts.go:\n4 main interfaces (Tool, ToolProvider, ToolContext, Capable), 3 supporting\ninterfaces (PermissionChecker, MCPHandles, ToolCallbacks), 3 structs\n(Schema, ToolResult, MCPServerHandle), and 1 type alias (Capability).\n\nAttachment i\n[…]\nure-refactor\nPR1). They will be consumed by 40+ tool implementations, the Coordinator\ndispatch path, and the capability/permission filter layer.\n\nDO NOT add fields, methods, or types not in the brief.",
"is_bot": false,
"headline": "feat(tools): define Tool/ToolProvider/ToolContext contracts",
"author_name": "mocode",
"author_login": null,
"committed_at": "2026-06-29T16:03:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "adbf0fcaaaf2abfcc5c64f02aea3473d2b88e309",
"body": null,
"is_bot": false,
"headline": "feat(tools): scaffold toolkit package with package doc",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-29T15:51:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1d567b3b0d7085026ff9b44beeb7db278b92eeaf",
"body": "Pre-existing environment issue documented per AGENTS.md\n'Troubleshooting Methodology' step 7.\n\nSymptom: go build / go test fail with\n compile: version 'go1.26.3' does not match go tool version 'go1.26.4'\neven though go version reports go1.26.4.\n\nRoot cause: default GOROOT (C:\\Users\\16143\\.g\\go) is \n[…]\ne.\n\nVerified locally on this host:\n go build -buildvcs=false ./... # PASS (no output)\n go test -count=1 -short -p=2 -timeout 120s ./internal/core/agent/...\n # 30 packages PASS, 0 FAIL",
"is_bot": false,
"headline": "docs+tooling: document Go 1.26.4 toolchain mismatch on Windows",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-29T14:54:13Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "229da6944d138e006b00a12757764d6ce71eb1b7",
"body": "* docs/superpowers/plans/2026-06-29-agent-architecture-refactor.md:\n 1160-line implementation plan covering three PRs (scaffold,\n migrate, cutover), 45 tasks mapped 1:1 against tasks.md's 7\n groups, 10 risk/mitigation rows, and per-PR rollback commands.\n\n* openspec/changes/agent-architecture-refa\n[…]\node: standard\n - isolation: worktree\n - plan: docs/superpowers/plans/2026-06-29-agent-architecture-refactor.md\n plus build_pause: null (resuming execution from the plan-ready\n decision point).",
"is_bot": false,
"headline": "chore(agent-refactor): add implementation plan and lock in work mode",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-29T14:44:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "af70d425b8bc7c1d7997c89b2cf4f9ed868745d3",
"body": null,
"is_bot": false,
"headline": "chore: ignore /.worktrees/ for isolated build worktrees",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-29T14:44:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a915455dfa1b56cd2046b8ac726cb6f5d4335e34",
"body": "Bootstraps the agent-architecture-refactor change through comet stages 1-2:\n\n* OpenSpec change at openspec/changes/agent-architecture-refactor/:\n - proposal.md: redesign internal/core/agent/tools/ as a top-level\n framework-agnostic toolkit (github.com/package-register/mocode/tools)\n with inte\n[…]\nswap, external versioning).\n\n* .gitignore: add /.crew/ for pi-crew runtime state.\n\nThis is a checkpoint commit; no source code is changed yet. The\nimplementation lands in the build phase that follows.",
"is_bot": false,
"headline": "feat(agent): design agent architecture refactor (comet open + design)",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-29T14:34:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6dc5f553a8751743567699a3db733cd7509829b4",
"body": "…by scenario\n\nShellType (POSIX/Cmd/PowerShell) was defined but never wired into Shell/Options/NewShell — pure dead code. Replaced with a design note: mvdan/sh is the single backend; future PowerShell support goes in a separate tool, not a ShellType switch.\n\nTool-selection guidance in bash.tpl and co\n[…]\nd of grep') to scenario-based: searching→grep tool, reading→view/read_files, listing→ls/glob, command execution→bash. Addresses MiniMax provider's 306x head/grep bias — explains why, not just 'don't'.",
"is_bot": false,
"headline": "♻️ refactor(shell): remove dead ShellType enum, guide tool selection …",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-26T07:36:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "219a2708a292e0ddc932b100ba2b8aa5f9d34231",
"body": "Typing a bare \"@\" used to dump every context item — MCP servers, skills,\nfiles, dirs, workflows — into one flat list with no separation. Now each\ncategory marker (@mcp:/@skill:/@file:/@dir:/@workflow:) becomes a\nnon-selectable section header (MCP / Skills / Files / Directories /\nWorkflows), so the p\n[…]\nits Filter() string — and the headers vanish once a query narrows results.\n\nTestSetAtItems_GroupsByCategoryHeader verifies MCP/Files headers appear in\norder; TestSectionLabel covers the label mapping.",
"is_bot": false,
"headline": "✨ feat(ui): group @ context completions into labeled sections",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-26T04:07:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b195287944ffa464ab06f2082e84d368c946986e",
"body": "…lp to its dialog",
"is_bot": false,
"headline": "feat(ui): add /copy command for the last assistant reply and wire /he…",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-26T03:52:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "62f295e4958c1cb335d74c3bc42067a73e8ebbe8",
"body": "The /evo loop previously dead-ended: fixation wrote the agent under\n~/local/mocode/evo/ but nothing loaded it back, so it was never actually\nselectable or runnable. This commit closes the full loop end-to-end.\n\nMaterialize (internal/core/agent/evo/materialize.go): projects a fixed agent\ninto a confi\n[…]\ntact).\n- TestClosedLoop_FixateMaterializeLoadRun: the full chain (fixate → materialize\n → config loads it → runnable; re-fixation overwrites idempotently).\n- evo + config + cmd tests pass non-cached.",
"is_bot": false,
"headline": "✨ feat(evo): close the loop — fixed agents become runnable modes",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-26T03:21:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "49bc370feecb3f1b702de48078b1e39d8b1ecb21",
"body": null,
"is_bot": false,
"headline": "feat(evo): surface /evo in the slash completion list and dialog dispatch",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-26T02:58:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ea1466d276852da8cc80edd20b95f409b9ff02ee",
"body": "Absorb trpc-agent-go/hermes-agent patterns and finish the system-integration\nseams so each layer depends only downward:\n\n- WeChat tool plugins no longer import the integration layer; a domain\n messenger port is injected via the coordinator (SetMessenger) and wired\n from transport, removing the cor\n[…]\nasses.\n- Drop the unused Windows ConPTY stub (the emulator path is the working\n Windows interactive solution) and add a layercheck helper plus governance\n notes documenting the container boundaries.",
"is_bot": false,
"headline": "feat: integrate layered ports, evolution gates, and tool observability",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-26T02:51:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8e987f9c246f625a32939b76830390ee9f88a56a",
"body": "The /evo loop now captures the distinct tools each successful run called as\nemergent skills for the fixed agent's manifest (\"自我涌现出技能\"). The\ncoordinator extracts tool names from the result steps' ToolCallPart messages\n(in first-use order, deduplicated) and threads them through the extension\nContext; the observability extension passes them to RecordIteration, which\nfolds them into State.CapturedSkills — persisted into the manifest on\nfixation.",
"is_bot": false,
"headline": "✨ feat(evo): capture exercised tools as emergent skills",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T22:12:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4b1f4dff857a32d984217b9d255c8fc652cc789d",
"body": "The /evo loop now distills each successful turn into a generalized,\ntransferable principle via the configured small model, rather than keeping\nthe literal task. This is the hermes GEPA insight (read the turn, propose a\ntargeted improvement) made real: successive turns contribute abstracted\nlessons, \n[…]\n\n- Workspace facade exposes AgentSmallLanguageModel; enterEvoMode installs\n evo.LLMDistiller when a small model is available.\n- eval.go's coordinatorAgent stub implements the new SmallModel() method.",
"is_bot": false,
"headline": "✨ feat(evo): LLM-backed lesson distillation for genuine emergence",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T22:08:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5b00e4284ea4e48c554b03048345a73e956f0bfc",
"body": "…illation\n\nCloses the \"maintain optimal theory\" gap: the /evo loop now reconstructs\nthe optimal theory on top of the active agent's proven system prompt, and\nprepares the seam for genuine emergence (LLM-backed lesson distillation).\n\nProven base capture:\n- Coordinator exposes ActiveAgentSystemPrompt(\n[…]\nr has the full successful turn to reason about.\n\nAlso fixes a void-return misuse in the parallel background_tty_windows.go\n(windows.ClosePseudoConsole returns no value) that blocked the Windows build.",
"is_bot": false,
"headline": "✨ feat(evo): capture proven base prompt and thread responses for dist…",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T22:01:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f44771b175a9f1dcab5901ae2eff04470262fd1a",
"body": "The /evo loop previously fixed whichever prompt was seen last. Now the\nState reconstructs an optimal-theory system prompt: it captures a proven\nbase at Enter and layers deduplicated lessons distilled from each\nsuccessful turn on top, so fixation preserves what already worked and\ngains the emergent r\n[…]\n, dedup). The UI passes an empty base for now (the proven prompt is\nnot yet surfaced through the workspace facade); capturing it is a\ndocumented refinement, and the loop is correct with lessons alone.",
"is_bot": false,
"headline": "✨ feat(evo): reconstruct a genuine optimal theory from runs",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T21:47:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "970a067337915d5478535d04b02b5a58f788b92c",
"body": "The /evo observability loop previously only saw the main Run path;\ndelegated sub-agent runs (the Agent tool, roundtable turns, parallel/DAG\nbatches) ran via runSubAgentWithMeta and were invisible to extensions.\n\nFire BeforeRun before the sub-agent executes and AfterRun/OnError after,\nmirroring the main Run dispatch. This closes the observability gap so the\nevo optimal-theory reconstruction captures the full delegation graph, not\njust top-level prompts.",
"is_bot": false,
"headline": "✨ feat(agent): fire extension events for sub-agent runs",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T21:42:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fcaab2bafdf66ec16b6e4f66cbe22ac4f768b66e",
"body": "Makes the /evo self-evolving loop real: each run during a /evo session is\nobserved and folded into the reconstructed optimal-theory prompt, which is\nthen fixed on exit.\n\ncoordinator (on_xxx dispatch):\n- SetExtensions/RegisterExtension/UnregisterExtension on the Coordinator\n interface; the coordinat\n[…]\nompletes the parallel provider extraction that was blocking the\nbuild: coordinator_providers.go (the build*Provider methods) with its\nnet/http import fixed, and coordinator.go's stale imports removed.",
"is_bot": false,
"headline": "✨ feat(evo): wire observability loop into the coordinator",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T21:37:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "71c0914b29e9894a7f702c23d9d1d4cd87b6f397",
"body": "Closes the /evo loop: a fixed agent can be loaded and surfaced like a mode.\nLoadAgents enumerates every固化 agent under the evo root (skipping any with\nan unreadable active revision), and LoadAgent fetches one by name. ModeID\nnamespaces them as \"evo:<name>\" so they cannot collide with built-in agent\nids. 2 tests.",
"is_bot": false,
"headline": "✨ feat(evo): load tamed agents back as selectable modes",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T21:19:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ac7e569995a59abbfeffe15b46735b6fca3b8429",
"body": "Adds the /evo special mode: a self-evolution session with a distinct\nred/purple identity, second-confirmation exit, and固化 (fixation) of the\ntamed agent on exit.\n\ncore/agent/evo (new, mode-agnostic runtime):\n- Manifest: the on-disk description of a fixed agent (name, title,\n system_prompt, skills, a\n[…]\n/evo exit\" fixes the converged context into\n ~/local/mocode/evo/agent-<name>/ and restores the default theme.\n- evo.State + evoPrevTheme fields on the UI model; infoCmd helper for\n transient toasts.",
"is_bot": false,
"headline": "✨ feat(evo): add /evo self-evolution mode with theme swap and fixation",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T21:17:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5baab5ab6292d2fccad7591dcbca34f00851a4a8",
"body": "Three foundational pieces for the self-evolution work, all verified green\ntogether:\n\n1. Extension/callback core (internal/core/agent/extension): a composable\n on_xxx lifecycle hook system adapted from trpc-agent-go's\n PluginManager/Callbacks. The Manager owns a named-extension registry\n with d\n[…]\nstration in\ncompat.go (its JobInputToolName re-export was missing) and the shell\nExecStreamWithStdin path (a dead newInterp call). These were left\nincomplete in the tree; both are now wired and green.",
"is_bot": false,
"headline": "✨ feat(agent): add extension system, fix store layering, add evo theme",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T20:56:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b2954470c77a282fc53b7a831d8964785d14f670",
"body": "internal/ had grown to 37 flat top-level packages with no enforced\nlayering, making ownership boundaries and dependency direction hard to\nread. Group them into 7 architectural containers with strictly downward\ndependencies:\n\n util/ ext, csync, infra, fsext, diff, log, errcoll, version, pubsu\n[…]\nroducer integration stays deferred). Import blocks\nre-sorted via goimports -local. go build ./... and go vet ./... green;\ntests pass except the pre-existing util/fsext Windows path-separator\nfailures.",
"is_bot": false,
"headline": "♻️ refactor(structure): reorganize internal/ into layered containers",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T20:29:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6945ebddf7e6cf33689dd5eac15b10ecb1b0c3d4",
"body": "- Merge sessionlog bug.md and errcoll JSONL in Producer\n- Emit quality rule patch when turn_score average is low\n- Add errcoll/quality/convergence tests and toolutil context tests\n- Document closed three-ring evolution loop in evolution-loop-plan.md\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "✨ feat(evolution): close quality loop and unify error sources",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T19:45:43Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "94accecf938594d3fb5bc4f65c71e82166a5267e",
"body": "Wire LLM-judge turn scoring into the coordinator, add eval/evolve CLI\ncommands with candidate packages, and register WeChat/session export tools.",
"is_bot": false,
"headline": "✨ feat: add evaluation loop, evolution scoring, and export plugins",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T19:36:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a1d9f39762e28a07f8c40c5161bf8317e646d6c1",
"body": "…l/ext\n\nReplace internal/stringext and internal/filepathext with a single ext\npackage and update call sites.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "♻️ refactor(structure): fold string and filepath helpers into interna…",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T19:35:32Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ebabdbbc7ef10d6f9f7669efd76be9dcc37c692b",
"body": "Drop the React web frontend, embedded server/swagger stack, client\nworkspace backend, and MiniMax quota orchestration paths; simplify CLI\nto TUI, admin, gateway, and run entrypoints.",
"is_bot": false,
"headline": "🗑️ chore: remove web UI and in-process HTTP transport",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T19:34:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "863417aeb01cd649320eb015e1c3a0432790d193",
"body": "Flatten exec/file/network/search plugin groupings into per-tool packages,\ncolocate LSP client code under agent/tools/lsp, and update registry wiring.",
"is_bot": false,
"headline": "♻️ refactor(tools): one folder per builtin and plugin tool",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T19:33:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c4c933d4d0508a15531c7de0633cea7347973151",
"body": "- Rewrite AGENTS.md, internal/README, HOOKS, CONTRIBUTING, and baseline docs\n- Rename tools→shellruntime, commands→slash, gateway→wechat/gateway\n- Add memory JSONL persistence, unified log paths, message update debounce\n- Add httputil middleware, web localhost default, admin Bearer token\n- Split ui_mcp/ui_wechat and app_sessions; remove cron; build to bin/mocode\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "♻️ refactor(structure): implement multi-review governance roadmap",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T18:05:10Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "eb2fe26859c07e1719d6070852b2cb0f3acba4dc",
"body": "详细描述:\n- 每用户独立 Butler 会话,SessionKey(wx:userID) 绑定与 per-user 锁\n- 回合级回复提取,AgentIsSessionBusy 轮询等待,避免读到 stale 回复\n- 修复 /switch、deleteSession 的会话绑定清理\n- channel 按用户串行处理消息,Reply 失败最多重试 3 次\n- /send、/screenshot 收件人改为 msg.UserID,不再误发给 bot 账号\n- butler_prompt agent 工具示例改为合法 JSON\n- 新增 butler_test.go 覆盖 SessionKey、busy-wait、switch 等场景\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "🐛 fix(wechat): stabilize Butler per-user sessions and reply handling",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-25T17:04:45Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "20e2b97c01c37396ca4a7420bcf695819a6df1fb",
"body": "…ompression, cron scheduler\n\n- Session Search (FTS5): SQLite-based full-text search across all session messages\n with three modes: discovery (FTS5 query), scroll (message window), browse (recent sessions)\n Auto-rebuilds index on first use from existing JSONL message files\n\n- Context Auto-Compressi\n[…]\n: File-based cron job management with 5-field expression support,\n cross-process locking, job result persistence, and delivery handler interface.\n Zero external dependencies (no robfig/cron needed).",
"is_bot": false,
"headline": "feat: add P0 hermes-inspired capabilities - session search, context c…",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-23T05:31:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "63bfb89f94ee1b68ae3b8975930540768a0b3cd2",
"body": "…o code'",
"is_bot": false,
"headline": "chore: bump version to v0.7.0, rebrand TUI from 'Fromsko Code' to 'oM…",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-23T03:25:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "882daf7384b5a68e5bd74f81beeb5bb16885e082",
"body": "Three package consolidations across internal/:\n\n1. capability -> commands: capability was a thin abstraction layer over commands (imported it for Argument type, defined CommandRegistry/Provider/Descriptor). Merged into commands, updated 5 importers.\n\n2. orchestration/swarm -> orchestration: parent d\n[…]\nss fsext, lsp, config, commands, agent, store, ui, session.\n\ngateway -> wechat was attempted but reverted: creates import cycle (wechat->workspace->agent->tools->wechat).\n\nAll tests pass. Build clean.",
"is_bot": false,
"headline": "♻️ refactor: consolidate capability, orchestration, and infra packages",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-22T21:36:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4ca3f238d17c6176e760d62c672113f7326143e2",
"body": "…ckage\n\nThe agent/toolutil parent directory had no .go files — it was purely a namespace wrapper around 6 sub-packages (shared, toolctx, capability, callback, retry, lsputil) that are all tool utilities. Consolidated into one flat package.\n\nKey changes: shared.GetSessionFromContext -> toolutil.GetSe\n[…]\ntry.DefaultPolicy -> toolutil.DefaultRetryPolicy. 38 files updated across builtin, plugins, and registry. callback.go's toolctx import eliminated (intra-package call).\n\nAll 37 tests pass. Build clean.",
"is_bot": false,
"headline": "♻️ refactor(toolutil): flatten 6 sub-packages into single toolutil pa…",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-22T21:15:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a9820fcf1f75e3fffe39def219d68a5258f08065",
"body": "…remove code\n\nRemove code.md (orphan duplicate of coder) and coordinator.md (overlaps plan). Merge coordinator's unique logic (context management, execution brief, progress reporting) into plan.md.\n\nStrengthen plan.md with thinking methodology (verify-first, causal chains, anti-hallucination guard),\n[…]\n-file edit safety constraints (transactional edits, post-edit verification, error classification taxonomy, concurrency limits).\n\nChange default mode from plan to coder for uniqueness and no ambiguity.",
"is_bot": false,
"headline": "♻️ refactor(modes): consolidate modes - merge coordinator into plan, …",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-22T20:59:12Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1c379ae589617fc4a96b10eaab10039f6ffa1c8c",
"body": "…rm hints\n\nAdd thinking methodology (Verify->Plan->Code loop, anti-hallucination guard, structured debugging) and output discipline (zero fluff, logical rigor, conciseness hierarchy) sourced from reference docs.\n\nAdd Windows platform notes gated on Platform=windows: mvdan/sh POSIX emulation, forward-slash shell paths, native Windows tool paths, forbid invented Unix paths, require path verification.",
"is_bot": false,
"headline": "✨ feat(prompt): strengthen coder template with methodology and platfo…",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-22T20:59:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a7816b5c6a2d564e7d00fe264a45620ea74ab0a6",
"body": "Tool renderers were calling json.Unmarshal on opts.ToolCall.Input before\nchecking IsPending(). During streaming, Input is an empty string until the\nparams JSON completes, causing unmarshal failure and a spurious 'ERROR\nInvalid parameters' display. Most visible on Edit/MultiEdit due to large\nparam payloads creating a long streaming window.\n\nGuard all 12 renderer sites (file.go x6, bash.go, fetch.go, search.go x4)\nto skip unmarshal when Input is empty.",
"is_bot": false,
"headline": "🐛 fix(ui): skip param unmarshal during tool-call streaming",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-22T20:58:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f9e6846da6d17fec98518cbeda7cae096eaa6e4",
"body": "- 删除 requirements.md (需求文档)\n- 删除 tasks.md (任务清单)",
"is_bot": false,
"headline": "📝 docs: 移除 FileMentionMenu Redesign 项目文档",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-17T06:13:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f35a2bd90b679c2e1207a5432f5f76a9899db565",
"body": "…irmations\n\n- Add comprehensive compress_test.go for tool message compression levels\n\n- Test nil compressor, LevelFull, LevelTrim, LevelCompact, LevelSummary\n\n- Verify tool name propagation for bash-specific trimming rules\n\n- Add .workflow-confirmations.json to .gitignore",
"is_bot": false,
"headline": "✅ test(agent): add compress tool message tests + ignore workflow conf…",
"author_name": "fromsko",
"author_login": "Fromsko",
"committed_at": "2026-06-14T16:21:02Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 7,
"commits_last_year": 187,
"latest_release_at": "2026-07-20T13:47:07Z",
"latest_release_tag": "v0.7.8",
"releases_from_tags": false,
"days_since_last_push": 6,
"active_weeks_last_year": 7,
"days_since_latest_release": 6,
"mean_days_between_releases": 0.2
},
"community": {
"has_readme": true,
"has_license": false,
"has_description": true,
"has_contributing": false,
"health_percentage": 28,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "github.com/nextsko/mocode-agent",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/nextsko/mocode-agent",
"is_deprecated": false,
"latest_version": "v0.7.8",
"repository_url": "https://github.com/nextsko/mocode-agent",
"versions_count": 13,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-20T13:36:41Z",
"latest_version_yanked": null,
"days_since_latest_publish": 6
}
]
},
"popularity": {
"forks": 0,
"stars": 0,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [],
"complete": true,
"collected": 0,
"total_stars": 0,
"collected_at": null
},
"open_issues_and_prs": 2
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": true,
"bootstrap_files": [
"Taskfile.yaml",
"internal/ui/diffview/Taskfile.yaml"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"go.mod"
],
"largest_source_bytes": 271698,
"source_files_sampled": 549,
"oversized_source_files": 1,
"agent_instruction_files": [
"AGENTS.md",
"internal/transport/cmd/stats/AGENTS.md",
"internal/ui/AGENTS.md"
],
"agent_instruction_max_bytes": 20197
},
"dependencies": {
"manifests": [
"go.mod"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"go"
],
"dependencies": [
{
"name": "charm.land/bubbles/v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.1.1"
},
{
"name": "charm.land/bubbletea/v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.0.8"
},
{
"name": "charm.land/catwalk",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.49.28"
},
{
"name": "charm.land/fang/v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.0.1"
},
{
"name": "charm.land/fantasy",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.38.1"
},
{
"name": "charm.land/glamour/v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.0.1"
},
{
"name": "charm.land/lipgloss/v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.0.4"
},
{
"name": "charm.land/log/v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.0.0"
},
{
"name": "github.com/BurntSushi/toml",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/JohannesKaufmann/html-to-markdown",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/PuerkitoBio/goquery",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.12.0"
},
{
"name": "github.com/alecthomas/chroma/v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.27.0"
},
{
"name": "github.com/atotto/clipboard",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.1.4"
},
{
"name": "github.com/aymanbagabas/go-nativeclipboard",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.1.3"
},
{
"name": "github.com/aymanbagabas/go-udiff",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.4.1"
},
{
"name": "github.com/bmatcuk/doublestar/v4",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v4.10.0"
},
{
"name": "github.com/charlievieth/fastwalk",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.0.14"
},
{
"name": "github.com/charmbracelet/colorprofile",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.4.3"
},
{
"name": "github.com/charmbracelet/ultraviolet",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20260703014108-f5a850f9c2b7"
},
{
"name": "github.com/charmbracelet/x/ansi",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.11.7"
},
{
"name": "github.com/charmbracelet/x/editor",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.2.0"
},
{
"name": "github.com/charmbracelet/x/etag",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.2.0"
},
{
"name": "github.com/charmbracelet/x/exp/charmtone",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20260109001716-2fbdffcb221f"
},
{
"name": "github.com/charmbracelet/x/exp/golden",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20250806222409-83e3a29d542f"
},
{
"name": "github.com/charmbracelet/x/exp/ordered",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.1.0"
},
{
"name": "github.com/charmbracelet/x/exp/slice",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20260422141420-a6cbdff8a7e2"
},
{
"name": "github.com/charmbracelet/x/exp/strings",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.1.0"
},
{
"name": "github.com/charmbracelet/x/powernap",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.1.6"
},
{
"name": "github.com/charmbracelet/x/term",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.2.2"
},
{
"name": "github.com/clipperhouse/displaywidth",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.11.0"
},
{
"name": "github.com/clipperhouse/uax29/v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.7.0"
},
{
"name": "github.com/disintegration/imaging",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.2"
},
{
"name": "github.com/dustin/go-humanize",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.0.1"
},
{
"name": "github.com/gen2brain/beeep",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.11.2"
},
{
"name": "github.com/go-git/go-git/v5",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v5.19.1"
},
{
"name": "github.com/google/uuid",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/invopop/jsonschema",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.14.0"
},
{
"name": "github.com/itchyny/gojq",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.12.19"
},
{
"name": "github.com/joho/godotenv",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.5.1"
},
{
"name": "github.com/jordanella/go-ansi-paintbrush",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20240728195301-b7ad996ecf3d"
},
{
"name": "github.com/kbinani/screenshot",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20250624051815-089614a94018"
},
{
"name": "github.com/kevinburke/ssh_config",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/lucasb-eyer/go-colorful",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.4.0"
},
{
"name": "github.com/mattn/go-isatty",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.23"
},
{
"name": "github.com/modelcontextprotocol/go-sdk",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.1"
},
{
"name": "github.com/nxadm/tail",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.4.11"
},
{
"name": "github.com/openai/openai-go/v3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v3.43.0"
},
{
"name": "github.com/pkg/browser",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20240102092130-5ac0b6a4141c"
},
{
"name": "github.com/qjebbs/go-jsons",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.0.0-alpha.6"
},
{
"name": "github.com/rivo/uniseg",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.4.7"
},
{
"name": "github.com/sahilm/fuzzy",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.1.3"
},
{
"name": "github.com/sourcegraph/jsonrpc2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.2.1"
},
{
"name": "github.com/spf13/cobra",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.2"
},
{
"name": "github.com/stretchr/testify",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "github.com/tidwall/gjson",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.19.0"
},
{
"name": "github.com/tidwall/sjson",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.2.5"
},
{
"name": "github.com/yeqown/go-qrcode",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.5.10"
},
{
"name": "github.com/zeebo/xxh3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.1.0"
},
{
"name": "go.uber.org/goleak",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.3.0"
},
{
"name": "golang.org/x/crypto",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.54.0"
},
{
"name": "golang.org/x/net",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.57.0"
},
{
"name": "golang.org/x/sync",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.22.0"
},
{
"name": "golang.org/x/sys",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.47.0"
},
{
"name": "golang.org/x/text",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.40.0"
},
{
"name": "gopkg.in/natefinch/lumberjack.v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.2.1"
},
{
"name": "gopkg.in/yaml.v3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v3.0.1"
},
{
"name": "modernc.org/sqlite",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.54.0"
},
{
"name": "mvdan.cc/sh/moreinterp",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20250902163504-3cf4fd5717a5"
},
{
"name": "mvdan.cc/sh/v3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v3.13.1"
}
],
"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": 2,
"merged_prs": 1,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 1
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "Fromsko",
"commits": 156,
"avatar_url": "https://avatars.githubusercontent.com/u/99723642?v=4"
},
{
"type": "User",
"login": "nextsko",
"commits": 19,
"avatar_url": "https://avatars.githubusercontent.com/u/231282484?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.891
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"release.yml",
"test.yml"
],
"has_docs_dir": true,
"linter_configs": [
".golangci.yml"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum"
],
"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": 0,
"reason": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
"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/29 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 0,
"reason": "project has 0 contributing companies or organizations -- score normalized to 0",
"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": 10,
"reason": "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": 0,
"reason": "license file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 0,
"reason": "project was created within the last 90 days. Please review its contents carefully",
"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": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"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": 6,
"reason": "4 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "0e0b447f601354569fc65ce007d01ca740e486bf",
"ran_at": "2026-07-27T03:59:34Z",
"aggregate_score": 3.3,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": true
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-20T16:42:53Z",
"oldest_open_prs": [
{
"number": 3,
"created_at": "2026-07-20T09:26:10Z",
"last_comment_at": "2026-07-20T09:26:11Z",
"last_comment_author": "dependabot"
},
{
"number": 4,
"created_at": "2026-07-20T09:26:34Z",
"last_comment_at": "2026-07-20T09:26:35Z",
"last_comment_author": "dependabot"
}
],
"last_merged_pr_at": "2026-07-19T15:15:18Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/nextsko/mocode-agent",
"host": "github.com",
"name": "mocode-agent",
"owner": "nextsko"
},
"metrics": {
"overall": {
"key": "overall",
"band": "at_risk",
"name": "Overall health",
"note": null,
"notes": [],
"value": 46,
"inputs": {
"security": 33,
"vitality": 71,
"community": 12,
"governance": 40,
"engineering": 68
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 71,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 59,
"inputs": {
"commits_last_year": 187,
"human_commit_share": 0.99,
"days_since_last_push": 6,
"active_weeks_last_year": 7
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "7/52 weeks with commits",
"points": 4.8,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 7
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "187 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 187
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"releases_count": 7,
"latest_release_tag": "v0.7.8",
"releases_from_tags": false,
"days_since_latest_release": 6,
"mean_days_between_releases": 0.2
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "7 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 7
}
}
],
"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 ~0.2 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 0.2
}
}
],
"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": "critical",
"name": "Community & Adoption",
"value": 12,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 0,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "0 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 0
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "critical",
"name": "Community health",
"note": null,
"notes": [],
"value": 25,
"inputs": {
"has_readme": true,
"has_license": false,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "no license file detected",
"points": 0,
"status": "missed",
"details": [
{
"code": "license_absent",
"params": {}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"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": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "at_risk",
"name": "Sustainability & Governance",
"value": 40,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 14,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 2,
"top_contributor_share": 0.891
},
"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 89% of commits",
"points": 2.5,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 89
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "at_risk",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 36,
"inputs": {
"merged_prs": 1,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 1
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "1/2 decided PRs merged",
"points": 19.1,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 1,
"decided": 2
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/29 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "critical",
"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": 26,
"inputs": {
"followers": 1,
"owner_type": "User",
"is_verified": null,
"owner_login": "nextsko",
"public_repos": 8,
"account_age_days": 320
},
"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": "1 followers of nextsko",
"points": 2.2,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 1,
"login": "nextsko"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "8 public repos, account ~0 yr old",
"points": 8.7,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 8
}
},
{
"code": "account_age_years",
"params": {
"years": 0
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"github.com/nextsko/mocode-agent"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 6
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on go",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "go"
}
}
],
"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": "13 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 13
}
}
],
"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": "moderate",
"name": "Engineering Quality",
"value": 68,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 64,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "2 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 2
}
}
],
"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": ".golangci.yml",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yml"
}
}
],
"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": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"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": null,
"points": 0,
"status": "missed",
"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": null,
"points": 0,
"status": "missed",
"details": [],
"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": 33,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": null,
"notes": [],
"value": 33,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 18,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 0,
"scorecard_aggregate": 3.3
},
"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": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"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/29 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"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": "update tool detected",
"points": 7.5,
"status": "met",
"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 not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"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 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"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": "4 existing vulnerabilities detected",
"points": 4.5,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 1
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"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": "good",
"name": "AI Readiness",
"value": 79,
"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.899,
"agent_instruction_files": [
"AGENTS.md",
"internal/transport/cmd/stats/AGENTS.md",
"internal/ui/AGENTS.md"
],
"agent_instruction_max_bytes": 20197
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, internal/transport/cmd/stats/AGENTS.md, internal/ui/AGENTS.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, internal/transport/cmd/stats/AGENTS.md, internal/ui/AGENTS.md"
}
}
],
"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": "89 of 99 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 89,
"sampled": 99
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "excellent",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 88,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [
"Taskfile.yaml",
"internal/ui/diffview/Taskfile.yaml"
],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [],
"agent_commit_share": 0.04,
"toolchain_manifests": [
"go.mod"
],
"dependency_bot_commit_share": 0.01
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Taskfile.yaml, internal/ui/diffview/Taskfile.yaml",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Taskfile.yaml, internal/ui/diffview/Taskfile.yaml"
}
}
],
"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": ".golangci.yml",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yml"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "Go (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "4 of the last 100 commits agent-authored or agent-credited",
"points": 8,
"status": "partial",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 4,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "1 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 1,
"sampled": 100
}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 271698,
"source_files_sampled": 549,
"oversized_source_files": 1
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Go (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "1/549 source files over 60KB",
"points": 54.9,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 549,
"oversized": 1
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "critical",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 20,
"inputs": {
"example_dirs": [],
"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": null,
"points": 0,
"status": "missed",
"details": [],
"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": [
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-27T03:59:41.643377Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/n/nextsko/mocode-agent.svg",
"full_name": "nextsko/mocode-agent",
"license_state": "absent",
"license_spdx": null
}