原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 48489,
"has_wiki": false,
"homepage": null,
"languages": {
"C": 6941,
"CSS": 22724,
"HTML": 2225,
"Shell": 37749,
"Batchfile": 338,
"JavaScript": 284798,
"PowerShell": 1670,
"TypeScript": 4441056
},
"pushed_at": "2026-07-17T04:17:11Z",
"created_at": "2026-07-04T13:37:14Z",
"owner_type": "User",
"updated_at": "2026-07-17T04:17:07Z",
"description": "Fork Pi",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript"
]
},
"owner": {
"blog": null,
"name": null,
"type": "User",
"login": "schovest",
"company": null,
"location": null,
"followers": 0,
"avatar_url": "https://avatars.githubusercontent.com/u/299849851?v=4",
"created_at": "2026-07-04T13:36:14Z",
"is_verified": null,
"public_repos": 2,
"account_age_days": 17
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.11.3",
"kind": "patch",
"published_at": "2026-07-17T04:18:27Z"
},
{
"tag": "v0.11.2",
"kind": "patch",
"published_at": "2026-07-16T09:10:34Z"
},
{
"tag": "v0.11.1",
"kind": "patch",
"published_at": "2026-07-16T06:22:50Z"
},
{
"tag": "v0.11.0",
"kind": "minor",
"published_at": "2026-07-16T05:36:04Z"
},
{
"tag": "v0.10.2",
"kind": "patch",
"published_at": "2026-07-15T12:02:55Z"
},
{
"tag": "v0.10.1",
"kind": "patch",
"published_at": "2026-07-15T11:30:19Z"
},
{
"tag": "v0.10.0",
"kind": "minor",
"published_at": "2026-07-15T10:36:56Z"
},
{
"tag": "v0.9.2",
"kind": "patch",
"published_at": "2026-07-10T10:48:44Z"
},
{
"tag": "v0.9.1",
"kind": "patch",
"published_at": "2026-07-10T03:20:04Z"
},
{
"tag": "v0.9.0",
"kind": "minor",
"published_at": "2026-07-10T03:03:20Z"
},
{
"tag": "v0.8.1",
"kind": "patch",
"published_at": "2026-07-10T01:48:05Z"
},
{
"tag": "v0.8.0",
"kind": "minor",
"published_at": "2026-07-07T02:50:20Z"
},
{
"tag": "v0.7.4",
"kind": "patch",
"published_at": "2026-07-06T17:12:06Z"
},
{
"tag": "v0.7.2",
"kind": "patch",
"published_at": "2026-07-06T08:35:07Z"
},
{
"tag": "v0.7.1",
"kind": "patch",
"published_at": "2026-07-04T16:40:20Z"
}
],
"recent_commits": [
{
"oid": "d2f3f898b3d75dcb93b35f78cd83f792258f2575",
"body": null,
"is_bot": false,
"headline": "release v0.11.3: sudo-helper 扩展、TUI thinking 流式渲染优化、install.sh 扩展候选更新",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-17T04:16:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f96f251914a2ab6b5cf5078239120896d6e1081f",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.11.3",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-17T04:16:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b4cd062491016ae82343c99106b05375d65f68df",
"body": "- 迁移 docs/specs/architecture.md → docs/architecture.md,删除空目录\n- AGENTS.md: 上游基线版本 0.79.1 → 0.80.6\n- AGENTS.md: install.sh 路径补全为 packages/coding-agent/dist-assets/install.sh\n- AGENTS.md: 索引表和同步规则中所有路径引用同步更新\n- architecture.md: npm 包名修正(@schovest/pi-tui、@schovest/pi-coding-agent)\n- architecture.md: 数据流入口模式名修正(PrintMode/RpcMode → runPrintMode()/runRpcMode())\n- architecture.md: 技能加载入口修正(agent/harness/skills.ts → coding-agent/core/skills.ts)\n- architecture.md: install.sh 路径修正,新增 dist-assets 目录说明",
"is_bot": false,
"headline": "docs: 迁移 architecture.md 到 docs/ 根目录并修正与代码库的不一致",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-17T04:09:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "67c24eb53e84d9b6c696ca85700f32382900196c",
"body": "修正 .gitignore 中 todo.md 规则为 TODO.md(Linux 区分大小写),\ngit rm --cached 取消追踪,本地文件保留。",
"is_bot": false,
"headline": "chore: 将 TODO.md 加入 .gitignore 并取消追踪",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-17T03:44:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "67473865baccaafabc0c9b8267f7dda9ca65b30f",
"body": "install.sh 扩展选择菜单新增 pi-hermes-memory(持久记忆与学习循环),\n通过 npm:pi-hermes-memory 安装,默认不勾选。",
"is_bot": false,
"headline": "feat(install): 新增 pi-hermes-memory 扩展候选",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-17T03:41:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "01f48f392eae7f31b462806d97d5711a1235a9f2",
"body": "handleInput 逐字符遍历 data,遇到 \\x1b[A(箭头键/鼠标滚轮转义序列)\n时第一个字符 \\x1b 即触发 cancel,导致弹窗被滚轮关闭。\n\n改用 matchesKey() 精确匹配:仅独立 Escape / Ctrl+C / Ctrl+D 触发取消。\n所有以 \\x1b 开头的转义序列(箭头键、功能键、鼠标)被忽略。",
"is_bot": false,
"headline": "fix: sudo-helper 鼠标滚轮误触关闭",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-17T03:26:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8c8ff3fda83b449c5b5b959f554adeaebe106f41",
"body": "SecureBuffer 重构时 writer.stdin.end() 调用丢失。\ncat > FIFO 读到密码后不关闭 FIFO 写端,askpass 的 cat FIFO\n永远收不到 EOF 不退出,SUDO_ASKPASS='/dev/shm/pi-sudo-askpass-f4c74f2d' sudo -A 无限等待 askpass 返回。\n\n修复:submitted=true 后立即 writer.stdin.end(),cat 读到 EOF\n→ 关闭 FIFO 写端 → askpass cat FIFO 收到 EOF 退出 → sudo 获取密码",
"is_bot": false,
"headline": "fix: sudo-helper 假死 — writer.stdin.end() 遗漏导致 FIFO 死锁",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-17T03:20:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c082c8795f00f793ee5e819a86f4484a3ded4f28",
"body": "sudo-helper 扩展:\n- tool_call 事件拦截 bash 中的 sudo 命令\n- SUDO_ASKPASS + FIFO(/dev/shm tmpfs)安全注入密码\n- 密码 XOR 动态加密(randomFillSync),明文从不作为 JS string 存在\n- SecureBuffer:append 立即加密,flushTo 解密写入后 fill(0) 物理清零\n- 自定义 PasswordInputComponent:● 遮罩 + 高对比度面板(反色标题 + 亮黄边框)\n- sudo -n true 预检:timestamp 有效时跳过\n- 仅注入第一个 sudo,后续靠 sudo timestamp 缓存\n\ninstall.sh 改动:\n- 已安装检测:/pi 存在时跳过核心拷贝,仅运行扩展/Agent 选择\n- 扩展候选新增 sudo-helper(file:sudo-helper.ts,默认不勾选)",
"is_bot": false,
"headline": "feat: sudo-helper 扩展 + install.sh 已安装检测",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-17T03:12:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "140afbe9a9bfd7355c1b8f6989f9c424ec4fbded",
"body": "Forward to packages/coding-agent's existing build:binary target,\nmatching the style of the existing build script.",
"is_bot": false,
"headline": "Add npm run build:binary script at repo root",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-17T01:44:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b0030a80ca4cda61cabfebc5ac7d1e0399315d5f",
"body": "…untrack",
"is_bot": false,
"headline": "merge dev: thinking 流式渲染卡顿修复(Markdown 增量缓存 + 组件复用)、.pi/settings.json …",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T15:28:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b23a67de1431d330c5e857667d9ebd67749beeb2",
"body": "- markdown.ts: 新增 appendText() 和 token 级增量渲染,通过 cachedTokens\n /cachedTokenWrappedLines 缓存未变更 token 的 wrap 结果,仅重新渲染\n firstChanged-1 及之后的 token,将单帧渲染成本从 O(总文本) 降到 O(最后一个 token)\n- assistant-message.ts: thinking Markdown 实例复用,通过 appendText/setText\n diff 分支保留渲染缓存,消除 updateContent 每次销毁+重建导致的缓存丢失\n- 新增 5 个增量等价性测试覆盖:纯追加、交错渲染、invalidate 后追加、\n 复杂 markdown(列表+表格+代码块)、setext heading 类型变化",
"is_bot": false,
"headline": "fix: thinking 流式渲染卡顿 — Markdown token 级增量缓存 + 组件复用",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T15:22:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57be562d2e00ecd3afbc76976592793c9f7fa15d",
"body": null,
"is_bot": false,
"headline": "chore: untrack .pi/settings.json",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T09:22:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cad0dacd9d47dcf1533adbf6b75d5c32c2abf34b",
"body": null,
"is_bot": false,
"headline": "chore: add .pi/settings.json to .gitignore, add CHANGELOG.md",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T09:21:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c90721fabfb318f846f3c2fb1d46fc56beef0f23",
"body": "…充、fd 下载移除、pi-lens case 声明修复、footer 分支刷新修复",
"is_bot": false,
"headline": "release v0.11.2: install.sh 扩展+Agent 分步选择、plan.md primary agent、扩展候选扩…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T09:09:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "91ce6a6b2570a3df5dcac6cee51546a91252b45e",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.11.2",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T09:08:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "403e83ee3ad4ce2e417ec606aef7c5bee91b69d7",
"body": "- install.sh 扩展(9项)和 Primary Agent(3项) 拆分为独立菜单\n- 新增 plan.md primary agent 到 dist-assets\n- coding.md 移除 thinking frontmatter 参数\n- 扩展候选新增 superpowers/pi-plugin-manager/pi-lens\n- install.sh 移除 fd 下载逻辑(pi 已内置)\n- run_menu 改用 nameref 替代 eval\n- 修复 build:binary 引用已删除的 ai/agent workspace 包",
"is_bot": false,
"headline": "feat: install.sh 拆分扩展/Agent两步选择,新增 plan agent,移除 fd 下载",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T08:51:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0b4b72add8d2cb5249e958cd77ac35a067658c33",
"body": "修复位置:case 块已有 {} 花括号,但 const 声明在嵌套 if 块内时,\n规则未能识别外层 case 已提供作用域保护,导致 12 处误报 error。\n\n方案:项目级规则覆盖 rules/ast-grep-rules/rules/no-case-declarations.yml,\nnot 子句嵌套 inside 加 stopBy: end。",
"is_bot": false,
"headline": "fix: pi-lens no-case-declarations 误报 — 嵌套 inside 缺 stopBy: end",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T08:13:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "906bc89516bb659cf1acf9c0d48007265f0ac854",
"body": null,
"is_bot": false,
"headline": "test: 修复 4167-thinking-toggle 测试 mock 缺少 footerDataProvider",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T07:36:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "48dcdebaa8c62e83209979f295f8a4b371e9b540",
"body": null,
"is_bot": false,
"headline": "test: 修复 interactive-mode-compaction 测试 mock 缺少 footerDataProvider",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T07:22:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5d96b7eaf35b4acd9062704d2ac485ce0c6bafef",
"body": "- footer-data-provider: 放宽 fs.watch 过滤,接受目录内任意变化(git 原子写事件 filename 是临时文件,旧逻辑只接受 filename==='HEAD' 导致事件丢失)\n- footer-data-provider: 新增 invalidateBranchCache() 清除缓存的分支\n- interactive-mode: handleEvent 和 handleBashCommand 调用 invalidateBranchCache(FooterComponent.invalidate() 为 no-op,旧逻辑永不清除 provider 缓存)",
"is_bot": false,
"headline": "fix: footer 分支标签不动态更新",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T07:18:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c1ce70766fc0714b5dae9c9270185bba9e93cbfd",
"body": "…emove CLAUDE.md symlink\n\n- Add .pi/prompts/up.md: version upgrade prompt accepting target version\n as argument (e.g. /up v0.11.1), encoding the full 10-step flow\n- Remove \"版本升级流程\" section from AGENTS.md (~48 lines) to save\n context tokens; steps now live only in the /up prompt\n- Update 4 references in AGENTS.md (CI/CD, Changelog, Git rules) to\n point to /up prompt instead of inline step numbers\n- Remove unnecessary CLAUDE.md symlink (duplicate of AGENTS.md)",
"is_bot": false,
"headline": "chore: add /up prompt, move version upgrade steps out of AGENTS.md, r…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T06:40:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "adf15f7824169a30e73f7f6c11a29eb58ea83c88",
"body": "…to cycle agents, relax main merge policy",
"is_bot": false,
"headline": "release v0.11.1: rename /plugins to /claude-plugin, rebind Shift+Tab …",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T06:20:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7559ffa0279d82f3982d0cc6bf68ab7a5d307848",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.11.1",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T06:20:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8d1120f130db2eb0af906880ac24d68c0b3a12e6",
"body": "…le agents, relax main merge policy",
"is_bot": false,
"headline": "merge dev: rename /plugins to /claude-plugin, rebind Shift+Tab to cyc…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T06:14:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6c2b6be34f4778afdbd4cd48ca502d7aea0945e3",
"body": "… not only on version bumps",
"is_bot": false,
"headline": "docs: relax main branch merge policy - allow merging when tests pass,…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T06:12:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e75c6ad4f94ccec29963790075b7f2d36b7b8f95",
"body": "… shortcut\n\n- Shift+Tab now cycles primary agents (new app.agent.cycle keybinding)\n- app.thinking.cycle keybinding set to none (accessible via command palette)\n- Add cycleAgent() method using discoverPrimaryAgentsSync + switchPrimaryAgent\n- Update hotkeys display and docs (keybindings.md, quickstart.md)",
"is_bot": false,
"headline": "feat: rebind Shift+Tab to cycle primary agents, remove thinking cycle…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T06:06:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eba85b4daa143586c68b45109d3626224370d48f",
"body": "…lict with pi-plugin-manager extension\n\n- slash-commands.ts: BUILTIN_SLASH_COMMANDS plugins → claude-plugin\n- package-manager-cli.ts: handlePluginCommand args[0] check + help text\n- cli/args.ts: root help text\n- interactive-mode.ts: slash command registration + input handling\n- Update tests and docs (plugins.md, packages.md) accordingly",
"is_bot": false,
"headline": "fix: rename built-in /plugins command to /claude-plugin to avoid conf…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T05:55:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "79afba437b65314cb14e8dd307f74c7b74c44d7e",
"body": "…paction 改进\n\n合并内容:\n- vitest SSR import.meta.resolve 修复 + agent_settled 测试对齐\n- 上游 timing measurements / null content 归一化 / system prompt override\n- 扩展导入缓存 / 加载失败提示 / project-local pi config autoload\n- 模型选择修复: fallback thinking / authenticated slash ids / unauthenticated default skip / modelOverrides\n- merge-upstream-coding-agent skill",
"is_bot": false,
"headline": "release v0.11.0: 上游 v0.80.6 同步 — agent-session 扩展逻辑对齐、模型选择修复、扩展缓存、com…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T05:34:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5b67b0ed4d233c8b68a0239d865ca1d5c3f22cc6",
"body": "Checklist for merging upstream coding-agent/tui source changes into the\nfork. Covers version gap identification, commit classification, fork-\nspecific differences, selective application workflow, skip decision\nmatrix, and build notes.",
"is_bot": false,
"headline": "docs: add merge-upstream-coding-agent skill",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T05:33:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "190a80618842999ce3e601bb779a16df49a51b09",
"body": "… ca09b2b1, c6251a86, 312bc713)\n\n- model-resolver: preserve custom fallback thinking level (1fc80f4f)\n cliThinking type changed from string to ThinkingLevel; fallback model\n preserves reasoning flag when thinking is requested\n- model-resolver: resolve authenticated slash model ids (1b2c32c6)\n Whe\n[…]\nsion providers (c6251a86)\n configModelOverrides map + applyConfiguredModelOverride applied during\n extension provider model loading\n- slash-commands: add argumentHint to /model and /login (312bc713)",
"is_bot": false,
"headline": "fix: model selection and provider fixes (upstream 1fc80f4f, 1b2c32c6,…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T05:15:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9ab42dafe7ab660fc9c19d8278b581f4f7be06de",
"body": "…4e7)\n\nCore logic only — UI/config-selector changes skipped.\n\n- Add autoload field to PackageFilter and PackageSource types\n- Add findAutoloadDeltaBase() to resolve autoload=false project entries\n to their user-scope base source for installation\n- Refactor dedupePackages to preserve autoload=false \n[…]\nntries\n- Add applyPackageDeltaFilter + applyAutoloadDisabledPatterns for\n incremental resource loading from autoload=false packages\n- Update source resolution loop to use resolvedSource/resolvedScope",
"is_bot": false,
"headline": "fix: improve project-local pi config autoload support (upstream c8ada…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T05:10:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5f129a209dd80393ae9658e68988f5da1c63dac3",
"body": "Show 'Hint: Start without extensions using \"pi -ne\".' when extension\nload failures are present in diagnostics.",
"is_bot": false,
"headline": "fix: hint when extensions fail to load (upstream 192fcccd)",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T05:05:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d3da3fb619b0804bc9bb6c37f374c6474b03e367",
"body": "Add extension factory cache keyed by path with cwd-aware invalidation.\nclearExtensionCache() is called on resource-loader reload to ensure\nfresh state. Session switches within the same cwd now skip re-importing\nextension modules via jiti.\n\nCloses #5905.",
"is_bot": false,
"headline": "fix: cache extension imports for session switches (upstream 5505316e)",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T05:04:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1dc27e29fc7244416a12fae2108539e69a388b86",
"body": "Source code for counting custom messages in compaction budget was\nalready applied. Add the missing test case and CustomMessageEntry helper.",
"is_bot": false,
"headline": "test: add custom message compaction budget test (upstream a6f720e6)",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T05:01:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a3fed628c163df04a7442285bc1ce4b880993cd4",
"body": "…ing tool refresh (upstream e547bb9f, fd6659dd)\n\nAdd _installAgentNextTurnRefresh() using prepareNextTurnWithContext to\ninject current tools/systemPrompt/model/thinkingLevel before each turn.\n\nAdd _systemPromptOverride to preserve before_agent_start system prompt\noverrides when tools change mid-run via setActiveTools. Override is\ncleared at the end of each prompt run.\n\nCloses #6162: extension-modified system prompt was lost when\n_refreshToolRegistry rebuilt the base prompt mid-run.",
"is_bot": false,
"headline": "fix: refresh session state before next turn + preserve run prompt dur…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T04:59:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d617fe80c9dc264af2f347b0e2cef5ecbae3d4be",
"body": "… 8c0ccd14)\n\nNormalize null/missing content to empty array in message_end extension\nreplacements. The other ingestion points (custom messages, session entry\nloading) were already covered by prior merges.\n\nAdd lax-message-content.test.ts covering all normalization paths.",
"is_bot": false,
"headline": "fix: normalize null message content at ingestion boundaries (upstream…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T04:57:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57203a2d61952eed22d976b6cddeca57b36f13ce",
"body": "Refactor timings.ts to support namespaced timing groups (main/extensions).\nAdd time() calls in loader.ts for module import and factory phases.\nCall resetTimings('extensions') at the start of resource-loader reload.",
"is_bot": false,
"headline": "fix: preserve extension timing measurements (upstream 0bdbe7c5)",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T04:55:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8cc5080bd0212e71a19606819a797110f4884289",
"body": "…ettled test assertions\n\n- loader.ts: add resolveModuleEntry() fallback for ESM-only packages\n (pi-agent-core, pi-ai/compat, pi-ai/oauth) when import.meta.resolve\n is unavailable under vitest SSR; align getAliases to use\n resolveWorkspaceOrImport for all upstream packages\n- agent-session-retry-events.test.ts: add agent_settled to expected\n event arrays, use eventsOfType + last-event assertions matching\n upstream exactly",
"is_bot": false,
"headline": "fix: resolve vitest SSR import.meta.resolve failure and align agent_s…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T04:43:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d15995c423e80ee2e83e21ba1df030032676fb1",
"body": "…rences to upstream packages, remove deleted workspace packages from publish list",
"is_bot": false,
"headline": "fix: browser-smoke, publish scripts — update pi-ai/pi-agent-core refe…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T02:26:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "13063565f4bbc38e1c737b4256c07e484456a882",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.11.0",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T02:21:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f71e8a88a2bd53ceeec028370b0074fa010f87e9",
"body": "…or getEntries() aggregation",
"is_bot": false,
"headline": "fix: update vitest config for upstream npm packages, fix stats test f…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T02:16:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "56f7d88311bfe4a2ceeb46ad6bd186cdafa68612",
"body": "…lign Extension API with upstream, sync compaction/agent-session behavior",
"is_bot": false,
"headline": "merge: feat/replace-upstream-deps — remove local ai/agent packages, a…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T01:58:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "202f58351c13f88858a0de755d3d20f83d8bdd31",
"body": "… (session_info_changed, before_provider_headers, agent_settled, registerEntryRenderer, compaction reason/willRetry, package scope update)",
"is_bot": false,
"headline": "docs: update extensions.md and packages.md for upstream API additions…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-16T00:49:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "54378dc2b303504f14962710c5a0ed0fed594094",
"body": "…5-B9 (env, reload options, null content, isIdle, waitForIdle, getStats)",
"is_bot": false,
"headline": "refactor: align agent-session compaction auth with upstream — B1-B3,B…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T17:35:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "05009bd48bc68cacb3fb54ce53698714ba98ceae",
"body": "…emain (pi-ai→compat, pi-tui→schovest)",
"is_bot": false,
"headline": "refactor: replace types.ts with upstream — only 2 import path diffs r…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T16:59:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fbf3d7e9ed88ae10c6767eb315743e0e13596dd9",
"body": "…sed it, SDK export is sufficient",
"is_bot": false,
"headline": "refactor: remove convertToLlm from ExtensionAPI — upstream never expo…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T16:56:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "518e0dd88643123763a78a9dec8ad28030fd64b5",
"body": "…ensions, add interactive-mode handler, forward session_info_changed to extensions",
"is_bot": false,
"headline": "fix: implement agent_settled mechanism — track run state, emit to ext…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T16:35:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2eadc09f5e95f66ccaa75f8e3c8aa22800edf916",
"body": "…try fields",
"is_bot": false,
"headline": "fix: backport ExtensionEvent union entries + compaction reason/willRe…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T16:24:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e051f686177a06577cdbd6ed3c3def9266e60e5e",
"body": "…ent, BeforeProviderHeadersEvent, AgentSettledEvent, registerEntryRenderer",
"is_bot": false,
"headline": "feat: backport upstream ExtensionAPI additions — SessionInfoChangedEv…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T16:12:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f212e5c27caed411051ce419afccedd495dafd20",
"body": null,
"is_bot": false,
"headline": "docs: update architecture.md for external ai/agent as npm deps",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T13:52:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "78854b8b58c3bc893476a4e9b6c159f6e6cf673e",
"body": null,
"is_bot": false,
"headline": "chore: biome auto-fix + shrinkwrap update",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T13:50:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d69b22c6a91968aa319dbf404bd3743ebe441fe",
"body": "…duplicate key, test imports",
"is_bot": false,
"headline": "fix: resolve type errors — ThinkingLevel max, Plan dead code, loader …",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T13:50:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c0da8465a5a563d1028146e060f6fd36ff5fe26e",
"body": "…ackages",
"is_bot": false,
"headline": "refactor: update loader VIRTUAL_MODULES and getAliases for upstream p…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T13:22:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c9fdd06ac1d27c2d56701de13ac732203b3bc171",
"body": "… @schovest/pi-agent-core → @earendil-works/pi-agent-core",
"is_bot": false,
"headline": "refactor: replace all @schovest/pi-ai → @earendil-works/pi-ai/compat,…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T13:21:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce6c332aa5ec839ae3f9cd03483c47124dd3c656",
"body": null,
"is_bot": false,
"headline": "refactor: move SubagentRunEntry from agent-core to coding-agent",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T13:20:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8379c5282b822acd4ad4a6994035c69a2b007d75",
"body": "…l-works/*",
"is_bot": false,
"headline": "refactor: remove local ai/agent packages, depend on upstream @earendi…",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T13:19:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "50f47bbf31d41c793a79661f883f8378d2360f90",
"body": null,
"is_bot": false,
"headline": "release v0.10.2: 版本升级流程简化 + 扩展版本同步 + install/update 改进",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T12:01:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0324b9c72db045ba06a5908efbebdc6b8a4e2e69",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.10.2",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T12:00:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "27595dca9b2f90066e4792f746928b9d5f00e257",
"body": null,
"is_bot": false,
"headline": "chore: sync example extensions version to 0.10.1",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T11:56:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d6f38df98bfb08f3207dcf67b4d6ed62d9d7e371",
"body": null,
"is_bot": false,
"headline": "docs: 版本升级流程简化为 npm run version:<level>",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T11:53:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8103755745bc746e12c82aa048aee55d40e3487e",
"body": "- 后台命令完成通知从 followUp 改为 steer 队列\n- install.sh 交互式安装目录选择 + 持久化\n- update.sh 三级目录检测(配置→符号链接→默认)\n- update.sh 不再随包落地, pi self-update 始终从 GitHub 拉取\n- pi self-update --force 通过 PI_FORCE_UPDATE=1 正确传递\n- README 精简安装命令",
"is_bot": false,
"headline": "release v0.10.1: install/update flow 改进, 后台命令 steer 队列, update.sh 精简",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T11:27:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eea6825c32877916457ed01303a2b3d65b9caf3c",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.10.1",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T11:25:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "67c5de10ddf2aba4474bbce87ad22a4924d0d681",
"body": "- Background command completion: switch from followUp to steer queue for\n more timely agent notification\n- Install: interactive directory selection on fresh install, persisted to\n ~/.pi/agent/.install-prefix\n- Update: three-level install prefix detection (config file → symlink →\n default) to corr\n[…]\nself-update always fetches\n the latest from GitHub\n- pi self-update --force: properly passes PI_FORCE_UPDATE=1 to update.sh\n- README: single curl|bash install command, remove npm and upstream install",
"is_bot": false,
"headline": "feat: improve install/update flow and background command notification",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T11:22:08Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8c32fefa2c08fdff724a48ef97e689f46786ac81",
"body": null,
"is_bot": false,
"headline": "fix: CI verify 排除 models.ts",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T10:24:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "40c06cf8c52a6de8f460de570bf548340bf1b4ab",
"body": null,
"is_bot": false,
"headline": "fix: CI verify 步骤排除 *.models.ts 自动生成文件",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T10:24:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "62588724acf6002791ae4679139b79c4c351a399",
"body": null,
"is_bot": false,
"headline": "fix: ai/test 全部测试通过",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T10:18:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f9f9b06471b09d388b0a71ef9157caf115e37219",
"body": "17 个测试失败均为上游模型元数据变更导致期望值不匹配:\n- anthropic-adaptive-thinking-models: 新增 claude-sonnet-5\n- supports-xhigh: Opus 4.6/DeepSeek thinking level 变更\n- github-copilot-oauth: models fetch URL mock 更新\n- lazy-module-load: streamSimpleAnthropic 导入路径\n- openai-completions-empty-tools: Cloudflare/maxTokens 行为变更\n- openai-responses-copilot-provider: cost multiplier 变更\n- openai-responses-partial-json-cleanup: terminal event 检查",
"is_bot": false,
"headline": "fix: 同步上游 ai/test 全部测试文件修复断言不匹配",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T10:18:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42dedf640cc3f37b9ca94d7f192f05a32332a6ff",
"body": null,
"is_bot": false,
"headline": "fix: ai/test 全部测试文件编译通过",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T10:12:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2963b721ccf0815f76ba0a0065b647b7592493dd",
"body": "修复 tsgo --noEmit 全量检查(含 test)的编译错误:\n- streamAnthropic → stream as streamAnthropic\n- getModel/getModels → 从 compat.ts 导入\n- chatTemplateKwargs 类型补全\n- cache-retention stream 变量修复",
"is_bot": false,
"headline": "fix: 同步上游 packages/ai/test 全部测试文件",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T10:12:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "04c2cb54db2e73dccefe03a480877d76a1537a56",
"body": null,
"is_bot": false,
"headline": "fix: CI build 后 biome format models 文件",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T10:06:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ed6a3467a3f037c32c16996012272d960325284a",
"body": "CI 构建时 generate-models 生成文件格式不符合 biome,\n在 build 脚步中添加 biome format --write 修正",
"is_bot": false,
"headline": "fix: models 文件格式化 + build 脚本自动 biome format",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T10:06:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "88173658eb055662378204e759c68a0333f17a7b",
"body": null,
"is_bot": false,
"headline": "fix: biome check 零错误零警告",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T09:59:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f2e9889c33dc840f09afab3516d2b18312a4f5db",
"body": null,
"is_bot": false,
"headline": "fix: 移除 compaction.test.ts 未使用的 estimateContextTokens 导入",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-15T09:59:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b394f22e1c1df03ea14414686114926759350fdf",
"body": null,
"is_bot": false,
"headline": "fix: biome check 零错误",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T17:35:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4b678d655951295554adebfdccf71c97275f95ed",
"body": null,
"is_bot": false,
"headline": "fix: google-vertex test 恢复 streamGoogleVertex 导入避免变量名冲突",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T17:35:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "60983da0b279c813824df25ed1ec97133f0fc854",
"body": null,
"is_bot": false,
"headline": "fix: biome format/lint 修复",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T17:33:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2f0145cd407585f10f78f4b734b18cdbadeec5b6",
"body": null,
"is_bot": false,
"headline": "fix: biome format/lint 修复 test 文件",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T17:33:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5e9a3cdc0f6edb03fdc3239f016c80c21a36637d",
"body": null,
"is_bot": false,
"headline": "fix: biome import sort",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T17:26:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "de72a1d8b85cda8013263b08cefad010d7282a37",
"body": null,
"is_bot": false,
"headline": "fix: biome import sort index.ts",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T17:26:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "540328de9db46b403143bbdf80da93f0f1af7995",
"body": null,
"is_bot": false,
"headline": "docs: AGENTS.md 严禁添加 upstream remote / fetch 上游 tag",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T17:14:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cc157fbd93650155762378d2be159e18113dad3b",
"body": null,
"is_bot": false,
"headline": "release v0.10.0: 上游合并 108 项修复/功能,架构迁移至 api/+providers/ 分离模式",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T17:05:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d83e4fd0d3891ce269c997349b221a78cfa8cfa1",
"body": "- index.ts 重新导出 findEnvKeys/getEnvApiKey\n- auth-storage.ts 改回 @schovest/pi-ai (主入口)\n- register-bedrock.ts 保持 /compat (setBedrockProviderModule 仅在 compat)\n- pi-ai package.json 保留 require 条件",
"is_bot": false,
"headline": "fix: auth-storage 改回主入口导入避免 /compat 子路径解析问题",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T17:01:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "83b52cc915ab9278afcee5b51598046bad7a2e9e",
"body": "扩展 loader 使用 createRequire (CJS) 加载模块, exports 缺少 require\n条件导致回退到 main 字段路径解析 (dist/index.js/compat)",
"is_bot": false,
"headline": "fix: pi-ai exports 添加 require 条件修复扩展加载错误",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T16:52:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eebace83ce91a075224aa27312eef7e17d546136",
"body": null,
"is_bot": false,
"headline": "chore: bump version to 0.10.0",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T16:47:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "50793ff593877899cf0b5b1340d462b27e124f9e",
"body": "- package-command-paths: 创建 trust-requiring 资源(skills)而非 bare .pi\n- trust-manager: 移除祖先依赖的 false 断言,验证增量检测\n- file-operations: 大文件测试 30s 超时",
"is_bot": false,
"headline": "test: 修复预存测试失败 — 适配本地信任模型和路径检测",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T16:38:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "343a3281fd541c54257a19195c563d8f43812982",
"body": "- _overflowRecoveryAttempts + MAX_OVERFLOW_RECOVERY → _overflowRecoveryAttempted\n- 错误消息: multiple → one compact-and-retry attempt\n- 同步 file-operations 测试(大文件超时仍为预存问题)\n\ncompaction 相关 2 测试现在通过",
"is_bot": false,
"headline": "fix: overflow recovery 从多重重试改为单次重试,匹配上游",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T15:57:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "511b117ccf08695aee8a5c7cb6592a00fd7b626f",
"body": "- agent-session: overflow 成功响应(stopReason=stop)不 retry (6b9f3f49)\n- main: --session-id 找不到时 warn 而非静默创建 (c4281a7d)\n- 同步 3 个上游测试文件\n\n已知: 2 个 compaction 测试因本地多重重试策略(_overflowRecoveryAttempts)与上游单次策略(_overflowRecoveryAttempted)差异而失败,非 bug",
"is_bot": false,
"headline": "fix: 同步上游 overflow retry + session-id warning 生产代码和测试",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T15:10:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "461bfd6fa1cec4fb457e9c0a44b47251fea95287",
"body": null,
"is_bot": false,
"headline": "test: 修复上游测试文件 @schovest import 路径",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T14:39:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b8ae08fd809cce079dc000e2d6e0989ad08fbe14",
"body": null,
"is_bot": false,
"headline": "fix: --session-id 允许与 --no-session 组合 (D5 遗漏项)",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T14:38:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ae808327d95dd12dccfda75d3dce4feecc884cb3",
"body": "- suite/agent-session-compaction: keepRecentTokens:1 适配空守卫\n- agent-session-auto-compaction-queue: 适配空守卫返回\n- session-id-readonly: 新增 --no-session --session-id 测试\n- file-operations: throw/preserve 替代 truncate 行为",
"is_bot": false,
"headline": "test: 同步上游测试文件适配 C2/D4/D5 行为变更",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T14:34:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c278c242dd92fd03293502a76d2ed59e41e137ea",
"body": null,
"is_bot": false,
"headline": "docs: 更新 CHANGELOG 记录上游合并完成",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T14:26:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3aaddbe53538ea457a0b262cb0a978a98f67609b",
"body": "E9: Windows 项目 context 文件发现 (dirname 替代 resolve(..))\nE1-E8: 已由模块A api/+providers/ 迁移覆盖\n - E1: session switch 复用扩展模块 ✅\n - E2/E7: length stop / truncated tool calls (local guard system)\n - E3/E8: retry stream errors / Bun socket-drop (api/ provider files)\n - E4/E5: gRPC/Cloudflare retry (api/ provider files)\n - E6: null content normalization (api/openai-completions.ts)\n\nG (Extension API): 已由模块A 迁移 + 本地扩展系统覆盖\n其他 Provider/UX/SDK 项: 已由模块A 基础设施迁移覆盖\n\nCSV 全部 108/108 标记完成",
"is_bot": false,
"headline": "fix: 完成上游合并 — 模块E+G (Stability + Extension + 剩余项)",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T14:25:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca1159284dbadbac7bad7ab7415888f2576e9695",
"body": "H1: RPC 新增 get_entries/get_tree 命令 + rpc-types 类型定义\nH2: JSONL session metadata — 已本地等价 ✅\nH3: 安全依赖版本 — 已本地匹配 ✅\n\nCSV 标记 3 项为 已合并-H",
"is_bot": false,
"headline": "fix(misc): 合并上游 Misc 修复 — 模块H",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T14:21:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e624706cb9e6f941935ab8d3aa27f7d542a1d490",
"body": "F1: fuzzy edit 保留未触碰行块 (edit-diff.ts 大重写)\nF2: WSL bash.exe stdin transport (shell.ts: isLegacyWslBashPath)\nF3: find 移除 --no-require-git (fd 默认层级 gitignore)\nF4: edit schema 移除 additionalProperties 约束\n\nCSV 标记 4 项为 已合并-F",
"is_bot": false,
"headline": "fix(tools): 合并上游 Tools 修复 — 模块F",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T14:18:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "38f2c41152ad52c491548f5cad8793cf97d3023b",
"body": "D1: getTree() 线性复杂度 — 已本地等价 ✅\nD2: session selector 按子树 latestActivity 排序\nD3: resource notifications 顺序 — 已本地一致 ✅\nD4: 拒绝非空无效 session 文件 (statSync check + openSessionOrExit)\nD5: --no-session --session-id 确定性 ID 传递\n\nCSV 标记 5 项为 已合并-D",
"is_bot": false,
"headline": "fix(session): 合并上游 Session 修复 — 模块D",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T14:13:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e57a8396ceae7970a70e2838bd41998edca746d",
"body": "C1: post-compaction token 估算 (estimatedTokensAfter)\n - CompactionResult 新增 estimatedTokensAfter 字段\n - 手动/自动 compaction 后计算并回传\n\nC2: 拒绝空 compaction summary\n - prepareCompaction() 空 messagesToSummarize 时返回 undefined\n - 同步更新测试: beDefined → toBeUndefined\n\nC3: assistantIsFromBeforeCompaction 守卫 — 已本地存\n[…]\nContextMessages\n\nC5: post-compaction output budget 忽略陈旧 usage\n - getAssistantUsage 新增 calculateContextTokens > 0 校验\n\n附加: pi-ai package.json 新增 ./compat ./providers/* ./api/* exports\nCSV 标记 5 项为 已合并-C",
"is_bot": false,
"headline": "fix(compaction): 合并上游 Compaction 修复 — 模块C",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T13:53:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ba808cc46e7c41526f66bec7f32fb3c3d76ca936",
"body": "模型生成已在模块A完成,本模块验证关键新模型/元数据:\n- Claude Sonnet 5 / Fable 5 xhigh/max thinking ✅\n- GPT-5.5/5.6 + 输入分级定价 + Codex 372K ✅\n- Fireworks/OpenRouter GLM-5.2 + reasoning_effort ✅\n- chat-template thinking kwargs ✅\n- Z.AI preserved thinking ✅\n- 编译零错误\n\nCSV 标记 18 项为 已合并-B",
"is_bot": false,
"headline": "feat: 上游 Provider 模型数据更新 — 模块B验证",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T13:32:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f5e85b9b7dc20a8e48dcb5c415afda1231c6260f",
"body": "- custom-provider-gitlab-duo: streamSimpleXxx 从 @schovest/pi-ai/compat 导入\n- sdk-openrouter-attribution.test: headers 类型断言修正",
"is_bot": false,
"headline": "fix: 修复遗漏的 coding-agent 示例/测试 import 适配",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T13:31:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0ae3fae92614b3155bbf2a458a46012a25de89d9",
"body": "60 test files: models.ts → compat.ts, providers/ → api/ 路径调整",
"is_bot": false,
"headline": "refactor: 修复测试文件 import 路径适配模块A新架构",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T13:27:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "78bc438913ca4ed00afb5c9e4fa8f288cb1f45c6",
"body": "核心变更:\n- 新增 api/ 目录 (28 文件): API 实现 + lazy 包装器\n- 新增 auth/ 目录 (5 文件): 认证上下文/凭据存储\n- 替换 providers/ 为工厂函数 (~73 文件)\n- 运行 generate-models.ts 生成 35 个 .models.ts\n- 替换 models.ts 为 Provider/Models/createProvider 抽象\n- 新增 compat.ts/legacy-api-aliases.ts: 旧 API 兼容\n- 替换 index.ts(50行)/types.ts/utils.ts 等基础设施\n- 修复 coding-agent/agent 包 import 适配\n- 源码编译零错误 (tsgo --noEmit 排除test)\n- models.generated.ts: 18k行 -> 聚合文件\n\n已知: packages/ai/test/ 需单独迁移(import路径变更)",
"is_bot": false,
"headline": "refactor: 迁移 Provider 架构到上游 api/+providers/ 分离模式 (模块A)",
"author_name": "Luokxy",
"author_login": null,
"committed_at": "2026-07-14T10:16:14Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 15,
"commits_last_year": 4868,
"latest_release_at": "2026-07-17T04:18:27Z",
"latest_release_tag": "v0.11.3",
"releases_from_tags": false,
"days_since_last_push": 4,
"active_weeks_last_year": 49,
"days_since_latest_release": 4,
"mean_days_between_releases": 0.8
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 71,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "@schovest/pi-tui",
"exists": true,
"license": "MIT",
"keywords": [
"tui",
"terminal",
"ui",
"text-editor",
"differential-rendering",
"typescript",
"cli"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@schovest/pi-tui",
"is_deprecated": false,
"latest_version": "0.11.3",
"repository_url": "https://github.com/schovest/pi",
"versions_count": 14,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 2127,
"first_published_at": "2026-07-06T16:51:40.341000Z",
"latest_published_at": "2026-07-17T04:20:42.588000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 4
},
{
"name": "@schovest/pi-coding-agent",
"exists": true,
"license": "MIT",
"keywords": [
"coding-agent",
"ai",
"llm",
"cli",
"tui",
"agent"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@schovest/pi-coding-agent",
"is_deprecated": false,
"latest_version": "0.11.3",
"repository_url": "https://github.com/schovest/pi",
"versions_count": 14,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 1870,
"first_published_at": "2026-07-06T16:51:47.680000Z",
"latest_published_at": "2026-07-17T04:20:48.776000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 4
}
]
},
"popularity": {
"forks": 0,
"stars": 2,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [
{
"date": "2026-07-07",
"count": 2
}
],
"complete": true,
"collected": 2,
"total_stars": 2
},
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 221006,
"source_files_sampled": 520,
"oversized_source_files": 8,
"agent_instruction_files": [
"AGENTS.md"
],
"agent_instruction_max_bytes": 12103
},
"dependencies": {
"manifests": [
"package.json"
],
"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": [
"npm"
],
"dependencies": [
{
"name": "@earendil-works/pi-agent-core",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "0.80.6"
},
{
"name": "@earendil-works/pi-ai",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "0.80.6"
},
{
"name": "@schovest/pi-tui",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "^0.11.3"
},
{
"name": "@silvia-odwyer/photon-node",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "0.3.4"
},
{
"name": "chalk",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "5.6.2"
},
{
"name": "cross-spawn",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "7.0.6"
},
{
"name": "diff",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "8.0.4"
},
{
"name": "glob",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "13.0.6"
},
{
"name": "highlight.js",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "10.7.3"
},
{
"name": "hosted-git-info",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "9.0.3"
},
{
"name": "ignore",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "7.0.5"
},
{
"name": "jiti",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "2.7.0"
},
{
"name": "minimatch",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "10.2.5"
},
{
"name": "proper-lockfile",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "4.1.2"
},
{
"name": "typebox",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "1.1.38"
},
{
"name": "undici",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "8.3.0"
},
{
"name": "yaml",
"manifest": "packages/coding-agent/package.json",
"ecosystem": "npm",
"version_constraint": "2.9.0"
},
{
"name": "get-east-asian-width",
"manifest": "packages/tui/package.json",
"ecosystem": "npm",
"version_constraint": "1.6.0"
},
{
"name": "marked",
"manifest": "packages/tui/package.json",
"ecosystem": "npm",
"version_constraint": "15.0.12"
}
],
"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": 0,
"merged_prs": 0,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "badlogic",
"commits": 3334,
"avatar_url": "https://avatars.githubusercontent.com/u/514052?v=4"
},
{
"type": "User",
"login": "mitsuhiko",
"commits": 195,
"avatar_url": "https://avatars.githubusercontent.com/u/7396?v=4"
},
{
"type": "User",
"login": "hjanuschka",
"commits": 66,
"avatar_url": "https://avatars.githubusercontent.com/u/2891702?v=4"
},
{
"type": "User",
"login": "aliou",
"commits": 56,
"avatar_url": "https://avatars.githubusercontent.com/u/980367?v=4"
},
{
"type": "User",
"login": "markusylisiurunen",
"commits": 44,
"avatar_url": "https://avatars.githubusercontent.com/u/8409947?v=4"
},
{
"type": "User",
"login": "Perlence",
"commits": 43,
"avatar_url": "https://avatars.githubusercontent.com/u/1044300?v=4"
},
{
"type": "User",
"login": "nicobailon",
"commits": 33,
"avatar_url": "https://avatars.githubusercontent.com/u/2958133?v=4"
},
{
"type": "User",
"login": "haoqixu",
"commits": 25,
"avatar_url": "https://avatars.githubusercontent.com/u/9400582?v=4"
},
{
"type": "User",
"login": "cristinaponcela",
"commits": 21,
"avatar_url": "https://avatars.githubusercontent.com/u/140309543?v=4"
},
{
"type": "User",
"login": "ferologics",
"commits": 21,
"avatar_url": "https://avatars.githubusercontent.com/u/5576161?v=4"
}
],
"contributors_sampled": 99,
"top_contributor_share": 0.792
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"approve-contributor.yml",
"build-binaries.yml",
"ci.yml",
"issue-gate.yml",
"npm-audit.yml",
"openclaw-gate.yml",
"pr-gate.yml"
],
"has_docs_dir": true,
"linter_configs": [
"biome.json"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"package-lock.json"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 5,
"reason": "binaries present in source code",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": null,
"reason": "no pull request found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 40 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 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": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 4,
"reason": "dependency not pinned by hash detected -- score normalized to 4",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "no SAST tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 10,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "18 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "d2f3f898b3d75dcb93b35f78cd83f792258f2575",
"ran_at": "2026-07-21T22:42:25Z",
"aggregate_score": 2.6,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-21T12:50:46Z",
"oldest_open_prs": [],
"last_merged_pr_at": null,
"ci_last_conclusion": "FAILURE",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/schovest/pi",
"host": "github.com",
"name": "pi",
"owner": "schovest"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 54,
"inputs": {
"security": 26,
"vitality": 89,
"community": 40,
"governance": 36,
"engineering": 74
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 89,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 88,
"inputs": {
"commits_last_year": 4868,
"human_commit_share": 1,
"days_since_last_push": 4,
"active_weeks_last_year": 49
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 4 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 4
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "49/52 weeks with commits",
"points": 33.9,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 49
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "4868 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 4868
}
}
],
"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": 15,
"latest_release_tag": "v0.11.3",
"releases_from_tags": false,
"days_since_latest_release": 4,
"mean_days_between_releases": 0.8
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "15 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 15
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 4 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 4
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~0.8 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 0.8
}
}
],
"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": "at_risk",
"name": "Community & Adoption",
"value": 40,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 2,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "below_threshold"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "2 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 2
}
}
],
"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": "good",
"name": "Community health",
"note": null,
"notes": [],
"value": 70,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"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": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 60,
"inputs": {
"packages": [
"@schovest/pi-tui",
"@schovest/pi-coding-agent"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 3997
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "3,997 downloads/month across npm",
"points": 48,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 3997,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "at_risk",
"name": "Sustainability & Governance",
"value": 36,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "at_risk",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 37,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 99,
"top_contributor_share": 0.792
},
"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 79% of commits",
"points": 4.7,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 79
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "99 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 99
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 40 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "critical",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution",
"pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 1,
"inputs": {
"merged_prs": 0,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 0
},
"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": "no decided pull requests or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_decided_prs_or_data",
"params": {}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "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": 17,
"inputs": {
"followers": 0,
"owner_type": "User",
"is_verified": null,
"owner_login": "schovest",
"public_repos": 2,
"account_age_days": 17
},
"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": "0 followers of schovest",
"points": 0,
"status": "missed",
"details": [
{
"code": "owner_followers",
"params": {
"count": 0,
"login": "schovest"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "2 public repos, account ~0 yr old",
"points": 3.6,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 2
}
},
{
"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": [
"@schovest/pi-tui",
"@schovest/pi-coding-agent"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 4
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "2 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 2,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 4 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 4
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "14 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 14
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 74,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 80,
"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": "7 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 7
}
}
],
"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": "biome.json",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "biome.json"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"topics": [],
"has_wiki": false,
"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": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "critical",
"name": "Security",
"value": 26,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "critical",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"packaging"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 26,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 2.6
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "binaries present in source code",
"points": 3.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 40 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "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 not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 4",
"points": 2,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "no SAST tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 5,
"status": "met",
"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": "18 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"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": 12
},
"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": 70,
"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.93,
"agent_instruction_files": [
"AGENTS.md"
],
"agent_instruction_max_bytes": 12103
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "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": "93 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 93,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 58,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"package-lock.json"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"tsconfig.json"
],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": "biome.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "biome.json"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "tsconfig.json"
}
}
],
"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": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 4",
"points": 4,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 99,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 221006,
"source_files_sampled": 520,
"oversized_source_files": 8
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "8/520 source files over 60KB",
"points": 54.2,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 520,
"oversized": 8
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": false,
"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": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"deps.dev does not index npm:@schovest/pi-tui@0.11.3; advisories assessed against the repository dependency graph instead"
],
"report_type": "repository",
"generated_at": "2026-07-21T22:42:40.940895Z",
"schema_version": "0.25.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/schovest/pi.svg",
"full_name": "schovest/pi",
"license_state": "standard",
"license_spdx": "MIT"
}