公开记录
软件健康报告模式 0.27.0 · 指标 1.13.0 · 2026-07-25 09:56 UTC

laurentftech / pi-outpost

WebUI for PI

TypeScriptMIT★ 4 星标⑂ 0 复刻始于 2026年7月在 GitHub 上查看 ↗

laurentftech/pi-outpost 的健康指数为 100 分中的 57 分,处于「中等」区间。 其得分最高的类别是Vitality(74/100),最低的是Community & Adoption(36/100)。 最近一次更新在今天。 近期的大部分工作由 1 位贡献者完成。

57
总分 / 100
中等

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 49(有风险)的上限。AI 就绪度不计入总体分。

57
优秀85-100堪称典范;基本满足所有检验标准
良好70-84健康;仅有轻微不足
中等50-69可接受,但存在明显不足;建议进行审查
存在风险30-49存在重大薄弱环节;采用时应保持审慎
危急1-29问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。

所有权

Laurent个人账户
6 关注者20 个公开仓库始于 2018年10月

该仓库由个人账户拥有。相较于组织支持的项目,单一所有者项目的延续性风险更高。

软件包生态系统

注册表软件包版本月下载量版本数最近发布标签
npmpi-outpost0.6.42,659185 天前picoding-agentaichatweb-uicli
npm@pi-outpost/embed0.6.41,41295 天前picoding-agentchatwidgetshadow-domreactembed

按类别列示的指标

活力

项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?

74良好 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 0 天前
2.1/36提交节奏 — 52 周中有 3 周有提交
18/18提交量 — 最近一年 195 次提交
0/10OpenSSF Scorecard:Maintained — project was created within the last 90 days. Please review its contents carefully
所用输入
commits_last_year195
human_commit_share1
days_since_last_push0
active_weeks_last_year3

发布纪律

100优秀
评分方式
27/27有发布版本 — 已发布 9 个发布版本
36/36发布时效 — 最近一次发布版本于 5 天前
27/27发布节奏 — 约每 0.8 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count9
latest_release_tagv0.6.4
releases_from_tags
days_since_latest_release5
mean_days_between_releases0.8
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?

36存在风险 · 占总体的 18%
评分方式
7.7/60星标 — 4 个星标
0/25复刻 — 0 个复刻
0/15关注者 — 0 位关注者
所用输入
forks0
stars4
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

50中等
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(MIT)
0/18CONTRIBUTING 指南
0/13.5行为准则
0/7.2议题模板
0/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template
评分方式
48.1/80月度下载量 — npm 合计每月 4,071 次下载
0/20注册表被依赖数 — 该生态系统不报告此项
所用输入
packagespi-outpost, @pi-outpost/embed
dependents
ecosystemsnpm
total_downloads
monthly_downloads4,071
已排除计分(无数据或不适用):注册表被依赖数。 其余权重已重新归一化。

可持续性与治理

项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?

52中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
4.2/22.5提交分布 — 头号贡献者编写了 82% 的提交
2.7/13.5贡献者广度 — 2 位贡献者
3/10OpenSSF Scorecard:Contributors — project has 1 contributing companies or organizations -- score normalized to 3
所用输入
bus_factor1
contributors_sampled2
top_contributor_share0.815
评分方式
23.4/46.8议题解决 — 50% 的议题已关闭
34.4/38.3PR 接受 — 已裁定的 PR 中 9/10 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/30 approved changesets -- score normalized to 0
所用输入
merged_prs9
open_issues3
closed_issues3
issue_closed_ratio0.5
closed_unmerged_prs1
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
6.1/25所有者影响力 — laurentftech 有 6 位关注者
21.6/25既往记录 — 20 个公开仓库,账户约 7 年
所用输入
followers6
owner_typeUser
is_verified
owner_loginlaurentftech
public_repos20
account_age_days2,841
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — npm 上有 2 个软件包
35/35发布时效 — 最近一次发布于 5 天前
20/20版本历史 — 18 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagespi-outpost, @pi-outpost/embed
ecosystemsnpm
any_deprecated
min_days_since_publish5

工程质量

基础的工程与文档实践是否到位?

71良好 · 占总体的 20%

工程实践

68中等
评分方式
24/24CI 工作流 — 2 个工作流
24/24存在测试
0/16Linter 配置
0/9.6Pre-commit 钩子
0/6.4.editorconfig
20/20OpenSSF Scorecard:CI-Tests — 1 out of 1 merged PRs checked by a CI test -- score normalized to 10
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config

文档

75良好
评分方式
30/30README
25/25文档目录
0/15文档 / 主页站点
10/10仓库描述
0/10主题标签
10/10Wiki
所用输入
topics
has_wiki
homepage
has_readme
has_docs_dir
has_description

安全

可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?

50中等 · 占总体的 16%

安全态势

43存在风险
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 1 out of 1 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5许可证 — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
1/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
5/5SAST — SAST tool is run on all commits
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — 无数据
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
0/7.5Vulnerabilities — 10 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4.3
已排除计分(无数据或不适用):signed_releases。 其余权重已重新归一化。
评分方式
14/35直接依赖不含已知公告 — 1 个受影响:@fastify/static 9.3.0 (high 7.5)
25/25间接依赖不含已知公告 — 没有间接依赖携带已知公告
40/40没有长期未处理的公告 — 没有公告公开超过 90 天
所用输入
sourceosv
advisories2
affected_packages1
assessed_packages206
unassessed_packages0
affected_by_severityhigh 1
direct_affected_packages1
比对的是 npm:pi-outpost@0.6.4 的运行时依赖闭包——安装已发布的软件包时真正被拉取进来的内容——共 206 个软件包。 未对可达性进行分析。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?这是一枚独立的实验性徽章——权重为 0.0,因此单独呈现,不影响总体健康评分。

62中等 · 占总体的 0%
评分方式
45/45代理指令 — AGENTS.md, CLAUDE.md
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 100 次人类提交中有 81 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.81
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes3,237
评分方式
0/18一条命令的引导启动
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — embed/tsconfig.json, server/tsconfig.json, web/tsconfig.json
10/10可复现环境 — lockfile
2/10已体现的代理实践 — 最近 100 次提交中有 1 次由代理编写或署名代理
0/8自动化维护 — 未观察到自动依赖更新
2/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
所用输入
has_nix
has_tests
lockfilespackage-lock.json
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
typecheck_configsembed/tsconfig.json, server/tsconfig.json, web/tsconfig.json
agent_commit_share0.01
toolchain_manifests
dependency_bot_commit_share0
评分方式
45/45可类型检查的代码 — TypeScript(静态类型)
53.6/55可控的文件大小 — 采样的 81 个源文件中有 2 个超过 60KB
所用输入
primary_languageTypeScript
largest_source_bytes6,851,374
source_files_sampled81
oversized_source_files2
评分方式
0/40API 模式(OpenAPI/GraphQL/proto)
20/20MCP 服务器
0/40可运行示例
所用输入
example_dirs
has_mcp_signal
api_schema_files

关键数据

4GitHub 星标
2贡献者
195最近 12 个月提交数
0距最近推送天数
9发布版本数
1巴士系数(bus factor)
3开放议题
npm软件包生态系统数

数据采集警告

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

更多细节

OpenSSF Scorecard 4.3 / 10
4.3综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-25 09:56 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests1 out of 1 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
2Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 2
10SASTSAST tool is run on all commits
0Security-Policysecurity policy file not detected
不适用Signed-Releasesno releases found
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
0Vulnerabilities10 existing vulnerabilities detected
直接依赖 23
注册表软件包版本约束清单文件
npm@earendil-works/pi-coding-agent^0.80.9cli/package.json
npm@fastify/static^9.3.0cli/package.json
npm@fastify/websocket^11.0.2cli/package.json
npmfastify^5.3.0cli/package.json
npmws^8.21.0cli/package.json
npmpi-outpost^0.6.4package.json
npm@earendil-works/pi-coding-agent^0.80.9server/package.json
npm@fastify/static^9.3.0server/package.json
npm@fastify/websocket^11.0.2server/package.json
npm@pi-outpost/shared*server/package.json
npmfastify^5.3.0server/package.json
npm@pi-outpost/shared*web/package.json
npm@tailwindcss/vite^4.3.2web/package.json
npmhighlight.js^11.11.1web/package.json
npmkatex^0.16.47web/package.json
npmmermaid^11.16.0web/package.json
npmreact^19.2.7web/package.json
npmreact-dom^19.2.7web/package.json
npmreact-markdown^10.1.0web/package.json
npmrehype-katex^7.0.1web/package.json
npmremark-gfm^4.0.1web/package.json
npmremark-math^6.0.0web/package.json
npmtailwindcss^4.3.2web/package.json
全部依赖 684

来自 GitHub 依赖图的完整解析依赖集合:35 个直接依赖与 649 个间接(传递)软件包。仓库提交锁文件时,传递闭包才是完整的。

注册表软件包版本关系
npm@earendil-works/pi-coding-agent0.80.9直接
npm@earendil-works/pi-coding-agent^0.80.9直接
npm@fastify/static9.3.0直接
npm@fastify/static^9.3.0直接
npm@fastify/websocket11.2.0直接
npm@fastify/websocket^11.0.2直接
npm@pi-outpost/shared*直接
npm@tailwindcss/vite4.3.2直接
npm@tailwindcss/vite^4.3.2直接
npmfastify5.10.0直接
npmfastify^5.3.0直接
npmhighlight.js10.7.3直接
npmhighlight.js11.11.1直接
npmhighlight.js^11.11.1直接
npmkatex0.16.47直接
npmkatex^0.16.47直接
npmmermaid11.16.0直接
npmmermaid^11.16.0直接
npmpi-outpost0.6.2直接
npmreact19.2.7直接
npmreact^19.2.7直接
npmreact-dom19.2.7直接
npmreact-dom^19.2.7直接
npmreact-markdown10.1.0直接
npmreact-markdown^10.1.0直接
npmrehype-katex7.0.1直接
npmrehype-katex^7.0.1直接
npmremark-gfm4.0.1直接
npmremark-gfm^4.0.1直接
npmremark-math6.0.0直接
npmremark-math^6.0.0直接
npmtailwindcss4.3.2直接
npmtailwindcss^4.3.2直接
npmws8.21.0直接
npmws^8.21.0直接
npm@antfu/install-pkg1.1.0间接
npm@anthropic-ai/sdk0.91.1间接
npm@aws-crypto/crc325.2.0间接
npm@aws-crypto/sha256-browser5.2.0间接
npm@aws-crypto/sha256-js5.2.0间接
npm@aws-crypto/supports-web-crypto5.2.0间接
npm@aws-crypto/util5.2.0间接
npm@aws-sdk/client-bedrock-runtime3.1048.0间接
npm@aws-sdk/core3.974.11间接
npm@aws-sdk/credential-provider-env3.972.37间接
npm@aws-sdk/credential-provider-http3.972.39间接
npm@aws-sdk/credential-provider-ini3.972.41间接
npm@aws-sdk/credential-provider-login3.972.41间接
npm@aws-sdk/credential-provider-node3.972.42间接
npm@aws-sdk/credential-provider-process3.972.37间接
npm@aws-sdk/credential-provider-sso3.972.41间接
npm@aws-sdk/credential-provider-web-identity3.972.41间接
npm@aws-sdk/eventstream-handler-node3.972.16间接
npm@aws-sdk/middleware-eventstream3.972.12间接
npm@aws-sdk/middleware-websocket3.972.19间接
npm@aws-sdk/nested-clients3.997.9间接
npm@aws-sdk/signature-v4-multi-region3.996.27间接
npm@aws-sdk/token-providers3.1048.0间接
npm@aws-sdk/types3.973.8间接
npm@aws-sdk/util-locate-window3.965.5间接
npm@aws-sdk/xml-builder3.972.24间接
npm@aws/lambda-invoke-store0.2.4间接
npm@babel/runtime7.29.2间接
npm@braintree/sanitize-url7.1.2间接
npm@chevrotain/types11.1.2间接
npm@earendil-works/pi-agent-core0.80.9间接
npm@earendil-works/pi-ai0.80.9间接
npm@earendil-works/pi-tui0.80.9间接
npm@emnapi/core1.11.1间接
npm@emnapi/runtime1.11.1间接
npm@emnapi/wasi-threads1.2.2间接
npm@esbuild/aix-ppc640.28.1间接
npm@esbuild/android-arm0.28.1间接
npm@esbuild/android-arm640.28.1间接
npm@esbuild/android-x640.28.1间接
npm@esbuild/darwin-arm640.28.1间接
npm@esbuild/darwin-x640.28.1间接
npm@esbuild/freebsd-arm640.28.1间接
npm@esbuild/freebsd-x640.28.1间接
npm@esbuild/linux-arm0.28.1间接
npm@esbuild/linux-arm640.28.1间接
npm@esbuild/linux-ia320.28.1间接
npm@esbuild/linux-loong640.28.1间接
npm@esbuild/linux-mips64el0.28.1间接
npm@esbuild/linux-ppc640.28.1间接
npm@esbuild/linux-riscv640.28.1间接
npm@esbuild/linux-s390x0.28.1间接
npm@esbuild/linux-x640.28.1间接
npm@esbuild/netbsd-arm640.28.1间接
npm@esbuild/netbsd-x640.28.1间接
npm@esbuild/openbsd-arm640.28.1间接
npm@esbuild/openbsd-x640.28.1间接
npm@esbuild/openharmony-arm640.28.1间接
npm@esbuild/sunos-x640.28.1间接
npm@esbuild/win32-arm640.28.1间接
npm@esbuild/win32-ia320.28.1间接
npm@esbuild/win32-x640.28.1间接
npm@fastify/accept-negotiator2.0.1间接
npm@fastify/ajv-compiler4.0.5间接
npm@fastify/error4.2.0间接
npm@fastify/fast-json-stringify-compiler5.1.0间接
npm@fastify/forwarded3.0.1间接
npm@fastify/merge-json-schemas0.2.1间接
npm@fastify/proxy-addr5.1.0间接
npm@fastify/send4.1.0间接
npm@google/genai1.52.0间接
npm@iconify/types2.0.0间接
npm@iconify/utils3.1.4间接
npm@jridgewell/gen-mapping0.3.13间接
npm@jridgewell/remapping2.3.5间接
npm@jridgewell/resolve-uri3.1.2间接
npm@jridgewell/sourcemap-codec1.5.5间接
npm@jridgewell/trace-mapping0.3.31间接
npm@lukeed/ms2.0.2间接
npm@mariozechner/clipboard0.3.9间接
npm@mariozechner/clipboard-darwin-arm640.3.9间接
npm@mariozechner/clipboard-darwin-universal0.3.9间接
npm@mariozechner/clipboard-darwin-x640.3.9间接
npm@mariozechner/clipboard-linux-arm64-gnu0.3.9间接
npm@mariozechner/clipboard-linux-arm64-musl0.3.9间接
npm@mariozechner/clipboard-linux-riscv64-gnu0.3.9间接
npm@mariozechner/clipboard-linux-x64-gnu0.3.9间接
npm@mariozechner/clipboard-linux-x64-musl0.3.9间接
npm@mariozechner/clipboard-win32-arm64-msvc0.3.9间接
npm@mariozechner/clipboard-win32-x64-msvc0.3.9间接
npm@mermaid-js/parser1.2.0间接
npm@microsoft/api-extractor7.58.9间接
npm@microsoft/api-extractor^7.58.9间接
npm@microsoft/api-extractor-model7.33.8间接
npm@microsoft/tsdoc0.16.0间接
npm@microsoft/tsdoc-config0.18.1间接
npm@mistralai/mistralai2.2.6间接
npm@napi-rs/wasm-runtime1.1.6间接
npm@nodable/entities2.1.0间接
npm@opentelemetry/api1.9.0间接
npm@opentelemetry/semantic-conventions1.41.1间接
npm@oxc-project/types0.138.0间接
npm@oxlint/binding-android-arm-eabi1.73.0间接
npm@oxlint/binding-android-arm641.73.0间接
npm@oxlint/binding-darwin-arm641.73.0间接
npm@oxlint/binding-darwin-x641.73.0间接
npm@oxlint/binding-freebsd-x641.73.0间接
npm@oxlint/binding-linux-arm-gnueabihf1.73.0间接
npm@oxlint/binding-linux-arm-musleabihf1.73.0间接
npm@oxlint/binding-linux-arm64-gnu1.73.0间接
npm@oxlint/binding-linux-arm64-musl1.73.0间接
npm@oxlint/binding-linux-ppc64-gnu1.73.0间接
npm@oxlint/binding-linux-riscv64-gnu1.73.0间接
npm@oxlint/binding-linux-riscv64-musl1.73.0间接
npm@oxlint/binding-linux-s390x-gnu1.73.0间接
npm@oxlint/binding-linux-x64-gnu1.73.0间接
npm@oxlint/binding-linux-x64-musl1.73.0间接
npm@oxlint/binding-openharmony-arm641.73.0间接
npm@oxlint/binding-win32-arm64-msvc1.73.0间接
npm@oxlint/binding-win32-ia32-msvc1.73.0间接
npm@oxlint/binding-win32-x64-msvc1.73.0间接
npm@pi-outpost/embed0.6.2间接
npm@pinojs/redact0.4.0间接
npm@playwright/test1.61.1间接
npm@playwright/test^1.61.1间接
npm@protobufjs/aspromise1.1.2间接
npm@protobufjs/base641.1.2间接
npm@protobufjs/codegen2.0.5间接
npm@protobufjs/eventemitter1.1.1间接
npm@protobufjs/fetch1.1.1间接
npm@protobufjs/float1.0.2间接
npm@protobufjs/path1.1.2间接
npm@protobufjs/pool1.1.0间接
npm@protobufjs/utf81.1.1间接
npm@rolldown/binding-android-arm641.1.4间接
npm@rolldown/binding-darwin-arm641.1.4间接
npm@rolldown/binding-darwin-x641.1.4间接
npm@rolldown/binding-freebsd-x641.1.4间接
npm@rolldown/binding-linux-arm-gnueabihf1.1.4间接
npm@rolldown/binding-linux-arm64-gnu1.1.4间接
npm@rolldown/binding-linux-arm64-musl1.1.4间接
npm@rolldown/binding-linux-ppc64-gnu1.1.4间接
npm@rolldown/binding-linux-s390x-gnu1.1.4间接
npm@rolldown/binding-linux-x64-gnu1.1.4间接
npm@rolldown/binding-linux-x64-musl1.1.4间接
npm@rolldown/binding-openharmony-arm641.1.4间接
npm@rolldown/binding-wasm32-wasi1.1.4间接
npm@rolldown/binding-win32-arm64-msvc1.1.4间接
npm@rolldown/binding-win32-x64-msvc1.1.4间接
npm@rolldown/pluginutils1.0.1间接
npm@rollup/pluginutils5.4.0间接
npm@rushstack/node-core-library5.23.1间接
npm@rushstack/problem-matcher0.2.1间接
npm@rushstack/rig-package0.7.3间接
npm@rushstack/terminal0.24.0间接
npm@rushstack/ts-command-line5.3.10间接
npm@silvia-odwyer/photon-node0.3.4间接
npm@smithy/core3.24.3间接
npm@smithy/credential-provider-imds4.3.3间接
npm@smithy/fetch-http-handler5.4.3间接
npm@smithy/is-array-buffer2.2.0间接
npm@smithy/node-http-handler4.7.3间接
npm@smithy/signature-v45.4.3间接
npm@smithy/types4.14.2间接
npm@smithy/util-buffer-from2.2.0间接
npm@smithy/util-utf82.3.0间接
npm@tailwindcss/node4.3.2间接
npm@tailwindcss/oxide4.3.2间接
npm@tailwindcss/oxide-android-arm644.3.2间接
npm@tailwindcss/oxide-darwin-arm644.3.2间接
npm@tailwindcss/oxide-darwin-x644.3.2间接
npm@tailwindcss/oxide-freebsd-x644.3.2间接
npm@tailwindcss/oxide-linux-arm-gnueabihf4.3.2间接
npm@tailwindcss/oxide-linux-arm64-gnu4.3.2间接
npm@tailwindcss/oxide-linux-arm64-musl4.3.2间接
npm@tailwindcss/oxide-linux-x64-gnu4.3.2间接
npm@tailwindcss/oxide-linux-x64-musl4.3.2间接
npm@tailwindcss/oxide-wasm32-wasi4.3.2间接
npm@tailwindcss/oxide-win32-arm64-msvc4.3.2间接
npm@tailwindcss/oxide-win32-x64-msvc4.3.2间接
npm@tybys/wasm-util0.10.3间接
npm@types/argparse1.0.38间接
npm@types/d37.4.3间接
npm@types/d3-array3.2.2间接
npm@types/d3-axis3.0.6间接
npm@types/d3-brush3.0.6间接
npm@types/d3-chord3.0.6间接
npm@types/d3-color3.1.3间接
npm@types/d3-contour3.0.6间接
npm@types/d3-delaunay6.0.4间接
npm@types/d3-dispatch3.0.7间接
npm@types/d3-drag3.0.7间接
npm@types/d3-dsv3.0.7间接
npm@types/d3-ease3.0.2间接
npm@types/d3-fetch3.0.7间接
npm@types/d3-force3.0.10间接
npm@types/d3-format3.0.4间接
npm@types/d3-geo3.1.0间接
npm@types/d3-hierarchy3.1.7间接
npm@types/d3-interpolate3.0.4间接
npm@types/d3-path3.1.1间接
npm@types/d3-polygon3.0.2间接
npm@types/d3-quadtree3.0.6间接
npm@types/d3-random3.0.4间接
npm@types/d3-scale4.0.9间接
npm@types/d3-scale-chromatic3.1.0间接
npm@types/d3-selection3.0.11间接
npm@types/d3-shape3.1.8间接
npm@types/d3-time3.0.4间接
npm@types/d3-time-format4.0.3间接
npm@types/d3-timer3.0.2间接
npm@types/d3-transition3.0.9间接
npm@types/d3-zoom3.0.8间接
npm@types/debug4.1.13间接
npm@types/estree1.0.9间接
npm@types/estree-jsx1.0.5间接
npm@types/geojson7946.0.16间接
npm@types/hast3.0.4间接
npm@types/katex0.16.8间接
npm@types/mdast4.0.4间接
npm@types/ms2.1.0间接
npm@types/node22.19.19间接
npm@types/node24.13.2间接
npm@types/node^24.0.0间接
npm@types/node^24.13.2间接
npm@types/react19.2.17间接
npm@types/react^19.2.17间接
npm@types/react-dom19.2.3间接
npm@types/react-dom^19.2.3间接
npm@types/retry0.12.0间接
npm@types/trusted-types2.0.7间接
npm@types/unist2.0.11间接
npm@types/unist3.0.3间接
npm@types/ws8.18.1间接
npm@types/ws^8.18.0间接
npm@ungap/structured-clone1.3.2间接
npm@upsetjs/venn.js2.0.0间接
npm@vitejs/plugin-react6.0.3间接
npm@vitejs/plugin-react^6.0.3间接
npm@volar/language-core2.4.28间接
npm@volar/source-map2.4.28间接
npm@volar/typescript2.4.28间接
npmabstract-logging2.0.1间接
npmacorn8.17.0间接
npmagent-base7.1.4间接
npmajv8.18.0间接
npmajv8.20.0间接
npmajv-draft-041.0.0间接
npmajv-formats3.0.1间接
npmansi-regex6.2.2间接
npmansi-styles6.2.3间接
npmargparse1.0.10间接
npmatomic-sleep1.0.0间接
npmavvio9.2.0间接
npmbail2.0.2间接
npmbalanced-match4.0.4间接
npmbase64-js1.5.1间接
npmbignumber.js9.3.1间接
npmbowser2.14.1间接
npmbrace-expansion5.0.6间接
npmbrace-expansion5.0.7间接
npmbuffer-equal-constant-time1.0.1间接
npmccount2.0.1间接
npmchalk5.6.2间接
npmcharacter-entities2.0.2间接
npmcharacter-entities-html42.1.0间接
npmcharacter-entities-legacy3.0.0间接
npmcharacter-reference-invalid2.0.1间接
npmcliui9.0.1间接
npmcomma-separated-tokens2.0.3间接
npmcommander7.2.0间接
npmcommander8.3.0间接
npmcompare-versions6.1.1间接
npmconcurrently10.0.3间接
npmconfbox0.1.8间接
npmconfbox0.2.4间接
npmcontent-disposition1.1.0间接
npmcookie1.1.1间接
npmcose-base1.0.3间接
npmcose-base2.2.0间接
npmcross-spawn7.0.6间接
npmcsstype3.2.3间接
npmcytoscape3.34.0间接
npmcytoscape-cose-bilkent4.1.0间接
npmcytoscape-fcose2.2.0间接
npmd37.9.0间接
npmd3-array2.12.1间接
npmd3-array3.2.4间接
npmd3-axis3.0.0间接
npmd3-brush3.0.0间接
npmd3-chord3.0.1间接
npmd3-color3.1.0间接
npmd3-contour4.0.2间接
npmd3-delaunay6.0.4间接
npmd3-dispatch3.0.1间接
npmd3-drag3.0.0间接
npmd3-dsv3.0.1间接
npmd3-ease3.0.1间接
npmd3-fetch3.0.1间接
npmd3-force3.0.0间接
npmd3-format3.1.2间接
npmd3-geo3.1.1间接
npmd3-hierarchy3.1.2间接
npmd3-interpolate3.0.1间接
npmd3-path1.0.9间接
npmd3-path3.1.0间接
npmd3-polygon3.0.1间接
npmd3-quadtree3.0.1间接
npmd3-random3.0.1间接
npmd3-sankey0.12.3间接
npmd3-scale4.0.2间接
npmd3-scale-chromatic3.1.0间接
npmd3-selection3.0.0间接
npmd3-shape1.3.7间接
npmd3-shape3.2.0间接
npmd3-time3.1.0间接
npmd3-time-format4.1.0间接
npmd3-timer3.0.1间接
npmd3-transition3.0.1间接
npmd3-zoom3.0.0间接
npmdagre-d3-es7.0.14间接
npmdata-uri-to-buffer4.0.1间接
npmdayjs1.11.21间接
npmdebug4.4.3间接
npmdecode-named-character-reference1.3.0间接
npmdelaunator5.1.0间接
npmdepd2.0.0间接
npmdequal2.0.3间接
npmdetect-libc2.1.2间接
npmdevlop1.1.0间接
npmdiff8.0.4间接
npmdompurify3.4.11间接
npmduplexify4.1.3间接
npmecdsa-sig-formatter1.0.11间接
npmemoji-regex10.6.0间接
npmend-of-stream1.4.5间接
npmenhanced-resolve5.21.6间接
npmentities6.0.1间接
npmes-errors1.3.0间接
npmes-toolkit1.49.0间接
npmesbuild0.28.1间接
npmesbuild^0.28.1间接
npmescalade3.2.0间接
npmescape-html1.0.3间接
npmescape-string-regexp5.0.0间接
npmestree-util-is-identifier-name3.0.0间接
npmestree-walker2.0.2间接
npmexsolve1.1.0间接
npmextend3.0.2间接
npmfast-decode-uri-component1.0.1间接
npmfast-deep-equal3.1.3间接
npmfast-json-stringify7.0.0间接
npmfast-querystring1.1.2间接
npmfast-uri3.1.3间接
npmfast-xml-builder1.2.0间接
npmfast-xml-parser5.7.3间接
npmfastify-plugin5.1.0间接
npmfastify-plugin6.0.0间接
npmfastq1.20.1间接
npmfdir6.5.0间接
npmfetch-blob3.2.0间接
npmfind-my-way9.6.0间接
npmformdata-polyfill4.0.10间接
npmfs-extra11.3.6间接
npmfsevents2.3.2间接
npmfsevents2.3.3间接
npmfunction-bind1.1.2间接
npmgaxios7.1.4间接
npmgcp-metadata8.1.2间接
npmget-caller-file2.0.5间接
npmget-east-asian-width1.6.0间接
npmglob13.0.6间接
npmgoogle-auth-library10.6.2间接
npmgoogle-logging-utils1.1.3间接
npmgraceful-fs4.2.11间接
npmhachure-fill0.5.2间接
npmhas-flag4.0.0间接
npmhasown2.0.4间接
npmhast-util-from-dom5.0.1间接
npmhast-util-from-html2.0.3间接
npmhast-util-from-html-isomorphic2.0.0间接
npmhast-util-from-parse58.0.3间接
npmhast-util-is-element3.0.0间接
npmhast-util-parse-selector4.0.0间接
npmhast-util-to-jsx-runtime2.3.6间接
npmhast-util-to-text4.0.2间接
npmhast-util-whitespace3.0.0间接
npmhastscript9.0.1间接
npmhosted-git-info9.0.3间接
npmhtml-url-attributes3.0.1间接
npmhttp-errors2.0.1间接
npmhttp-proxy-agent7.0.2间接
npmhttps-proxy-agent7.0.6间接
npmiconv-lite0.6.3间接
npmignore7.0.5间接
npmimport-lazy4.0.0间接
npmimport-meta-resolve4.2.0间接
npminherits2.0.4间接
npminline-style-parser0.2.7间接
npminternmap1.0.1间接
npminternmap2.0.3间接
npmipaddr.js2.4.0间接
npmis-alphabetical2.0.1间接
npmis-alphanumerical2.0.1间接
npmis-core-module2.16.2间接
npmis-decimal2.0.1间接
npmis-hexadecimal2.0.1间接
npmis-plain-obj4.1.0间接
npmisexe2.0.0间接
npmjiti2.7.0间接
npmjju1.4.0间接
npmjson-bigint1.0.0间接
npmjson-schema-ref-resolver3.0.0间接
npmjson-schema-to-ts3.1.1间接
npmjson-schema-traverse1.0.0间接
npmjsonfile6.2.1间接
npmjwa2.0.1间接
npmjws4.0.1间接
npmkhroma2.1.0间接
npmkolorist1.8.0间接
npmlayout-base1.0.2间接
npmlayout-base2.0.1间接
npmlight-my-request6.6.0间接
npmlightningcss1.32.0间接
npmlightningcss-android-arm641.32.0间接
npmlightningcss-darwin-arm641.32.0间接
npmlightningcss-darwin-x641.32.0间接
npmlightningcss-freebsd-x641.32.0间接
npmlightningcss-linux-arm-gnueabihf1.32.0间接
npmlightningcss-linux-arm64-gnu1.32.0间接
npmlightningcss-linux-arm64-musl1.32.0间接
npmlightningcss-linux-x64-gnu1.32.0间接
npmlightningcss-linux-x64-musl1.32.0间接
npmlightningcss-win32-arm64-msvc1.32.0间接
npmlightningcss-win32-x64-msvc1.32.0间接
npmlocal-pkg1.2.1间接
npmlodash-es4.18.1间接
npmlong5.3.2间接
npmlongest-streak3.1.0间接
npmlru-cache11.4.0间接
npmlru-cache11.5.2间接
npmmagic-string0.30.21间接
npmmarkdown-table3.0.4间接
npmmarked16.4.2间接
npmmarked18.0.5间接
npmmdast-util-find-and-replace3.0.2间接
npmmdast-util-from-markdown2.0.3间接
npmmdast-util-gfm3.1.0间接
npmmdast-util-gfm-autolink-literal2.0.1间接
npmmdast-util-gfm-footnote2.1.0间接
npmmdast-util-gfm-strikethrough2.0.0间接
npmmdast-util-gfm-table2.0.0间接
npmmdast-util-gfm-task-list-item2.0.0间接
npmmdast-util-math3.0.0间接
npmmdast-util-mdx-expression2.0.1间接
npmmdast-util-mdx-jsx3.2.0间接
npmmdast-util-mdxjs-esm2.0.1间接
npmmdast-util-phrasing4.1.0间接
npmmdast-util-to-hast13.2.1间接
npmmdast-util-to-markdown2.1.2间接
npmmdast-util-to-string4.0.0间接
npmmicromark4.0.2间接
npmmicromark-core-commonmark2.0.3间接
npmmicromark-extension-gfm3.0.0间接
npmmicromark-extension-gfm-autolink-literal2.1.0间接
npmmicromark-extension-gfm-footnote2.1.0间接
npmmicromark-extension-gfm-strikethrough2.1.0间接
npmmicromark-extension-gfm-table2.1.1间接
npmmicromark-extension-gfm-tagfilter2.0.0间接
npmmicromark-extension-gfm-task-list-item2.1.0间接
npmmicromark-extension-math3.1.0间接
npmmicromark-factory-destination2.0.1间接
npmmicromark-factory-label2.0.1间接
npmmicromark-factory-space2.0.1间接
npmmicromark-factory-title2.0.1间接
npmmicromark-factory-whitespace2.0.1间接
npmmicromark-util-character2.1.1间接
npmmicromark-util-chunked2.0.1间接
npmmicromark-util-classify-character2.0.1间接
npmmicromark-util-combine-extensions2.0.1间接
npmmicromark-util-decode-numeric-character-reference2.0.2间接
npmmicromark-util-decode-string2.0.1间接
npmmicromark-util-encode2.0.1间接
npmmicromark-util-html-tag-name2.0.1间接
npmmicromark-util-normalize-identifier2.0.1间接
npmmicromark-util-resolve-all2.0.1间接
npmmicromark-util-sanitize-uri2.0.1间接
npmmicromark-util-subtokenize2.1.0间接
npmmicromark-util-symbol2.0.1间接
npmmicromark-util-types2.0.2间接
npmmime3.0.0间接
npmminimatch10.2.3间接
npmminimatch10.2.5间接
npmminipass7.1.3间接
npmmlly1.8.2间接
npmms2.1.3间接
npmnanoid3.3.15间接
npmnode-domexception1.0.0间接
npmnode-fetch3.3.2间接
npmon-exit-leak-free2.1.2间接
npmonce1.4.0间接
npmopenai6.26.0间接
npmoxlint1.73.0间接
npmoxlint^1.71.0间接
npmp-retry4.6.2间接
npmpackage-manager-detector1.7.0间接
npmparse-entities4.0.2间接
npmparse57.3.0间接
npmpartial-json0.1.7间接
npmpath-browserify1.0.1间接
npmpath-data-parser0.1.0间接
npmpath-expression-matcher1.5.0间接
npmpath-key3.1.1间接
npmpath-parse1.0.7间接
npmpath-scurry2.0.2间接
npmpathe2.0.3间接
npmpicocolors1.1.1间接
npmpicomatch4.0.5间接
npmpino10.3.1间接
npmpino-abstract-transport3.0.0间接
npmpino-std-serializers7.1.0间接
npmpkg-types1.3.1间接
npmpkg-types2.3.1间接
npmplaywright1.61.1间接
npmplaywright-core1.61.1间接
npmpoints-on-curve0.2.0间接
npmpoints-on-path0.2.1间接
npmpostcss8.5.16间接
npmprocess-warning4.0.1间接
npmprocess-warning5.0.0间接
npmproper-lockfile4.1.2间接
npmproperty-information7.2.0间接
npmprotobufjs7.6.4间接
npmquansync0.2.11间接
npmquick-format-unescaped4.0.4间接
npmreadable-stream3.6.2间接
npmreal-require0.2.0间接
npmreal-require1.0.0间接
npmremark-parse11.0.0间接
npmremark-rehype11.1.2间接
npmremark-stringify11.0.0间接
npmrequire-from-string2.0.2间接
npmresolve1.22.12间接
npmret0.5.0间接
npmretry0.12.0间接
npmretry0.13.1间接
npmreusify1.1.0间接
npmrfdc1.4.1间接
npmrobust-predicates3.0.3间接
npmrolldown1.1.4间接
npmroughjs4.6.6间接
npmrw1.3.3间接
npmrxjs7.8.2间接
npmsafe-buffer5.2.1间接
npmsafe-regex25.1.1间接
npmsafe-stable-stringify2.5.0间接
npmsafer-buffer2.1.2间接
npmscheduler0.27.0间接
npmsecure-json-parse4.1.0间接
npmsemver7.7.4间接
npmsemver7.8.0间接
npmsemver7.8.5间接
npmset-cookie-parser2.7.2间接
npmsetprototypeof1.2.0间接
npmshebang-command2.0.0间接
npmshebang-regex3.0.0间接
npmshell-quote1.8.4间接
npmsignal-exit3.0.7间接
npmsonic-boom4.2.1间接
npmsource-map0.6.1间接
npmsource-map-js1.2.1间接
npmspace-separated-tokens2.0.2间接
npmsplit24.2.0间接
npmsprintf-js1.0.3间接
npmstatuses2.0.2间接
npmstream-shift1.0.3间接
npmstring-argv0.3.2间接
npmstring-width7.2.0间接
npmstring_decoder1.3.0间接
npmstringify-entities4.0.4间接
npmstrip-ansi7.2.0间接
npmstrnum2.3.0间接
npmstyle-to-js1.1.21间接
npmstyle-to-object1.0.14间接
npmstylis4.4.0间接
npmsupports-color10.2.2间接
npmsupports-color8.1.1间接
npmsupports-preserve-symlinks-flag1.0.0间接
npmtapable2.3.3间接
npmthread-stream4.2.0间接
npmtinyexec1.2.4间接
npmtinyglobby0.2.17间接
npmtoad-cache3.7.4间接
npmtoidentifier1.0.1间接
npmtree-kill1.2.2间接
npmtrim-lines3.0.1间接
npmtrough2.2.0间接
npmts-algebra2.0.0间接
npmts-dedent2.3.0间接
npmtslib2.8.1间接
npmtsx4.23.0间接
npmtsx^4.19.0间接
npmtsx^4.23.0间接
npmtypebox1.1.38间接
npmtypescript5.9.3间接
npmtypescript6.0.3间接
npmtypescript^5.8.0间接
npmtypescript~6.0.2间接
npmufo1.6.4间接
npmundici8.5.0间接
npmundici-types6.21.0间接
npmundici-types7.18.2间接
npmunified11.0.5间接
npmunist-util-find-after5.0.0间接
npmunist-util-is6.0.1间接
npmunist-util-position5.0.0间接
npmunist-util-remove-position5.0.0间接
npmunist-util-stringify-position4.0.0间接
npmunist-util-visit5.1.0间接
npmunist-util-visit-parents6.0.2间接
npmuniversalify2.0.1间接
npmunplugin2.3.11间接
npmunplugin-dts1.0.3间接
npmutil-deprecate1.0.2间接
npmuuid14.0.1间接
npmvfile6.0.3间接
npmvfile-location5.0.3间接
npmvfile-message4.0.3间接
npmvite8.1.3间接
npmvite^8.1.1间接
npmvite-plugin-dts5.0.3间接
npmvite-plugin-dts^5.0.3间接
npmvscode-uri3.1.0间接
npmweb*间接
npmweb0.0.0间接
npmweb-namespaces2.0.1间接
npmweb-streams-polyfill3.3.3间接
npmwebpack-virtual-modules0.6.2间接
npmwhich2.0.2间接
npmwrap-ansi9.0.2间接
npmwrappy1.0.2间接
npmxml-naming0.1.0间接
npmy18n5.0.8间接
npmyaml2.9.0间接
npmyargs18.0.0间接
npmyargs-parser22.0.0间接
npmzod3.25.76间接
npmzod-to-json-schema3.25.2间接
npmzwitch2.0.4间接
依赖安全公告 1

安装 npm:pi-outpost@0.6.4 会引入 206 个包(直接与传递):其中 1 个存在已知公告,1 个为直接依赖。

软件包版本关系严重程度公告数修复版本
@fastify/static9.3.0直接210.1.2

公告表示依赖图中记录的版本落入某条公告的受影响范围。可达性未经分析,且依赖图包含开发与测试的版本固定——某项发现可能只涉及工具链而非交付的软件。

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 3895,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "CSS": 4143,
        "TeX": 18962,
        "HTML": 289,
        "JavaScript": 76292,
        "TypeScript": 7344815
      },
      "pushed_at": "2026-07-24T17:22:51Z",
      "created_at": "2026-07-07T21:46:50Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T05:41:59Z",
      "description": "WebUI for 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": "Laurent",
      "type": "User",
      "login": "laurentftech",
      "company": null,
      "location": null,
      "followers": 6,
      "avatar_url": "https://avatars.githubusercontent.com/u/44120190?v=4",
      "created_at": "2018-10-13T16:17:57Z",
      "is_verified": null,
      "public_repos": 20,
      "account_age_days": 2841
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.6.4",
          "kind": "patch",
          "published_at": "2026-07-19T22:00:16Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2026-07-18T21:58:48Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2026-07-18T21:00:06Z"
        },
        {
          "tag": "v0.5.6",
          "kind": "patch",
          "published_at": "2026-07-17T20:00:26Z"
        },
        {
          "tag": "v0.5.5",
          "kind": "patch",
          "published_at": "2026-07-16T22:47:51Z"
        },
        {
          "tag": "v0.5.4",
          "kind": "patch",
          "published_at": "2026-07-16T12:12:30Z"
        },
        {
          "tag": "v0.5.1",
          "kind": "patch",
          "published_at": "2026-07-16T09:25:32Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-07-13T16:00:27Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-07-13T10:28:05Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "b69d3416ae6dd50afa78e95778984e6454fc3663",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.6.4",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-19T12:29:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f632f7bae9b4d0d2a0bf035b51b306497bb79fcb",
          "body": "When set, the web UI is not inlined into the bundle (EMBEDDED_WEB stays\nempty) and the server falls back to serving web/ from disk via\nfastifyStatic. Useful when the executable is a backend for an embedded\nwidget rather than a standalone desktop app, or to update the UI without\nrecompiling the server.\n\nDocumented in docs/sea-packaging.md.",
          "is_bot": false,
          "headline": "feat: add BUILD_EMBED_WEB=0 for server-only / embed mode",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-19T12:22:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "28030af49a1b6b74dc21969e0ad7eb37d0922b59",
          "body": "The file is generated by cli/scripts/embed-web.mjs during build, but it is\nimported by server/src/index.ts. On a fresh checkout (or npm publish from a\nclean tree) the generator had not run yet, so esbuild/tsc failed with\n'Cannot find module ./embedded-web.ts'. Commit it as a tracked source file so\nthe published bundle always resolves the import.",
          "is_bot": false,
          "headline": "fix: track embedded-web.ts so builds resolve the web UI import",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T22:34:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47c38562970bd04cda0faf000b97855e2e1793f0",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.6.3",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T22:27:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a47a90250bfdb7f2438c79d0a64d803cf2f7072",
          "body": null,
          "is_bot": false,
          "headline": "feat: bake web UI into SEA/npm bundle (self-contained .exe)",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T22:22:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8aae7b7cda3c76ef3eb616d6cde19a8dd0211a9f",
          "body": null,
          "is_bot": false,
          "headline": "fix: resolve pi SDK version at build time (was 0.0.0 in SEA bundle)",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T21:52:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8917bc2ae23d639b33c04a6497beed5f2ec24a3",
          "body": null,
          "is_bot": false,
          "headline": "docs: mention in-browser sandbox settings in features",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T21:02:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2270888f177d768a8721582ba2d03beea7bd6b6",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.6.1",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T20:57:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65b75aa601ae63d7fef606b2475c39de03d3bde3",
          "body": null,
          "is_bot": false,
          "headline": "fix: missing versions mapping in applySnapshot",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T20:11:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a30fc82639a339c75abd03cb3ac2742c4cbe705",
          "body": "Adds a Versions section to the SettingsMenu displaying pi-outpost (build-time constant) and pi SDK (runtime import) versions. Includes a new optional \u000bersions field in the SessionSnapshot protocol type.",
          "is_bot": false,
          "headline": "feat: show pi-outpost and pi SDK versions in settings menu",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T18:08:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43e7870af95a000c1a8fe12bd7c57b804af968cd",
          "body": null,
          "is_bot": false,
          "headline": "fix: remove horizontal scrollbar on extension items, keep tooltip",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T17:59:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8fd95abf18f9adcb6174f340383250a45729738",
          "body": null,
          "is_bot": false,
          "headline": "fix: make extension items horizontally scrollable with tooltip",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T17:57:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8b3a06f199f7aa64a09845f8b53b0d177d71253",
          "body": null,
          "is_bot": false,
          "headline": "fix: remove truncation on extension items in SettingsMenu",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T17:56:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d715d33d63467559540b767bb9cd57ff02b20166",
          "body": "applySnapshot now clears fileTree so stale cached directory entries from a previous sandbox root don't persist. After session_replaced, immediately fetch the root directory listing to populate the tree with the new sandbox root's contents.",
          "is_bot": false,
          "headline": "fix: refresh file tree after session replacement",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T17:53:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c08e7f02b8df42bcf72562d2499c9c741fa2389",
          "body": "- server: log sandbox value in snapshot() to trace hello message content\n- web: log sandbox field from hello/session_replaced/update_config_ack messages",
          "is_bot": false,
          "headline": "Add debug logs for snapshot sandbox field",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T17:24:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b424f4e4cf4e24caac5dbc4a476c26b1588f73a",
          "body": null,
          "is_bot": false,
          "headline": "fix: add missing readExceptions in handleUpdateConfig sandbox assignment",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T16:48:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e22d7190ba41eb05338a49eb2390ef18b5d863e7",
          "body": "- shared/src/protocol.ts: Add sandbox (+locks) and extensionPaths to\n  SessionSnapshot; add update_config / update_config_ack message types\n- server/src/config.ts: Add SandboxLocks interface and sandboxLocks\n  field to AppConfig with config parsing\n- server/src/index.ts: Add handleUpdateConfig() tha\n[…]\nwith\n  disabled/locked field UX\n- web/src/App.tsx, web/src/components/Header.tsx: Wire SettingsMenu\n- interactive-test/pi-outpost.config.json: sandboxLocks.allowBash: true\n  for testing lock behaviour",
          "is_bot": false,
          "headline": "feat(ui): add sandbox config settings menu with lock enforcement (#13)",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T16:45:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a1e9c54a14b9041e25bacf93b93ad744c5295060",
          "body": "In SEA mode, getAliases() calls require.resolve('typebox') relative to the\nbundle location — there is no node_modules/ inside the blob, so it throws\nMODULE_NOT_FOUND before jiti.import() can load the extension.\n\nWrap getAliases() body in try-catch during the SEA bundle build step.\nWhen resolution fails (SEA context), empty aliases are returned — enough\nfor extensions that use only type imports (stripped by jiti).\n\nAlso adds PI_OUTPOST_DEBUG=1 support to log extension loading status.",
          "is_bot": false,
          "headline": "fix(build): patch getAliases() in SEA bundle to allow extension loading",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T14:20:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b9ae71140d624d9a19e024b5e531425a3e574a8",
          "body": "The npm package now ships two bundles:\n- pi-outpost.mjs (2.2 MB) - npm deps external, lightweight install\n- pi-outpost.sea.mjs (15.9 MB) - all deps inlined, for --build-sea\n\nUsers create a standalone .exe with:\n  node --build-sea sea-config.json\n\nwhere sea-config.json points main to pi-outpost.sea.mjs.",
          "is_bot": false,
          "headline": "feat: produce pi-outpost.sea.mjs (full bundle) for --build-sea",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T13:16:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "282555c42d11ccd7651c3d785402713390cdf286",
          "body": "…andbox\n\n- config with extension at mon-ext/index.ts (outside sandbox root)\n- test skills under skills/ (review-python, test-config)\n- persisted so the test environment can be recreated consistently",
          "is_bot": false,
          "headline": "chore: add interactive test setup with extension and skills outside s…",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T13:01:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2900f0ea4256a603c19a457c0e3de7ad8a21c4dc",
          "body": "build-sea.mjs was missing the esbuild 'define' for\n__PI_OUTPOST_VERSION__, causing the SEA .exe to always\nreport 'dev' instead of the actual package version.\nRead version from cli/package.json.",
          "is_bot": false,
          "headline": "fix: inject version into SEA build so .exe reports correct version",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T13:00:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "468c44ca0498ed160526a70df660e940b41eb77d",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump embed version to 0.5.7",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T12:16:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "881968c67d7d333afd2c1ea43251d7dd414293ba",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump cli version to 0.5.7",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T12:09:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02af8ac098b1488a4ea18d4334864e66e2f796e9",
          "body": "Adds a dedicated 'npm run build --workspace @pi-outpost/embed' step\nto CI and release workflows, right after typecheck, so any API drift\nbetween web/ (React components) and embed/ (Shadow DOM widget) is\ncaught before tests run.\n\nPreviously embed was only built as part of the final 'npm run build'\nstep (--workspaces --if-present), which ran after tests — too late.",
          "is_bot": false,
          "headline": "ci: build embed after typecheck to catch web↔embed API drift early",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T12:04:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e95cf03d8a57e611f677acefc2d6f1c591ed9147",
          "body": "The server starts listening before the agent session runtime is ready.\nThe stub getHealth() returned { ok: false } but the endpoint always\nreturned HTTP 200, so the test harness's res.ok check passed prematurely\nand connected to the 1013 stub handler. Return 503 until the real handler\nis wired after createAgentSessionRuntime resolves.",
          "is_bot": false,
          "headline": "fix: health endpoint returns 503 during startup to avoid WebSocket race",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T11:56:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41d8ed338a9e75e8aee65b390fb88bad9cd5fd37",
          "body": "…ion + 3 integration tests\n\n- Add loadConfig unit tests in config.test.ts for relative/absolute path\n  resolution of extensionPaths, skillPaths, promptPaths, and defaults for\n  noExtensions/noSkills/noPromptTemplates (fast, no server boot).\n- Merge resource-isolation.test.mjs from 9 server-boot subt\n[…]\ndown to 3:\n  one for absolute path, one for relative paths (combo), one for\n  noSkills+noPromptTemplates blocking auto-discovery.\n- Cuts ~45s of server boots from the suite, keeping the CI under 120s.",
          "is_bot": false,
          "headline": "simplify resource-isolation tests: unit tests for config path resolut…",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T11:43:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "022644a6d5e7bdf42037abc5a08befc0f24adfc1",
          "body": "Breaking changes in 0.80.8+:\n- AuthStorage.set() removed, use modify()\n- knownProviders export renamed\n- modelRegistry renamed to modelRuntime\n- AuthResult shape changed: { ok, apiKey, headers } -> { auth: { apiKey, headers } }\n- CreateModelRuntimeOptions.allowNetwork -> allowModelNetwork\n\nFixes:\n- \n[…]\nths for isAncestor compat\n- credentials.ts: set()->modify(), rm knownProviders check, dual-write auth.json+setRuntimeApiKey\n- index.ts: modelRegistry->modelRuntime, AuthResult shape, allowModelNetwork",
          "is_bot": false,
          "headline": "upgrade pi-coding-agent to 0.80.9 (exact)",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-18T10:54:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3adb42e67eaeb731fd0821ee39a711d3be335ec1",
          "body": "Add readExceptions to SandboxConfig so the agent's read tools can access\nskill, prompt, and extension files stored outside the sandbox root.\n\n- SandboxConfig.readExceptions: string[]\n- Populated in loadConfig from skillPaths, promptPaths, extensionPaths,\n  extensionScripts\n- isWithinAny() helper; scopeToRoot() accepts readExceptions\n- Unit + integration tests in sandbox.test.ts\n- Bump @earendil-works/pi-coding-agent to ^0.80.9\n\nCloses #15",
          "is_bot": false,
          "headline": "feat(sandbox): add readExceptions for skills, prompts, extensions",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-17T22:07:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a971b74eae490b10dfeeac29f3266a8599ebfd34",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump to 0.5.6",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-17T19:59:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2dfdc92bd8b311729a62f555f7ae925eaf21886a",
          "body": "…on Linux\n\nThe static import of mon-ext/index.ts (an ES module under\ninteractive-test/) from sea-extensions.ts created a\nERR_REQUIRE_CYCLE_MODULE at module load time when tsx/esm\nresolved the import chain through @earendil-works/pi-coding-agent.\n\nThe mon-ext is a test extension that was never intend\n[…]\nnto SEA builds — the file's own doc says 'Empty by default'.\nRemoving it restores that contract and fixes the 13 test failures\non Ubuntu CI (Windows was unaffected due to path resolution\ndifferences).",
          "is_bot": false,
          "headline": "Fix CI: remove mon-ext from sea-extensions.ts to break CJS-ESM cycle …",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T22:42:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7a5f2a7c9e1ad376d9f0c0d7df116630d6e7c4ed",
          "body": "- interactive-test/mon-ext/index.ts: Add explicit types for pi, args,\n  ctx, and event parameters to fix TS7006 implicit any errors\n- server/src/sea-extensions.ts: Cast monExt to ExtensionFactory to\n  resolve TS2322 type mismatch with NodeNext module resolution",
          "is_bot": false,
          "headline": "fix: resolve CI typecheck failures",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T22:37:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2bd042a9b3d8841fb56c1d2d763a92d90eb73d4c",
          "body": "- Replace amber pulsing dot in header with a blue spinning ring below the\n  last user message (right-aligned).\n- Spinner disappears as soon as the first assistant message arrives.\n- Make spinner thicker (border-[3px]) and slightly larger (h-4 w-4).",
          "is_bot": false,
          "headline": "feat(ui): add streaming spinner below user message, remove from header",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T21:36:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67bc2d66f2529bd72888673a551325e0dc4f868e",
          "body": "…es() for SEA mode\n\n- Route config.extensionScripts through the SDK's jiti-based loader\n  (additionalExtensionPaths) instead of native import(), which can't\n  load filesystem modules inside a SEA blob.\n- Patch getAliases() in build-sea post-bundle step with try/catch so\n  require.resolve('typebox') \n[…]\nomFile2 requires YAML frontmatter\n  with a 'description' field — without it skills are silently dropped.\n- Bump engine requirement to Node >= 26.\n- Update docs/sea-packaging.md for the new build flow.",
          "is_bot": false,
          "headline": "fix(sea): route extensionScripts through jiti loader + patch getAlias…",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T21:17:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e0e64e8d5ffc265d08f6c63f06c0a2f6a0861ebf",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump to 0.5.5, fix SEA blob copy in release workflow",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T19:49:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "345c00e9aabc37c952ba13b628d2eb97a98d3126",
          "body": null,
          "is_bot": false,
          "headline": "Update release.yml",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T12:19:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77101666a081428429e7599080eef45df6e51755",
          "body": null,
          "is_bot": false,
          "headline": "Update package-lock.json",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T12:11:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab199bcdeb9931095576d580cf4631880b99d3c7",
          "body": null,
          "is_bot": false,
          "headline": "Update package.json",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T12:11:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d533bd404de8f27d9085228e27f409fc58871037",
          "body": null,
          "is_bot": false,
          "headline": "Update build.mjs",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T12:10:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09a35d31f9d028fcafe2bc993037de5b5d0194db",
          "body": null,
          "is_bot": false,
          "headline": "Update package-lock.json",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T11:56:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d319dce0eea268d9cbb5a6b814e269562cc7005d",
          "body": null,
          "is_bot": false,
          "headline": "Update package.json",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T11:56:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ed5f111f335fc0bc8d54dbc30b8a4d02b30ddf0",
          "body": null,
          "is_bot": false,
          "headline": "Create .npmignore",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T11:55:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6533af94089e5d33f60be87c2554e4705bb088a4",
          "body": null,
          "is_bot": false,
          "headline": "Update package-lock.json",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T11:39:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dae1a87298db9f02816b95201450fea637bc3199",
          "body": null,
          "is_bot": false,
          "headline": "Update package.json",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T11:38:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64c64dad2c9b04893af28b83db65abbefa339621",
          "body": null,
          "is_bot": false,
          "headline": "Update release.yml",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T11:36:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e89b1bfde423429b2d18087c9c881acaeeefc5f",
          "body": null,
          "is_bot": false,
          "headline": "Update release.yml",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T09:23:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8e890e5895bc5b3a4a5d3907542b427623f12a8",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T08:55:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ecdea24b732a593826963d8cc896100592554ddb",
          "body": null,
          "is_bot": false,
          "headline": "Update package.json",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T08:37:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a31c05b1b8c556b9087e7830d552a7289604c65",
          "body": null,
          "is_bot": false,
          "headline": "Update cli version from 0.5.0 to 0.5.1",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T08:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d4ccad4a4aadbd2881da933a90ca840e2815499",
          "body": "Updated Node.js version from 22 to 24 and added build step for SEA.",
          "is_bot": false,
          "headline": "Upgrade Node.js version and add SEA build step",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-16T08:17:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba226fbb07fe08e45cacffa5597bab0cc4fa4e9b",
          "body": null,
          "is_bot": false,
          "headline": "chore: update package-lock.json for v0.5.0",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T22:21:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6dff3b5a4a4ded8276c14226b406cac68a59e6b7",
          "body": "npm dependencies are now listed in cli/package.json and resolved at\ninstall time instead of being inlined by esbuild. This keeps jiti\n(the pi SDK's TypeScript loader) available, so config.extensionPaths\nworks in the published npm package as well as in dev mode.\n\nAlso:\n- restore extensionPaths alongside extensionScripts\n- bump cli version to 0.5.0\n- update docs, README, example config",
          "is_bot": false,
          "headline": "chore: publish as standard npm package (no monolithic bundle)",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T22:12:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1bb96c5ab939a52cb76ea0f7ec9588d99f54cfe",
          "body": "…builds)\n\nextensionPaths relied on jiti (stripped by esbuild) and did not work\nin the npm-published bundle. extensionScripts uses native import(),\npreserved by esbuild, so extensions work in both dev mode and bundled builds.\n\nFiles must be .mjs (or .ts in dev mode with tsx).\nEach must default-export\n[…]\nnsionFactory.\n\nAlso:\n- remove extensionPaths from config, README, docs, tests\n- add extensionScripts to example config\n- update sea-packaging docs\n- convert interactive-test extension from .ts to .mjs",
          "is_bot": false,
          "headline": "feat: replace extensionPaths with extensionScripts (works in bundled …",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T21:54:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fb8fff77d91a771313e78c973fb3e0cc49c8255c",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump cli version to 0.4.0",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T21:30:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "991a84b78869ca0a637a6a76ccb6a40b5d5242b6",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump pi-coding-agent to ^0.80.7 (update lockfile)",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T21:22:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01d0c29d3c65e50c4a996f5806e959b37438031b",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump pi-coding-agent to ^0.80.7",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T21:17:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0b4fcab4552aba918cceef570c1a09f7921f9b3",
          "body": "…e extension path)",
          "is_bot": false,
          "headline": "test: add e2e test and interactive-test (isolated server with relativ…",
          "author_name": "Laurent",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T21:08:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1685a5ea834efbaae7f9b325895efac94b27cffe",
          "body": null,
          "is_bot": false,
          "headline": "docs: document promptPaths config option",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T20:32:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6dd3d35cd2e3353736ab92265f74bfb1ced0df1",
          "body": "On Windows CI, os.tmpdir() returns 8.3 short names (RUNNER~1) while\ngit rev-parse returns canonical long names (runneradmin). Neither\nrealpathSync nor path.resolve reconcile this, so compare with\nexistsSync + .git check instead of string equality.",
          "is_bot": false,
          "headline": "fix: avoid path comparison in probeGit test on Windows",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T20:25:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dfcd4a5c9562e197cb3f3b77c60dedd526f77283",
          "body": "On Windows, execFileSync with shell:true corrupts array args — cmd.exe\nconcatenates command and args as a flat string, breaking arguments with\nspaces (e.g. 'git commit -m \"initial commit\"'). git is a native .exe,\nso shell:true is not needed anyway.",
          "is_bot": false,
          "headline": "fix: drop shell option from execFileSync in git test",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T20:19:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d44a95951c216e93d0bd29985c07159a8ab58b7",
          "body": "- userConfigDir tests: use path.join() in assertions instead of\n  hardcoded forward-slash paths (Windows uses backslashes)\n- git tests: switch from execSync (shell quoting) to execFileSync\n  with array args. Windows cmd.exe doesn't recognize single quotes\n  for argument grouping, which broke git commit -m with spaces.\n  execFileSync passes args as an array, avoiding shell entirely.",
          "is_bot": false,
          "headline": "fix: Windows compat for config and git tests",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T20:13:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22f31c19b3023509127f6e0778bc51e025f9ac36",
          "body": "applyDirectories calls path.resolve() on env and flag values, which on\nWindows converts Unix-style paths (e.g. /env/cwd) to Windows paths\n(e.g. D:\\env\\cwd). Wrapping test expectations with path.resolve() makes\nthe assertions pass on both platforms.",
          "is_bot": false,
          "headline": "fix: use path.resolve in applyDirectories tests for Windows compat",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T20:06:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba7ac324621ef0982dbf65477db09f6c04545fdc",
          "body": "- Move getFormattedToolOutput to web/src/toolOutput.ts so ToolCard.tsx\n  only exports components (fixes react/only-export-components warning)\n- Inline fileSuggestions inside useMemo to avoid unstable dependency\n  (fixes react-hooks/exhaustive-deps warning)",
          "is_bot": false,
          "headline": "refactor: extract getFormattedToolOutput and fix useMemo deps",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T20:03:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ed5c97b25a30bb8977bb694e8feded92dcc9620",
          "body": "Reinitialized existing Git repository in /Users/laurent/Projets/Pi-interface/.git/ on older git (Ubuntu CI) defaults the initial branch to\n'master' instead of 'main'. Add explicit  after\ninit so the test passes regardless of git version's default branch name.\n\nFixes CI run #29445974263.",
          "is_bot": false,
          "headline": "fix: force branch name to main in git test setup",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T19:59:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29fa00a7722fc78be31128ff8f17070483835bf3",
          "body": "…pers",
          "is_bot": false,
          "headline": "test: add config, sessions and extensionRender unit tests, export hel…",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T19:49:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46e0b8589850c6d2799711e2fa68c60059f48691",
          "body": "Add 62 tests: contentText, truncate, historyToItems, assistantToItem, customMessageToItem (convert.ts - 34 tests) and parseCli, runInit (cli.ts - 28 tests). Update npm test script to include .ts files via tsx/esm loader.",
          "is_bot": false,
          "headline": "test: add convert and cli module unit tests, update test script",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T19:36:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a9f6e2559f914829473812bf6ec9beb93dd67d5",
          "body": "Export unquote() from git.ts so it can be tested directly. Add 20 tests: unquote (pure), probeGit, gitStatus, gitLog, gitShow, gitHeadContent (integration with real git repo).",
          "is_bot": false,
          "headline": "test: add git module unit tests, export unquote",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T19:36:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b067c8645fdcdd7ab708615774520c234c47de2",
          "body": null,
          "is_bot": false,
          "headline": "fix: use shell:true for spawnSync npm on windows in build script",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T19:14:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b27d0643854f6fb7173e897131076d279e103253",
          "body": null,
          "is_bot": false,
          "headline": "fix: use platform-agnostic path separators in windows regex assertions",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T19:06:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d40038537e8c284137df90908eb842b7dd87d00",
          "body": null,
          "is_bot": false,
          "headline": "fix: use pathToFileURL for tsx loader path on windows --import",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T17:59:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b38ab1f06031988262d56ba646465be156b78396",
          "body": null,
          "is_bot": false,
          "headline": "fix: use absolute path to tsx loader for windows --import",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T17:45:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d1c8dfc21101137c1af1707ab1a9fbe6e0171e24",
          "body": null,
          "is_bot": false,
          "headline": "fix windows compat for config-cli and resource-isolation tests",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T17:37:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34cd4c540298360dcfeb78abbcfa4cb18703daf7",
          "body": "The .cmd wrapper on Windows with detached:true produces spawn EINVAL. Using node --import tsx/esm avoids the shell wrapper entirely and works cross-platform.\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "fix: use node --import tsx/esm instead of tsx binary in harness",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T17:27:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9995c07eaf6010eaae2fcdca27ce58d72407e178",
          "body": "Use tsx.cmd on Windows (spawn ENOENT with the bare tsx name). Use taskkill on Windows instead of Unix process group kill.\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "fix: make test harness work on Windows",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T17:23:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6851dfee103f73c419682cfecb203cb23cb01ed",
          "body": "Run all CI steps on both ubuntu-latest and windows-latest to catch platform-specific regressions.\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "ci: add windows-latest to test matrix",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T17:19:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91a11fdcb95230839f315f57b4596f3038910170",
          "body": "Covers absolute and relative paths, noExtensions/noSkills/noPromptTemplates isolation, and combined config.\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "test: add resource isolation tests for extension/skill/promptPaths",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T17:18:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0312164f1b7a01c92d6f7fc90f485e9a79a31440",
          "body": "Add skillPaths and promptPaths to the pi-outpost config, wired to the SDK as additionalSkillPaths and additionalPromptTemplatePaths.\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "feat: add skillPaths and promptPaths config options",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T17:18:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "814f1edda3a540144dc86dd9916786f364b80ea6",
          "body": "… Shadow DOM CSS limit\n\nChrome 97 silently drops <style> elements >~512 KB inside Shadow DOM.\nTailwind v4 generates ~1.5 MB of CSS, causing the embed widget to render\nwithout styles. Switch to the constructable stylesheet API which does not\nhave this per-sheet size cap.\n\nFixes #11",
          "is_bot": false,
          "headline": "fix(embed): use CSSStyleSheet + adoptedStyleSheets to avoid Chrome 97…",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-15T16:34:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d78cf1b6440e60775a955b9d87e448f36bc877bd",
          "body": "useMemo must not be called conditionally inside JSX. Extracted to top-level variables in the component.\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "fix: move useMemo calls to top level to satisfy hooks rules",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T22:37:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5898776dffa8293377793584b10bf0a0ac6b6fe",
          "body": "…wn, improve security docs\n\nToolCard: export getFormattedToolOutput for testing, add useEffect to sync open state with mid-stream hasDiff changes, memoize ReactMarkdown plugin arrays. RenderedHtml: expand security rationale for dangerouslySetInnerHTML. Tests: import real function instead of inlining 100+ lines of duplicate logic.\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "fix: export getFormattedToolOutput, sync hasDiff, memoize ReactMarkdo…",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T22:34:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a3f2fe730e15b523a6f59db90101389b8f2ff16",
          "body": "Wraps the three bare module-level variables (deps, theme, toolRenderer) inside an ExtensionRenderer singleton so mutations are explicit and the API surface is unchanged.\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "fix: encapsulate extension renderer global state into class",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T22:34:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9905696400becd3980641044c4a12db6e512ebbe",
          "body": "Text exactly at the 20,000 character limit should not be marked as truncated.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix truncate function: use <= instead of < for max length check",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T22:14:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "de7027a85337ab70f56fdb8af2bfe68c920df969",
          "body": "- Update unit test for getFormattedToolOutput to match new implementation\n  (returns undefined for pure JSON without known fields)\n- Add e2e tests for ToolCard collapsed/expanded state\n- Test that ToolCard starts collapsed by default\n- Test that ToolCard expands when clicked and shows raw JSON\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Update ToolCard tests for new rendering behavior",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T21:52:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e1e20ddf019ffc729cd0c31e49f24c3b0222aa1",
          "body": "…, tests, configs\n\n- CLAUDE.md: Add OpenLore block\n- openspec/specs/model/spec.md: Update source files and add decision\n- package-lock.json/web/package.json: Add @playwright/test dependency\n- web/src/components/CustomMessageCard.tsx: Support for contentHtml/contentHtmlCollapsed\n- web/src/useAgent.ts\n[…]\ns/: Test results\n- web/test/toolCard.e2e.spec.ts: E2E tests for ToolCard\n- web/test/toolCard.test.ts: Unit tests for ToolCard\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Add remaining files: CustomMessageCard HTML support, useAgent updates…",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T21:49:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1e4a7018f54238e64e4294e4894c6bc6ed92f9e9",
          "body": "- Add outputHtml, outputHtmlCollapsed, callHtml to tool ChatItem\n- Add contentHtml, contentHtmlCollapsed to custom ChatItem\n- Add callHtml to tool_start ServerMessage\n- Add outputHtml, outputHtmlCollapsed to tool_end ServerMessage\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Add HTML output fields to protocol types for extension rendering",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T21:47:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b3221b26cd4e1af2e99484c98a82685b718c1dc0",
          "body": "Generated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Add test script for extension HTML rendering",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T21:46:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d2e2cad120c0e238f4a41c16120e9c12786c601",
          "body": "- Import and use configureExtensionRender, renderToolCallHtml, renderToolResultHtml\n- Add refreshExtensionRender() to wire TUI renderers into HTML bridge\n- Broadcast callHtml for tool_execution_start events\n- Broadcast outputHtml and outputHtmlCollapsed for tool_execution_end events\n- Remove SHIM_TOOL_RESULT environment check and summarizeToolResult fallback\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Integrate extension HTML rendering into session binding",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T21:46:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2010609c8c4cc066679207af0cb28c39f2505ac1",
          "body": "Generated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Add extensionRender.ts for server-side HTML rendering of pi extensions",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T21:45:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b2cadc8a8f90d4a86df4e0c50662dcd18953051",
          "body": "… nothing\n\nFor tools like get_function_body that return pure JSON without formattable fields,\nformatParsedObject now returns undefined instead of a markdown code block.\nThis means:\n- Tools with formattable output (task, summary, relevantFiles, etc.) show formatted MD in collapsed state\n- Tools with pure JSON output show nothing in collapsed state (▸)\n- Expanded state always shows raw JSON or HTML\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Remove HTML preview in collapsed ToolCard - only show formatted MD or…",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T21:31:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "652630fa7f5420354cd57d7f8c036ce88fe90100",
          "body": "…state\n\n- Always compute formattedOutput from item.output (not just when !hasHtml)\n- Start collapsed by default (open = hasDiff only)\n- In collapsed mode: prioritize formatted MD output over HTML preview\n- In expanded mode: show raw JSON or HTML from extension\n- Remove useEffect that forced open=tru\n[…]\nted markdown is shown when collapsed\n- Raw JSON is shown when expanded\n- HTML from extensions is still rendered when expanded\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Fix ToolCard: always start collapsed, show formatted MD in collapsed …",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T21:23:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2302fe32a94609b97fe3792ce9e892bedd543f5a",
          "body": "- Modify truncate() to use < instead of <= so exactly MAX_TOOL_OUTPUT chars get truncation marker\n- Refactor getFormattedToolOutput with formatParsedObject helper to reduce duplication\n- Enhance brace-counting recovery to handle JSON truncated mid-object:\n  - First try to find complete object (brace\n[…]\ntension HTML output still starts expanded\n\nVerified with Playwright: all tool cards now show formatted MD in collapsed state.\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Fix tool card rendering to show formatted MD by default",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T20:59:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d27a1d708e67c631a7fb740fa32edd95e5fa4eae",
          "body": "…lid JSON\n\n- Extract formatting logic into a reusable formatParsedObject helper\n- Guarantee that valid JSON always returns formatted output (markdown or code block)\n- Preserve brace-counting recovery for mid-truncation cases\n- This ensures hasFormattedOutput=true for all valid JSON, keeping tool cards\n  collapsed by default and showing formatted markdown in the collapsed state\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Refactor getFormattedToolOutput to ensure formatted output for all va…",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T20:17:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8dbfd10fe9afc1bd585affa55b37a00fd9bf9388",
          "body": "… JSON\n\nThe fallback was returning raw JSON for outputs containing 'Relevant' or 'Next steps',\nwhich caused hasFormattedOutput=true but formattedOutput=raw JSON, resulting in raw\nJSON being displayed in both collapsed and expanded states.\n\nNow getFormattedToolOutput only returns formatted markdown o\n[…]\nedOutput=true, formattedOutput=markdown\n- If formatting fails: hasFormattedOutput=false, open=true by default, raw JSON shown\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Remove incorrect fallback in getFormattedToolOutput that returned raw…",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T19:20:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "85b7cf2ffea3edfff2aabf9d9645dc91dc4f01fb",
          "body": "- Strip truncation suffix before parsing JSON in getFormattedToolOutput\n- This fixes cases where item.output is truncated ( >20k chars) and contains\n  the '… [truncated, X chars total]' suffix which breaks JSON.parse\n- Now openlore tool outputs that are truncated will still format correctly\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Handle truncated JSON in tool output formatting",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T19:18:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5e08da2801b62f057da7c106f28f57cd630a990",
          "body": "- Tool cards with formatted output (openlore, __pi_render) now show formatted MD by default\n- Clicking expands to show raw JSON for inspection\n- Edit/write tools with diffs still start expanded\n- Extension-provided HTML still starts expanded\n- This matches user requirement: formatted MD visible by default, raw JSON on expand\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Show formatted MD when collapsed, raw JSON when expanded",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T19:15:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6654566b5e89cb78b92f9e931a9e190f11d4c73",
          "body": "- Tool cards now show only the header when collapsed (no preview content)\n- Formatted output is only shown when explicitly expanded by user\n- Extension-provided HTML preview (outputHtmlCollapsed) is still shown when collapsed\n- This ensures raw JSON is never shown by default\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Remove formatted preview from collapsed tool cards",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T19:11:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7f82aca3ec3ca3caa821831841ad3e669914abc",
          "body": "…raw JSON on expand\n\n- Tool cards now always start collapsed by default (except for edit/write tools with diffs, or when extension provides HTML)\n- When collapsed: show formatted output (from __pi_render or openlore fields) if available\n- When expanded: show formatted output + raw JSON for inspection\n- This ensures raw JSON is never shown by default\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Always start tool cards collapsed; show formatted output in preview, …",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T19:09:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ca3df8b1f1de40e2f9d41d7a2f4fae60652ce8a",
          "body": "…SON on expand\n\n- Extract formatted user-facing text from tool output (supports __pi_render envelope and openlore fields)\n- When collapsed: show formatted output if available\n- When expanded: show formatted output (if available) + raw JSON for inspection\n- This matches the user's requirement: formatted output by default, raw JSON accessible via expand\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Refactor tool card rendering: show formatted output by default, raw J…",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T18:35:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb52c4db4f40a0e827db1724ac341daddf21c0cd",
          "body": "The args pre block was showing raw JSON for tools like openlore, which was\nduplicating content with the formatted output. Since the important information\nis in the tool output itself, we remove the args pre block entirely.\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Remove raw args display from tool cards to avoid duplicate content",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T18:31:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "044e8fa145a6b7d8fbe345f345619948adbe46b4",
          "body": "- Add ReactMarkdown rendering for tool output when outputHtml is not available\n- Add formatToolOutput helper to extract markdown from JSON tool results\n  (supports __pi_render envelope and openlore-style fields like task, nextSteps, etc.)\n- Use RenderedHtml for outputHtml/callHtml when available\n- M\n[…]\nool results (especially from openlore) are displayed with proper\nmarkdown formatting instead of raw text/JSON in a pre block.\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>",
          "is_bot": false,
          "headline": "Format tool output as markdown in web UI",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T18:28:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a0bea3b6413ecd65f20349f416556a796eb67821",
          "body": null,
          "is_bot": false,
          "headline": "Fix comment: avoid nested /* */ inside JSDoc to prevent transform error",
          "author_name": "Laurent FRANCOISE",
          "author_login": "laurentftech",
          "committed_at": "2026-07-14T14:43:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 9,
      "commits_last_year": 195,
      "latest_release_at": "2026-07-19T22:00:16Z",
      "latest_release_tag": "v0.6.4",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 3,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 0.8
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "pi-outpost",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "pi",
            "coding-agent",
            "ai",
            "chat",
            "web-ui",
            "cli"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/pi-outpost",
          "is_deprecated": false,
          "latest_version": "0.6.4",
          "repository_url": "https://github.com/laurentftech/pi-outpost",
          "versions_count": 18,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2659,
          "first_published_at": "2026-07-13T10:15:06.885000Z",
          "latest_published_at": "2026-07-19T12:33:06.147000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "@pi-outpost/embed",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "pi",
            "coding-agent",
            "chat",
            "widget",
            "shadow-dom",
            "react",
            "embed"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@pi-outpost/embed",
          "is_deprecated": false,
          "latest_version": "0.6.4",
          "repository_url": "https://github.com/laurentftech/pi-outpost",
          "versions_count": 9,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1412,
          "first_published_at": "2026-07-13T10:19:59.072000Z",
          "latest_published_at": "2026-07-19T12:33:20.177000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 4,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 4
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "embed/tsconfig.json",
        "server/tsconfig.json",
        "web/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 6851374,
      "source_files_sampled": 81,
      "oversized_source_files": 2,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 3237
    },
    "dependencies": {
      "manifests": [
        "cli/package.json",
        "embed/package.json",
        "package.json",
        "server/package.json",
        "shared/package.json",
        "web/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "@fastify/static",
            "direct": true,
            "version": "9.3.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-83w8-p2f5-377r",
              "GHSA-8pvw-jcv7-9cmj"
            ],
            "fixed_version": "10.1.2",
            "advisory_count": 2,
            "oldest_advisory_days": 0
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 1
        },
        "advisory_count": 2,
        "affected_count": 1,
        "assessed_count": 206,
        "malicious_count": 0,
        "assessed_package": "npm:pi-outpost@0.6.4",
        "unassessed_count": 0,
        "direct_affected_count": 1
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@earendil-works/pi-coding-agent",
          "manifest": "cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.80.9"
        },
        {
          "name": "@fastify/static",
          "manifest": "cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.3.0"
        },
        {
          "name": "@fastify/websocket",
          "manifest": "cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.0.2"
        },
        {
          "name": "fastify",
          "manifest": "cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.3.0"
        },
        {
          "name": "ws",
          "manifest": "cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.21.0"
        },
        {
          "name": "pi-outpost",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.6.4"
        },
        {
          "name": "@earendil-works/pi-coding-agent",
          "manifest": "server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.80.9"
        },
        {
          "name": "@fastify/static",
          "manifest": "server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.3.0"
        },
        {
          "name": "@fastify/websocket",
          "manifest": "server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.0.2"
        },
        {
          "name": "@pi-outpost/shared",
          "manifest": "server/package.json",
          "ecosystem": "npm",
          "version_constraint": "*"
        },
        {
          "name": "fastify",
          "manifest": "server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.3.0"
        },
        {
          "name": "@pi-outpost/shared",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "*"
        },
        {
          "name": "@tailwindcss/vite",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.2"
        },
        {
          "name": "highlight.js",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.11.1"
        },
        {
          "name": "katex",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.16.47"
        },
        {
          "name": "mermaid",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.16.0"
        },
        {
          "name": "react",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.7"
        },
        {
          "name": "react-dom",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.7"
        },
        {
          "name": "react-markdown",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.1.0"
        },
        {
          "name": "rehype-katex",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.0.1"
        },
        {
          "name": "remark-gfm",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.1"
        },
        {
          "name": "remark-math",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.0.0"
        },
        {
          "name": "tailwindcss",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.2"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@earendil-works/pi-coding-agent",
            "direct": true,
            "version": "0.80.9",
            "ecosystem": "npm"
          },
          {
            "name": "@earendil-works/pi-coding-agent",
            "direct": true,
            "version": "^0.80.9",
            "ecosystem": "npm"
          },
          {
            "name": "@fastify/static",
            "direct": true,
            "version": "9.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fastify/static",
            "direct": true,
            "version": "^9.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fastify/websocket",
            "direct": true,
            "version": "11.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fastify/websocket",
            "direct": true,
            "version": "^11.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@pi-outpost/shared",
            "direct": true,
            "version": "*",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/vite",
            "direct": true,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/vite",
            "direct": true,
            "version": "^4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "fastify",
            "direct": true,
            "version": "5.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "fastify",
            "direct": true,
            "version": "^5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "highlight.js",
            "direct": true,
            "version": "10.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "highlight.js",
            "direct": true,
            "version": "11.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "highlight.js",
            "direct": true,
            "version": "^11.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "katex",
            "direct": true,
            "version": "0.16.47",
            "ecosystem": "npm"
          },
          {
            "name": "katex",
            "direct": true,
            "version": "^0.16.47",
            "ecosystem": "npm"
          },
          {
            "name": "mermaid",
            "direct": true,
            "version": "11.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "mermaid",
            "direct": true,
            "version": "^11.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "pi-outpost",
            "direct": true,
            "version": "0.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "react",
            "direct": true,
            "version": "19.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "react",
            "direct": true,
            "version": "^19.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "react-dom",
            "direct": true,
            "version": "19.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "react-dom",
            "direct": true,
            "version": "^19.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "react-markdown",
            "direct": true,
            "version": "10.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "react-markdown",
            "direct": true,
            "version": "^10.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "rehype-katex",
            "direct": true,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "rehype-katex",
            "direct": true,
            "version": "^7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "remark-gfm",
            "direct": true,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "remark-gfm",
            "direct": true,
            "version": "^4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "remark-math",
            "direct": true,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "remark-math",
            "direct": true,
            "version": "^6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tailwindcss",
            "direct": true,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "tailwindcss",
            "direct": true,
            "version": "^4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "ws",
            "direct": true,
            "version": "8.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "ws",
            "direct": true,
            "version": "^8.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "@antfu/install-pkg",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/sdk",
            "direct": false,
            "version": "0.91.1",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-crypto/crc32",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-crypto/sha256-browser",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-crypto/sha256-js",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-crypto/supports-web-crypto",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-crypto/util",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/client-bedrock-runtime",
            "direct": false,
            "version": "3.1048.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/core",
            "direct": false,
            "version": "3.974.11",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-env",
            "direct": false,
            "version": "3.972.37",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-http",
            "direct": false,
            "version": "3.972.39",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-ini",
            "direct": false,
            "version": "3.972.41",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-login",
            "direct": false,
            "version": "3.972.41",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-node",
            "direct": false,
            "version": "3.972.42",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-process",
            "direct": false,
            "version": "3.972.37",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-sso",
            "direct": false,
            "version": "3.972.41",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-web-identity",
            "direct": false,
            "version": "3.972.41",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/eventstream-handler-node",
            "direct": false,
            "version": "3.972.16",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/middleware-eventstream",
            "direct": false,
            "version": "3.972.12",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/middleware-websocket",
            "direct": false,
            "version": "3.972.19",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/nested-clients",
            "direct": false,
            "version": "3.997.9",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/signature-v4-multi-region",
            "direct": false,
            "version": "3.996.27",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/token-providers",
            "direct": false,
            "version": "3.1048.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/types",
            "direct": false,
            "version": "3.973.8",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/util-locate-window",
            "direct": false,
            "version": "3.965.5",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/xml-builder",
            "direct": false,
            "version": "3.972.24",
            "ecosystem": "npm"
          },
          {
            "name": "@aws/lambda-invoke-store",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/runtime",
            "direct": false,
            "version": "7.29.2",
            "ecosystem": "npm"
          },
          {
            "name": "@braintree/sanitize-url",
            "direct": false,
            "version": "7.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@chevrotain/types",
            "direct": false,
            "version": "11.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@earendil-works/pi-agent-core",
            "direct": false,
            "version": "0.80.9",
            "ecosystem": "npm"
          },
          {
            "name": "@earendil-works/pi-ai",
            "direct": false,
            "version": "0.80.9",
            "ecosystem": "npm"
          },
          {
            "name": "@earendil-works/pi-tui",
            "direct": false,
            "version": "0.80.9",
            "ecosystem": "npm"
          },
          {
            "name": "@emnapi/core",
            "direct": false,
            "version": "1.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "@emnapi/runtime",
            "direct": false,
            "version": "1.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "@emnapi/wasi-threads",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/aix-ppc64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openharmony-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@fastify/accept-negotiator",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@fastify/ajv-compiler",
            "direct": false,
            "version": "4.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@fastify/error",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fastify/fast-json-stringify-compiler",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fastify/forwarded",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@fastify/merge-json-schemas",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@fastify/proxy-addr",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fastify/send",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@google/genai",
            "direct": false,
            "version": "1.52.0",
            "ecosystem": "npm"
          },
          {
            "name": "@iconify/types",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@iconify/utils",
            "direct": false,
            "version": "3.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.3.13",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/remapping",
            "direct": false,
            "version": "2.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/resolve-uri",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.31",
            "ecosystem": "npm"
          },
          {
            "name": "@lukeed/ms",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-darwin-arm64",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-darwin-universal",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-darwin-x64",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-arm64-gnu",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-arm64-musl",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-riscv64-gnu",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-x64-gnu",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-x64-musl",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-win32-arm64-msvc",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-win32-x64-msvc",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mermaid-js/parser",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@microsoft/api-extractor",
            "direct": false,
            "version": "7.58.9",
            "ecosystem": "npm"
          },
          {
            "name": "@microsoft/api-extractor",
            "direct": false,
            "version": "^7.58.9",
            "ecosystem": "npm"
          },
          {
            "name": "@microsoft/api-extractor-model",
            "direct": false,
            "version": "7.33.8",
            "ecosystem": "npm"
          },
          {
            "name": "@microsoft/tsdoc",
            "direct": false,
            "version": "0.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "@microsoft/tsdoc-config",
            "direct": false,
            "version": "0.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "@mistralai/mistralai",
            "direct": false,
            "version": "2.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@napi-rs/wasm-runtime",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "@nodable/entities",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@opentelemetry/api",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "@opentelemetry/semantic-conventions",
            "direct": false,
            "version": "1.41.1",
            "ecosystem": "npm"
          },
          {
            "name": "@oxc-project/types",
            "direct": false,
            "version": "0.138.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-android-arm-eabi",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-android-arm64",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-darwin-arm64",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-darwin-x64",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-freebsd-x64",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-arm-gnueabihf",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-arm-musleabihf",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-arm64-gnu",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-arm64-musl",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-ppc64-gnu",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-riscv64-gnu",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-riscv64-musl",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-s390x-gnu",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-x64-gnu",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-linux-x64-musl",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-openharmony-arm64",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-win32-arm64-msvc",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-win32-ia32-msvc",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxlint/binding-win32-x64-msvc",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "@pi-outpost/embed",
            "direct": false,
            "version": "0.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@pinojs/redact",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@playwright/test",
            "direct": false,
            "version": "1.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@playwright/test",
            "direct": false,
            "version": "^1.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/aspromise",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/base64",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/codegen",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/eventemitter",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/fetch",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/float",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/path",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/pool",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/utf8",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-android-arm64",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-darwin-arm64",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-darwin-x64",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-freebsd-x64",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-arm-gnueabihf",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-arm64-gnu",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-arm64-musl",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-ppc64-gnu",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-s390x-gnu",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-x64-gnu",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-x64-musl",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-openharmony-arm64",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-wasm32-wasi",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-win32-arm64-msvc",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-win32-x64-msvc",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/pluginutils",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/pluginutils",
            "direct": false,
            "version": "5.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rushstack/node-core-library",
            "direct": false,
            "version": "5.23.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rushstack/problem-matcher",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rushstack/rig-package",
            "direct": false,
            "version": "0.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rushstack/terminal",
            "direct": false,
            "version": "0.24.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rushstack/ts-command-line",
            "direct": false,
            "version": "5.3.10",
            "ecosystem": "npm"
          },
          {
            "name": "@silvia-odwyer/photon-node",
            "direct": false,
            "version": "0.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/core",
            "direct": false,
            "version": "3.24.3",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/credential-provider-imds",
            "direct": false,
            "version": "4.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/fetch-http-handler",
            "direct": false,
            "version": "5.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/is-array-buffer",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/node-http-handler",
            "direct": false,
            "version": "4.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/signature-v4",
            "direct": false,
            "version": "5.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/types",
            "direct": false,
            "version": "4.14.2",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/util-buffer-from",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/util-utf8",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/node",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-android-arm64",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-darwin-arm64",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-darwin-x64",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-freebsd-x64",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-linux-arm-gnueabihf",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-linux-arm64-gnu",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-linux-arm64-musl",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-linux-x64-gnu",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-linux-x64-musl",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-wasm32-wasi",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-win32-arm64-msvc",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-win32-x64-msvc",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tybys/wasm-util",
            "direct": false,
            "version": "0.10.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/argparse",
            "direct": false,
            "version": "1.0.38",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3",
            "direct": false,
            "version": "7.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-array",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-axis",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-brush",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-chord",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-color",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-contour",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-delaunay",
            "direct": false,
            "version": "6.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-dispatch",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-drag",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-dsv",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-ease",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-fetch",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-force",
            "direct": false,
            "version": "3.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-format",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-geo",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-hierarchy",
            "direct": false,
            "version": "3.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-interpolate",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-path",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-polygon",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-quadtree",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-random",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-scale",
            "direct": false,
            "version": "4.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-scale-chromatic",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-selection",
            "direct": false,
            "version": "3.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-shape",
            "direct": false,
            "version": "3.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-time",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-time-format",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-timer",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-transition",
            "direct": false,
            "version": "3.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-zoom",
            "direct": false,
            "version": "3.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "@types/debug",
            "direct": false,
            "version": "4.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree-jsx",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/geojson",
            "direct": false,
            "version": "7946.0.16",
            "ecosystem": "npm"
          },
          {
            "name": "@types/hast",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/katex",
            "direct": false,
            "version": "0.16.8",
            "ecosystem": "npm"
          },
          {
            "name": "@types/mdast",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/ms",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "22.19.19",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "24.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "^24.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "^24.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/react",
            "direct": false,
            "version": "19.2.17",
            "ecosystem": "npm"
          },
          {
            "name": "@types/react",
            "direct": false,
            "version": "^19.2.17",
            "ecosystem": "npm"
          },
          {
            "name": "@types/react-dom",
            "direct": false,
            "version": "19.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/react-dom",
            "direct": false,
            "version": "^19.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/retry",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/trusted-types",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/unist",
            "direct": false,
            "version": "2.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "@types/unist",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/ws",
            "direct": false,
            "version": "8.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/ws",
            "direct": false,
            "version": "^8.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "@ungap/structured-clone",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@upsetjs/venn.js",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@vitejs/plugin-react",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@vitejs/plugin-react",
            "direct": false,
            "version": "^6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@volar/language-core",
            "direct": false,
            "version": "2.4.28",
            "ecosystem": "npm"
          },
          {
            "name": "@volar/source-map",
            "direct": false,
            "version": "2.4.28",
            "ecosystem": "npm"
          },
          {
            "name": "@volar/typescript",
            "direct": false,
            "version": "2.4.28",
            "ecosystem": "npm"
          },
          {
            "name": "abstract-logging",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.17.0",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "7.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "8.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "8.20.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-draft-04",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-formats",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "6.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "atomic-sleep",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "avvio",
            "direct": false,
            "version": "9.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "bail",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "base64-js",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "bignumber.js",
            "direct": false,
            "version": "9.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "bowser",
            "direct": false,
            "version": "2.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-equal-constant-time",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ccount",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "5.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "character-entities",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "character-entities-html4",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "character-entities-legacy",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "character-reference-invalid",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "comma-separated-tokens",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "8.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "compare-versions",
            "direct": false,
            "version": "6.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "concurrently",
            "direct": false,
            "version": "10.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "confbox",
            "direct": false,
            "version": "0.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "confbox",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "content-disposition",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "cookie",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "cose-base",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "cose-base",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "csstype",
            "direct": false,
            "version": "3.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "cytoscape",
            "direct": false,
            "version": "3.34.0",
            "ecosystem": "npm"
          },
          {
            "name": "cytoscape-cose-bilkent",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "cytoscape-fcose",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3",
            "direct": false,
            "version": "7.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-array",
            "direct": false,
            "version": "2.12.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-array",
            "direct": false,
            "version": "3.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "d3-axis",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-brush",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-chord",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-color",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-contour",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "d3-delaunay",
            "direct": false,
            "version": "6.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "d3-dispatch",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-drag",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-dsv",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-ease",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-fetch",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-force",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-format",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "d3-geo",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-hierarchy",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "d3-interpolate",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-path",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "d3-path",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-polygon",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-quadtree",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-random",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-sankey",
            "direct": false,
            "version": "0.12.3",
            "ecosystem": "npm"
          },
          {
            "name": "d3-scale",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "d3-scale-chromatic",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-selection",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-shape",
            "direct": false,
            "version": "1.3.7",
            "ecosystem": "npm"
          },
          {
            "name": "d3-shape",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-time",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-time-format",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-timer",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-transition",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-zoom",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dagre-d3-es",
            "direct": false,
            "version": "7.0.14",
            "ecosystem": "npm"
          },
          {
            "name": "data-uri-to-buffer",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "dayjs",
            "direct": false,
            "version": "1.11.21",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "decode-named-character-reference",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "delaunator",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "depd",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dequal",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "detect-libc",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "devlop",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "8.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "dompurify",
            "direct": false,
            "version": "3.4.11",
            "ecosystem": "npm"
          },
          {
            "name": "duplexify",
            "direct": false,
            "version": "4.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "ecdsa-sig-formatter",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "10.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "end-of-stream",
            "direct": false,
            "version": "1.4.5",
            "ecosystem": "npm"
          },
          {
            "name": "enhanced-resolve",
            "direct": false,
            "version": "5.21.6",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-toolkit",
            "direct": false,
            "version": "1.49.0",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "^0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-html",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "estree-util-is-identifier-name",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "estree-walker",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "exsolve",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "extend",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "fast-decode-uri-component",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-json-stringify",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-querystring",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "fast-uri",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-xml-builder",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-xml-parser",
            "direct": false,
            "version": "5.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "fastify-plugin",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fastify-plugin",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fastq",
            "direct": false,
            "version": "1.20.1",
            "ecosystem": "npm"
          },
          {
            "name": "fdir",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "fetch-blob",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-my-way",
            "direct": false,
            "version": "9.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "formdata-polyfill",
            "direct": false,
            "version": "4.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "fs-extra",
            "direct": false,
            "version": "11.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "gaxios",
            "direct": false,
            "version": "7.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "gcp-metadata",
            "direct": false,
            "version": "8.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "get-east-asian-width",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "13.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "google-auth-library",
            "direct": false,
            "version": "10.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "google-logging-utils",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "hachure-fill",
            "direct": false,
            "version": "0.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "hast-util-from-dom",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "hast-util-from-html",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "hast-util-from-html-isomorphic",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hast-util-from-parse5",
            "direct": false,
            "version": "8.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "hast-util-is-element",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hast-util-parse-selector",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hast-util-to-jsx-runtime",
            "direct": false,
            "version": "2.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "hast-util-to-text",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hast-util-whitespace",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hastscript",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "9.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "html-url-attributes",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "http-errors",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "http-proxy-agent",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "import-lazy",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "import-meta-resolve",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "inline-style-parser",
            "direct": false,
            "version": "0.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "internmap",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "internmap",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "ipaddr.js",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-alphabetical",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-alphanumerical",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.16.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-decimal",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-hexadecimal",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-obj",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "jiti",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jju",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-bigint",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-ref-resolver",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-to-ts",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsonfile",
            "direct": false,
            "version": "6.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "jwa",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jws",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "khroma",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "kolorist",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "layout-base",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "layout-base",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "light-my-request",
            "direct": false,
            "version": "6.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-android-arm64",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-darwin-arm64",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-darwin-x64",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-freebsd-x64",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-arm-gnueabihf",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-arm64-gnu",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-arm64-musl",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-x64-gnu",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-x64-musl",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-win32-arm64-msvc",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-win32-x64-msvc",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "local-pkg",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash-es",
            "direct": false,
            "version": "4.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "long",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "longest-streak",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "11.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "11.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "magic-string",
            "direct": false,
            "version": "0.30.21",
            "ecosystem": "npm"
          },
          {
            "name": "markdown-table",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "marked",
            "direct": false,
            "version": "16.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "marked",
            "direct": false,
            "version": "18.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-find-and-replace",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-from-markdown",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-gfm",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-gfm-autolink-literal",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-gfm-footnote",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-gfm-strikethrough",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-gfm-table",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-gfm-task-list-item",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-math",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-mdx-expression",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-mdx-jsx",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-mdxjs-esm",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-phrasing",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-to-hast",
            "direct": false,
            "version": "13.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-to-markdown",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "mdast-util-to-string",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromark",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-core-commonmark",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-extension-gfm",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-extension-gfm-autolink-literal",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-extension-gfm-footnote",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-extension-gfm-strikethrough",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-extension-gfm-table",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-extension-gfm-tagfilter",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-extension-gfm-task-list-item",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-extension-math",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-factory-destination",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-factory-label",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-factory-space",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-factory-title",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-factory-whitespace",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-util-character",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-util-chunked",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-util-classify-character",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-util-combine-extensions",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-util-decode-numeric-character-reference",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-util-decode-string",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-util-encode",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-util-html-tag-name",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-util-normalize-identifier",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-util-resolve-all",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-util-sanitize-uri",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-util-subtokenize",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-util-symbol",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromark-util-types",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "mime",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "10.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "10.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "mlly",
            "direct": false,
            "version": "1.8.2",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.15",
            "ecosystem": "npm"
          },
          {
            "name": "node-domexception",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-fetch",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "on-exit-leak-free",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "openai",
            "direct": false,
            "version": "6.26.0",
            "ecosystem": "npm"
          },
          {
            "name": "oxlint",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "npm"
          },
          {
            "name": "oxlint",
            "direct": false,
            "version": "^1.71.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-retry",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "package-manager-detector",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "parse-entities",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "parse5",
            "direct": false,
            "version": "7.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "partial-json",
            "direct": false,
            "version": "0.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "path-browserify",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-data-parser",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-expression-matcher",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-key",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-parse",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "path-scurry",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "pathe",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "pino",
            "direct": false,
            "version": "10.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "pino-abstract-transport",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pino-std-serializers",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-types",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-types",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "playwright",
            "direct": false,
            "version": "1.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "playwright-core",
            "direct": false,
            "version": "1.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "points-on-curve",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "points-on-path",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "8.5.16",
            "ecosystem": "npm"
          },
          {
            "name": "process-warning",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "process-warning",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "proper-lockfile",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "property-information",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "protobufjs",
            "direct": false,
            "version": "7.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "quansync",
            "direct": false,
            "version": "0.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "quick-format-unescaped",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "3.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "real-require",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "real-require",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "remark-parse",
            "direct": false,
            "version": "11.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "remark-rehype",
            "direct": false,
            "version": "11.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "remark-stringify",
            "direct": false,
            "version": "11.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "require-from-string",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.12",
            "ecosystem": "npm"
          },
          {
            "name": "ret",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "retry",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "retry",
            "direct": false,
            "version": "0.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "reusify",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "rfdc",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "robust-predicates",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "rolldown",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "roughjs",
            "direct": false,
            "version": "4.6.6",
            "ecosystem": "npm"
          },
          {
            "name": "rw",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "rxjs",
            "direct": false,
            "version": "7.8.2",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-regex2",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-stable-stringify",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "scheduler",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "secure-json-parse",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.7.4",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.8.5",
            "ecosystem": "npm"
          },
          {
            "name": "set-cookie-parser",
            "direct": false,
            "version": "2.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "setprototypeof",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-command",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-regex",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shell-quote",
            "direct": false,
            "version": "1.8.4",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "sonic-boom",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "space-separated-tokens",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "split2",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "sprintf-js",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "statuses",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "stream-shift",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "string-argv",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "stringify-entities",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "strnum",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "style-to-js",
            "direct": false,
            "version": "1.1.21",
            "ecosystem": "npm"
          },
          {
            "name": "style-to-object",
            "direct": false,
            "version": "1.0.14",
            "ecosystem": "npm"
          },
          {
            "name": "stylis",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "10.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "8.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tapable",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "thread-stream",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinyexec",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.17",
            "ecosystem": "npm"
          },
          {
            "name": "toad-cache",
            "direct": false,
            "version": "3.7.4",
            "ecosystem": "npm"
          },
          {
            "name": "toidentifier",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tree-kill",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "trim-lines",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "trough",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-algebra",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-dedent",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "tsx",
            "direct": false,
            "version": "4.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "tsx",
            "direct": false,
            "version": "^4.19.0",
            "ecosystem": "npm"
          },
          {
            "name": "tsx",
            "direct": false,
            "version": "^4.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "typebox",
            "direct": false,
            "version": "1.1.38",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "^5.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "~6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "ufo",
            "direct": false,
            "version": "1.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "undici",
            "direct": false,
            "version": "8.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "6.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "7.18.2",
            "ecosystem": "npm"
          },
          {
            "name": "unified",
            "direct": false,
            "version": "11.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-find-after",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-is",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-position",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-remove-position",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-stringify-position",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-visit",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-visit-parents",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "universalify",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "unplugin",
            "direct": false,
            "version": "2.3.11",
            "ecosystem": "npm"
          },
          {
            "name": "unplugin-dts",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "14.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "vfile",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "vfile-location",
            "direct": false,
            "version": "5.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "vfile-message",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "8.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "^8.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "vite-plugin-dts",
            "direct": false,
            "version": "5.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "vite-plugin-dts",
            "direct": false,
            "version": "^5.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "vscode-uri",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "web",
            "direct": false,
            "version": "*",
            "ecosystem": "npm"
          },
          {
            "name": "web",
            "direct": false,
            "version": "0.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "web-namespaces",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "web-streams-polyfill",
            "direct": false,
            "version": "3.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-virtual-modules",
            "direct": false,
            "version": "0.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "9.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "xml-naming",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yaml",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "18.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "22.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "zod",
            "direct": false,
            "version": "3.25.76",
            "ecosystem": "npm"
          },
          {
            "name": "zod-to-json-schema",
            "direct": false,
            "version": "3.25.2",
            "ecosystem": "npm"
          },
          {
            "name": "zwitch",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 684,
        "direct_count": 35,
        "indirect_count": 649
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 1,
        "merged_prs": 9,
        "open_issues": 3,
        "closed_ratio": 0.5,
        "closed_issues": 3,
        "closed_unmerged_prs": 1
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "laurentftech",
          "commits": 159,
          "avatar_url": "https://avatars.githubusercontent.com/u/44120190?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 36,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.815
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 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": 2,
            "reason": "dependency not pinned by hash detected -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 10,
            "reason": "SAST tool is run on all commits",
            "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": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 10,
            "reason": "GitHub workflow tokens follow principle of least privilege",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "10 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "b69d3416ae6dd50afa78e95778984e6454fc3663",
        "ran_at": "2026-07-25T09:56:24Z",
        "aggregate_score": 4.3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-24T17:22:53Z",
      "oldest_open_prs": [
        {
          "number": 17,
          "created_at": "2026-07-24T17:22:53Z",
          "last_comment_at": "2026-07-24T17:23:43Z",
          "last_comment_author": "socket-security"
        }
      ],
      "last_merged_pr_at": "2026-07-18T16:45:32Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 4,
          "created_at": "2026-07-09T21:02:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 14,
          "created_at": "2026-07-17T11:40:19Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 16,
          "created_at": "2026-07-18T12:07:54Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/laurentftech/pi-outpost",
    "host": "github.com",
    "name": "pi-outpost",
    "owner": "laurentftech"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 57,
      "inputs": {
        "security": 50,
        "vitality": 74,
        "community": 36,
        "governance": 52,
        "engineering": 71
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 74,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "commits_last_year": 195,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 3
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "3/52 weeks with commits",
                "points": 2.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "195 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 195
                    }
                  }
                ],
                "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": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 9,
              "latest_release_tag": "v0.6.4",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 0.8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "9 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "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": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": 36,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 8,
            "inputs": {
              "forks": 0,
              "stars": 4,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "4 stars",
                "points": 7.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "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": "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": 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
              }
            ]
          },
          {
            "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": [
                "pi-outpost",
                "@pi-outpost/embed"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 4071
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "4,071 downloads/month across npm",
                "points": 48.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 4071,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 52,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 19,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.815
            },
            "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 82% of commits",
                "points": 4.2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 82
                    }
                  }
                ],
                "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 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "merged_prs": 9,
              "open_issues": 3,
              "closed_issues": 3,
              "issue_closed_ratio": 0.5,
              "closed_unmerged_prs": 1
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "50% of issues closed",
                "points": 23.4,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 50
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "9/10 decided PRs merged",
                "points": 34.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 9,
                      "decided": 10
                    }
                  }
                ],
                "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": "at_risk",
            "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": 47,
            "inputs": {
              "followers": 6,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "laurentftech",
              "public_repos": 20,
              "account_age_days": 2841
            },
            "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": "6 followers of laurentftech",
                "points": 6.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 6,
                      "login": "laurentftech"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "20 public repos, account ~7 yr old",
                "points": 21.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 20
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 7
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "pi-outpost",
                "@pi-outpost/embed"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "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 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "18 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "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": 71,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "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": "moderate",
        "name": "Security",
        "value": 50,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 43,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.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": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "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/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "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 2",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is run on all commits",
                "points": 5,
                "status": "met",
                "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": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "GitHub workflow tokens follow principle of least privilege",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "10 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "good",
            "name": "Dependency advisories",
            "note": "Matched the npm:pi-outpost@0.6.4 runtime dependency closure — what installing the published package pulls in — 206 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:pi-outpost@0.6.4",
                  "assessed": 206
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 79,
            "inputs": {
              "source": "osv",
              "advisories": 2,
              "affected_packages": 1,
              "assessed_packages": 206,
              "unassessed_packages": 0,
              "affected_by_severity": "high 1",
              "direct_affected_packages": 1
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "1 affected: @fastify/static 9.3.0 (high 7.5)",
                "points": 14,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "@fastify/static 9.3.0 (high 7.5)"
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory has been public longer than 90 days",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "advisories_none_stale",
                    "params": {
                      "days": 90
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 206,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 62,
        "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.81,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 3237
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.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": "81 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 81,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 47,
            "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": false,
              "typecheck_configs": [
                "embed/tsconfig.json",
                "server/tsconfig.json",
                "web/tsconfig.json"
              ],
              "agent_commit_share": 0.01,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "embed/tsconfig.json, server/tsconfig.json, web/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "embed/tsconfig.json, server/tsconfig.json, web/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": "1 of the last 100 commits agent-authored or agent-credited",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 1,
                      "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 2",
                "points": 2,
                "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": 6851374,
              "source_files_sampled": 81,
              "oversized_source_files": 2
            },
            "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": "2/81 source files over 60KB",
                "points": 53.6,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 81,
                      "oversized": 2
                    }
                  }
                ],
                "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": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T09:56:32.613576Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/l/laurentftech/pi-outpost.svg",
  "full_name": "laurentftech/pi-outpost",
  "license_state": "standard",
  "license_spdx": "MIT"
}

评分是信号,而非担保。 评分反映的是 GitHub 上公开可见的实践——不是代码审计,也不是安全保证。

缺失数据将被剔除并重新归一化权重,绝不按零分计。方法论已版本化并公开:指标 v1.13.0、模式 v0.27.0—— 完整方法论 · 指标知识库.

单项结果在整体记录中的位置: 汇总统计npm.