公开记录
软件健康报告模式 0.26.0 · 指标 1.13.0 · 2026-07-22 19:35 UTC

ably / ably-js

Javascript, Node, Typescript, React, React Native client library SDK for Ably realtime messaging service

TypeScript · JavaScriptApache-2.0★ 361 星标⑂ 61 复刻始于 2012年11月在 GitHub 上查看 ↗

ably/ably-js 的健康指数为 100 分中的 84 分,处于「良好」区间。 其得分最高的类别是Vitality(98/100),最低的是Security(75/100)。 最近一次更新在今天。 近期的大部分工作由 3 位贡献者完成。

84
总分 / 100
良好

软件健康指数

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

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

评分画像

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

所有权

214 关注者123 个公开仓库始于 2012年6月

该仓库由组织支持——共同承担、可问责的托管责任,可延续于任何单一维护者之后。

软件包生态系统

注册表软件包版本月下载量版本数最近发布
npmably2.25.04,424,5472165 天前

按类别列示的指标

活力

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

98优秀 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 0 天前
31.8/36提交节奏 — 52 周中有 46 周有提交
18/18提交量 — 最近一年 399 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year399
human_commit_share1
days_since_last_push0
active_weeks_last_year46

发布纪律

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

社区与采用

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

75良好 · 占总体的 18%
评分方式
41.5/60星标 — 361 个星标
14.8/25复刻 — 61 个复刻
8.1/15关注者 — 30 位关注者
所用输入
forks61
stars361
watchers30
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

70良好
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(Apache-2.0)
18/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
评分方式
80/80月度下载量 — npm 合计每月 4,424,547 次下载
0/20注册表被依赖数 — 该生态系统不报告此项
所用输入
packagesably
dependents
ecosystemsnpm
total_downloads
monthly_downloads4,424,547
已排除计分(无数据或不适用):注册表被依赖数。 其余权重已重新归一化。

可持续性与治理

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

81良好 · 占总体的 24%
评分方式
36/54巴士系数 — 3 位贡献者贡献了半数提交
17.6/22.5提交分布 — 头号贡献者编写了 22% 的提交
13.5/13.5贡献者广度 — 50 位贡献者
10/10OpenSSF Scorecard:Contributors — project has 22 contributing companies or organizations
所用输入
bus_factor3
contributors_sampled50
top_contributor_share0.217
评分方式
37.4/46.8议题解决 — 80% 的议题已关闭
27.2/38.3PR 接受 — 已裁定的 PR 中 1,013/1,424 已合并
15/15OpenSSF Scorecard:Code-Review — all changesets reviewed
所用输入
merged_prs1,013
open_issues160
closed_issues644
issue_closed_ratio0.801
closed_unmerged_prs411
评分方式
30/30所有权背书 — 组织持有
0/20已验证域名
16.8/25所有者影响力 — ably 有 214 位关注者
25/25既往记录 — 123 个公开仓库,账户约 14 年
所用输入
followers214
owner_typeOrganization
is_verified
owner_loginably
public_repos123
account_age_days5,148
评分方式
25/25已发布且可解析 — npm 上有 1 个软件包
35/35发布时效 — 最近一次发布于 5 天前
20/20版本历史 — 216 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesably
ecosystemsnpm
any_deprecated
min_days_since_publish5

工程质量

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

90优秀 · 占总体的 20%

工程实践

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

文档

90优秀
评分方式
30/30README
25/25文档目录
15/15文档 / 主页站点 — https://ably.com/download
10/10仓库描述
10/10主题标签 — 10 个主题标签
0/10Wiki
所用输入
topicsclient-library, rest, realtime, js, javascript, realtime-messaging, react-native, sdk, typescript, ts
has_wiki
homepagehttps://ably.com/download
has_readme
has_docs_dir
has_description

安全

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

75良好 · 占总体的 16%

安全态势

69中等
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — 无数据
2.5/2.5CI-Tests — 7 out of 7 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
7.5/7.5Code-Review — all changesets reviewed
2.5/2.5Contributors — project has 22 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5许可证 — license file detected
7.5/7.5Maintained — 30 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — 无数据
5/5Pinned-Dependencies — all dependencies are pinned
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — 无数据
6/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 62 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate6.9
已排除计分(无数据或不适用):branch_protection, packaging, signed_releases。 其余权重已重新归一化。
评分方式
35/35直接依赖不含已知公告 — 没有直接依赖携带已知公告
0/25间接依赖不含已知公告 — 在此范围内,传递依赖集合无法与开发和测试依赖区分
0/40没有长期未处理的公告 — 没有公告带有发布日期
所用输入
sourceosv
advisories109
affected_packages40
assessed_packages1,043
unassessed_packages0
affected_by_severitycritical 4, high 17, moderate 14, low 5
direct_affected_packages0
已排除计分(无数据或不适用):间接依赖不含已知公告, 没有长期未处理的公告。 其余权重已重新归一化。 已将 1043 个已解析依赖与 OSV 比对。 该仓库未发布任何索引可解析的软件包,因此改为评估仓库依赖图。该图将开发与测试版本固定同交付的依赖混在一起,因此仅对声明的运行时依赖计分;传递性发现仅作为背景信息列出,不计入评分。 未对可达性进行分析。

AI 就绪度

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

85优秀 · 占总体的 0%
评分方式
45/45代理指令 — AGENTS.md, CLAUDE.md
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 100 次人类提交中有 96 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.96
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes3,743
评分方式
0/18一条命令的引导启动
22/22自动化测试
11/11Lint / 格式化配置 — .eslintrc.js, .eslintrc.json
11/11静态类型检查 — src/platform/react-hooks/tsconfig.json, test/package/browser/template/src/tsconfig.json, test/package/browser/template/tsconfig.json, tsconfig.json
10/10可复现环境 — lockfile
10/10已体现的代理实践 — 最近 100 次提交中有 61 次由代理编写或署名代理
5/8自动化维护 — 已配置依赖自动化,但在抽样提交中未观察到
10/10OpenSSF Scorecard:Pinned-Dependencies — all dependencies are pinned
所用输入
has_nix
has_tests
lockfilespackage-lock.json
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
typecheck_configssrc/platform/react-hooks/tsconfig.json, test/package/browser/template/src/tsconfig.json, test/package/browser/template/tsconfig.json, tsconfig.json
agent_commit_share0.61
toolchain_manifests
dependency_bot_commit_share0
评分方式
45/45可类型检查的代码 — TypeScript(静态类型)
54.1/55可控的文件大小 — 采样的 429 个源文件中有 7 个超过 60KB
所用输入
primary_languageTypeScript
largest_source_bytes445,747
source_files_sampled429
oversized_source_files7

关键数据

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

数据采集警告

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • deps.dev does not index npm:ably@2.25.0; advisories assessed against the repository dependency graph instead

更多细节

Star 与 Fork 历史 0 ★ / 61 ⇿
0Star
61Fork
98发布

每颗 star 和每个 fork 的添加时间,来自 GitHub 并按天汇总。累计增长位于其构成来源——每日新增——的正上方,二者可相互对照:稳定的自然增长与短暂的突增形态截然不同。当这一差别可被衡量时,它会作为增长真实性予以报告。

013253850636122015-022020-102026-07
主版本 1次版本 24修订 73

每个点涵盖 11 天。

OpenSSF Scorecard 6.9 / 10
6.9综合

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

10Binary-Artifactsno binaries found in the repo
不适用Branch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
10CI-Tests7 out of 7 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
10Code-Reviewall changesets reviewed
10Contributorsproject has 22 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10
不适用Packagingpackaging workflow not detected
10Pinned-Dependenciesall dependencies are pinned
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
不适用Signed-Releasesno releases found
8Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities62 existing vulnerabilities detected
直接依赖 6
注册表软件包版本约束清单文件
npm@ably/msgpack-js^0.4.0package.json
npmdequal^2.0.3package.json
npmfastestsmallesttextencoderdecoder^1.0.22package.json
npmgot^11.8.5package.json
npmulid^2.3.0package.json
npmws^8.17.1package.json
全部依赖 1,043

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

注册表软件包版本关系
npm@ably/msgpack-js0.4.0直接
npmdequal2.0.3直接
npmfastestsmallesttextencoderdecoder1.0.22直接
npmgot11.8.6直接
npmulid2.3.0直接
npmws8.21.0直接
npm@aashutoshrathi/word-wrap1.2.6间接
npm@ably/vcdiff-decoder1.0.6间接
npm@ampproject/remapping2.2.1间接
npm@andrewbranch/untar.js1.0.3间接
npm@arethetypeswrong/cli0.13.5间接
npm@arethetypeswrong/core0.13.5间接
npm@babel/code-frame7.12.11间接
npm@babel/code-frame7.23.5间接
npm@babel/code-frame7.29.7间接
npm@babel/compat-data7.23.5间接
npm@babel/compat-data7.29.7间接
npm@babel/core7.23.9间接
npm@babel/core7.29.7间接
npm@babel/generator7.23.6间接
npm@babel/generator7.29.7间接
npm@babel/helper-annotate-as-pure7.22.5间接
npm@babel/helper-compilation-targets7.23.6间接
npm@babel/helper-compilation-targets7.29.7间接
npm@babel/helper-environment-visitor7.22.20间接
npm@babel/helper-function-name7.23.0间接
npm@babel/helper-globals7.29.7间接
npm@babel/helper-hoist-variables7.22.5间接
npm@babel/helper-module-imports7.22.15间接
npm@babel/helper-module-imports7.29.7间接
npm@babel/helper-module-transforms7.23.3间接
npm@babel/helper-module-transforms7.29.7间接
npm@babel/helper-plugin-utils7.22.5间接
npm@babel/helper-simple-access7.22.5间接
npm@babel/helper-split-export-declaration7.22.6间接
npm@babel/helper-string-parser7.23.4间接
npm@babel/helper-string-parser7.29.7间接
npm@babel/helper-validator-identifier7.22.20间接
npm@babel/helper-validator-identifier7.29.7间接
npm@babel/helper-validator-option7.23.5间接
npm@babel/helper-validator-option7.29.7间接
npm@babel/helpers7.23.9间接
npm@babel/helpers7.29.7间接
npm@babel/highlight7.23.4间接
npm@babel/parser7.23.9间接
npm@babel/parser7.29.7间接
npm@babel/plugin-syntax-jsx7.23.3间接
npm@babel/plugin-transform-react-jsx7.23.4间接
npm@babel/plugin-transform-react-jsx-development7.22.5间接
npm@babel/plugin-transform-react-jsx-self7.23.3间接
npm@babel/plugin-transform-react-jsx-source7.23.3间接
npm@babel/runtime7.29.7间接
npm@babel/template7.23.9间接
npm@babel/template7.29.7间接
npm@babel/traverse7.23.9间接
npm@babel/traverse7.29.7间接
npm@babel/types7.23.9间接
npm@babel/types7.29.7间接
npm@colors/colors1.5.0间接
npm@cspotcode/source-map-support0.8.1间接
npm@discoveryjs/json-ext0.5.7间接
npm@es-joy/jsdoccomment0.37.1间接
npm@esbuild/aix-ppc640.19.12间接
npm@esbuild/aix-ppc640.27.7间接
npm@esbuild/android-arm0.15.18间接
npm@esbuild/android-arm0.18.20间接
npm@esbuild/android-arm0.19.12间接
npm@esbuild/android-arm0.27.7间接
npm@esbuild/android-arm640.18.20间接
npm@esbuild/android-arm640.19.12间接
npm@esbuild/android-arm640.27.7间接
npm@esbuild/android-x640.18.20间接
npm@esbuild/android-x640.19.12间接
npm@esbuild/android-x640.27.7间接
npm@esbuild/darwin-arm640.18.20间接
npm@esbuild/darwin-arm640.19.12间接
npm@esbuild/darwin-arm640.27.7间接
npm@esbuild/darwin-x640.18.20间接
npm@esbuild/darwin-x640.19.12间接
npm@esbuild/darwin-x640.27.7间接
npm@esbuild/freebsd-arm640.18.20间接
npm@esbuild/freebsd-arm640.19.12间接
npm@esbuild/freebsd-arm640.27.7间接
npm@esbuild/freebsd-x640.18.20间接
npm@esbuild/freebsd-x640.19.12间接
npm@esbuild/freebsd-x640.27.7间接
npm@esbuild/linux-arm0.18.20间接
npm@esbuild/linux-arm0.19.12间接
npm@esbuild/linux-arm0.27.7间接
npm@esbuild/linux-arm640.18.20间接
npm@esbuild/linux-arm640.19.12间接
npm@esbuild/linux-arm640.27.7间接
npm@esbuild/linux-ia320.18.20间接
npm@esbuild/linux-ia320.19.12间接
npm@esbuild/linux-ia320.27.7间接
npm@esbuild/linux-loong640.15.18间接
npm@esbuild/linux-loong640.18.20间接
npm@esbuild/linux-loong640.19.12间接
npm@esbuild/linux-loong640.27.7间接
npm@esbuild/linux-mips64el0.18.20间接
npm@esbuild/linux-mips64el0.19.12间接
npm@esbuild/linux-mips64el0.27.7间接
npm@esbuild/linux-ppc640.18.20间接
npm@esbuild/linux-ppc640.19.12间接
npm@esbuild/linux-ppc640.27.7间接
npm@esbuild/linux-riscv640.18.20间接
npm@esbuild/linux-riscv640.19.12间接
npm@esbuild/linux-riscv640.27.7间接
npm@esbuild/linux-s390x0.18.20间接
npm@esbuild/linux-s390x0.19.12间接
npm@esbuild/linux-s390x0.27.7间接
npm@esbuild/linux-x640.18.20间接
npm@esbuild/linux-x640.19.12间接
npm@esbuild/linux-x640.27.7间接
npm@esbuild/netbsd-arm640.27.7间接
npm@esbuild/netbsd-x640.18.20间接
npm@esbuild/netbsd-x640.19.12间接
npm@esbuild/netbsd-x640.27.7间接
npm@esbuild/openbsd-arm640.27.7间接
npm@esbuild/openbsd-x640.18.20间接
npm@esbuild/openbsd-x640.19.12间接
npm@esbuild/openbsd-x640.27.7间接
npm@esbuild/openharmony-arm640.27.7间接
npm@esbuild/sunos-x640.18.20间接
npm@esbuild/sunos-x640.19.12间接
npm@esbuild/sunos-x640.27.7间接
npm@esbuild/win32-arm640.18.20间接
npm@esbuild/win32-arm640.19.12间接
npm@esbuild/win32-arm640.27.7间接
npm@esbuild/win32-ia320.18.20间接
npm@esbuild/win32-ia320.19.12间接
npm@esbuild/win32-ia320.27.7间接
npm@esbuild/win32-x640.18.20间接
npm@esbuild/win32-x640.19.12间接
npm@esbuild/win32-x640.27.7间接
npm@eslint-community/eslint-utils4.4.0间接
npm@eslint-community/regexpp4.10.0间接
npm@eslint/eslintrc0.4.3间接
npm@humanwhocodes/config-array0.5.0间接
npm@humanwhocodes/object-schema1.2.1间接
npm@isaacs/cliui8.0.2间接
npm@jridgewell/gen-mapping0.3.13间接
npm@jridgewell/gen-mapping0.3.3间接
npm@jridgewell/remapping2.3.5间接
npm@jridgewell/resolve-uri3.1.1间接
npm@jridgewell/resolve-uri3.1.2间接
npm@jridgewell/set-array1.1.2间接
npm@jridgewell/source-map0.3.5间接
npm@jridgewell/sourcemap-codec1.4.15间接
npm@jridgewell/sourcemap-codec1.5.5间接
npm@jridgewell/trace-mapping0.3.22间接
npm@jridgewell/trace-mapping0.3.31间接
npm@jridgewell/trace-mapping0.3.9间接
npm@nodelib/fs.scandir2.1.5间接
npm@nodelib/fs.stat2.0.5间接
npm@nodelib/fs.walk1.2.8间接
npm@pkgjs/parseargs0.11.0间接
npm@playwright/experimental-ct-core1.41.2间接
npm@playwright/experimental-ct-react1.41.2间接
npm@playwright/test1.41.2间接
npm@rollup/pluginutils4.2.1间接
npm@rollup/rollup-android-arm-eabi4.12.0间接
npm@rollup/rollup-android-arm644.12.0间接
npm@rollup/rollup-darwin-arm644.12.0间接
npm@rollup/rollup-darwin-x644.12.0间接
npm@rollup/rollup-linux-arm-gnueabihf4.12.0间接
npm@rollup/rollup-linux-arm64-gnu4.12.0间接
npm@rollup/rollup-linux-arm64-musl4.12.0间接
npm@rollup/rollup-linux-riscv64-gnu4.12.0间接
npm@rollup/rollup-linux-x64-gnu4.12.0间接
npm@rollup/rollup-linux-x64-musl4.12.0间接
npm@rollup/rollup-win32-arm64-msvc4.12.0间接
npm@rollup/rollup-win32-ia32-msvc4.12.0间接
npm@rollup/rollup-win32-x64-msvc4.12.0间接
npm@sindresorhus/is4.6.0间接
npm@szmarczak/http-timer4.0.6间接
npm@testing-library/dom8.20.1间接
npm@testing-library/react13.4.0间接
npm@tootallnate/once2.0.1间接
npm@tsconfig/node101.0.9间接
npm@tsconfig/node121.0.11间接
npm@tsconfig/node141.0.3间接
npm@tsconfig/node161.0.4间接
npm@tsconfig/node1616.1.1间接
npm@types/aria-query5.0.4间接
npm@types/babel__core7.20.5间接
npm@types/babel__generator7.6.8间接
npm@types/babel__template7.4.4间接
npm@types/babel__traverse7.20.5间接
npm@types/body-parser1.19.5间接
npm@types/cacheable-request6.0.3间接
npm@types/caseless0.12.5间接
npm@types/chai4.3.11间接
npm@types/chai-subset1.3.5间接
npm@types/cli-table0.3.4间接
npm@types/connect3.4.38间接
npm@types/estree1.0.5间接
npm@types/estree1.0.9间接
npm@types/express4.17.21间接
npm@types/express-serve-static-core4.17.43间接
npm@types/http-cache-semantics4.0.4间接
npm@types/http-errors2.0.4间接
npm@types/jmespath0.15.2间接
npm@types/json-schema7.0.15间接
npm@types/json50.0.29间接
npm@types/keyv3.1.4间接
npm@types/mime1.3.5间接
npm@types/mocha10.0.10间接
npm@types/node18.19.8间接
npm@types/node20.11.19间接
npm@types/prop-types15.7.11间接
npm@types/qs6.9.11间接
npm@types/range-parser1.2.7间接
npm@types/react18.2.48间接
npm@types/react-dom18.2.18间接
npm@types/request2.48.12间接
npm@types/responselike1.0.3间接
npm@types/scheduler0.16.8间接
npm@types/semver7.5.6间接
npm@types/send0.17.4间接
npm@types/serve-static1.15.5间接
npm@types/tough-cookie4.0.5间接
npm@types/ws8.5.10间接
npm@typescript-eslint/eslint-plugin5.62.0间接
npm@typescript-eslint/parser5.62.0间接
npm@typescript-eslint/scope-manager5.62.0间接
npm@typescript-eslint/type-utils5.62.0间接
npm@typescript-eslint/types5.62.0间接
npm@typescript-eslint/typescript-estree5.62.0间接
npm@typescript-eslint/utils5.62.0间接
npm@typescript-eslint/visitor-keys5.62.0间接
npm@ungap/promise-all-settled1.1.2间接
npm@vitejs/plugin-react1.3.2间接
npm@vitejs/plugin-react4.2.1间接
npm@webassemblyjs/ast1.14.1间接
npm@webassemblyjs/floating-point-hex-parser1.13.2间接
npm@webassemblyjs/helper-api-error1.13.2间接
npm@webassemblyjs/helper-buffer1.14.1间接
npm@webassemblyjs/helper-numbers1.13.2间接
npm@webassemblyjs/helper-wasm-bytecode1.13.2间接
npm@webassemblyjs/helper-wasm-section1.14.1间接
npm@webassemblyjs/ieee7541.13.2间接
npm@webassemblyjs/leb1281.13.2间接
npm@webassemblyjs/utf81.13.2间接
npm@webassemblyjs/wasm-edit1.14.1间接
npm@webassemblyjs/wasm-gen1.14.1间接
npm@webassemblyjs/wasm-opt1.14.1间接
npm@webassemblyjs/wasm-parser1.14.1间接
npm@webassemblyjs/wast-printer1.14.1间接
npm@webpack-cli/configtest2.1.1间接
npm@webpack-cli/info2.0.2间接
npm@webpack-cli/serve2.0.5间接
npm@xtuc/ieee7541.2.0间接
npm@xtuc/long4.2.2间接
npmabab2.0.6间接
npmabbrev1.1.1间接
npmaccepts1.3.8间接
npmacorn7.4.1间接
npmacorn8.11.3间接
npmacorn8.17.0间接
npmacorn-globals7.0.1间接
npmacorn-import-phases1.0.4间接
npmacorn-jsx5.3.2间接
npmacorn-walk8.3.2间接
npmagent-base6.0.2间接
npmajv6.15.0间接
npmajv8.20.0间接
npmajv-formats2.1.1间接
npmajv-keywords5.1.0间接
npmansi-colors4.1.1间接
npmansi-colors4.1.3间接
npmansi-escapes6.2.0间接
npmansi-regex2.1.1间接
npmansi-regex3.0.1间接
npmansi-regex5.0.1间接
npmansi-regex6.0.1间接
npmansi-sequence-parser1.1.1间接
npmansi-styles2.2.1间接
npmansi-styles3.2.1间接
npmansi-styles4.3.0间接
npmansi-styles5.2.0间接
npmansi-styles6.2.1间接
npmansicolors0.3.2间接
npmanymatch3.1.3间接
npmarg4.1.3间接
npmargparse1.0.10间接
npmargparse2.0.1间接
npmaria-query5.1.3间接
npmarray-buffer-byte-length1.0.0间接
npmarray-each1.0.1间接
npmarray-flatten1.1.1间接
npmarray-includes3.1.7间接
npmarray-slice1.1.0间接
npmarray-union2.1.0间接
npmarray.prototype.findlastindex1.2.3间接
npmarray.prototype.flat1.3.2间接
npmarray.prototype.flatmap1.3.2间接
npmarray.prototype.tosorted1.1.2间接
npmarraybuffer.prototype.slice1.0.2间接
npmassertion-error1.1.0间接
npmastral-regex2.0.0间接
npmasync1.5.2间接
npmasync3.2.5间接
npmasynciterator.prototype1.0.0间接
npmasynckit0.4.0间接
npmavailable-typed-arrays1.0.5间接
npmaws-sdk2.1693.0间接
npmbalanced-match1.0.2间接
npmbase64-js1.0.2间接
npmbaseline-browser-mapping2.10.37间接
npmbinary-extensions2.2.0间接
npmbody-parser1.20.1间接
npmbody-parser1.20.5间接
npmbops1.0.1间接
npmbrace-expansion1.1.11间接
npmbrace-expansion2.1.1间接
npmbraces3.0.3间接
npmbrowser-stdout1.3.1间接
npmbrowserslist4.23.0间接
npmbrowserslist4.28.2间接
npmbtoa1.2.1间接
npmbuffer4.9.2间接
npmbuffer-from1.1.2间接
npmbuiltins5.0.1间接
npmbytes3.1.2间接
npmcacheable-lookup5.0.4间接
npmcacheable-request7.0.4间接
npmcall-bind1.0.5间接
npmcall-bind1.0.7间接
npmcall-bind-apply-helpers1.0.2间接
npmcall-bound1.0.4间接
npmcallsites3.1.0间接
npmcamelcase6.3.0间接
npmcaniuse-lite1.0.30001588间接
npmcaniuse-lite1.0.30001799间接
npmcardinal2.1.1间接
npmchai4.4.1间接
npmchalk1.1.3间接
npmchalk2.4.2间接
npmchalk4.1.2间接
npmchalk5.3.0间接
npmchar-regex1.0.2间接
npmcharenc0.0.2间接
npmcheck-error1.0.3间接
npmchokidar3.5.1间接
npmchrome-trace-event1.0.3间接
npmcli-table0.3.11间接
npmcli-table30.6.3间接
npmcliui7.0.4间接
npmclone-deep4.0.1间接
npmclone-response1.0.3间接
npmcolor-convert1.9.3间接
npmcolor-convert2.0.1间接
npmcolor-name1.1.3间接
npmcolor-name1.1.4间接
npmcolorette2.0.20间接
npmcolors1.0.3间接
npmcolors1.1.2间接
npmcombined-stream1.0.8间接
npmcommander10.0.1间接
npmcommander2.20.3间接
npmcommander9.4.0间接
npmcomment-parser1.3.1间接
npmconcat-map0.0.1间接
npmcontent-disposition0.5.4间接
npmcontent-type1.0.5间接
npmconvert-source-map1.9.0间接
npmconvert-source-map2.0.0间接
npmcookie0.5.0间接
npmcookie0.7.2间接
npmcookie-signature1.0.6间接
npmcors2.8.5间接
npmcreate-require1.1.1间接
npmcross-spawn7.0.6间接
npmcrypt0.0.2间接
npmcssom0.3.8间接
npmcssom0.5.0间接
npmcssstyle2.3.0间接
npmcsstype3.1.3间接
npmcsv6.3.9间接
npmcsv-generate4.4.1间接
npmcsv-parse5.5.6间接
npmcsv-stringify6.5.0间接
npmdata-urls3.0.2间接
npmdateformat4.6.3间接
npmdebug2.6.9间接
npmdebug3.2.7间接
npmdebug4.3.1间接
npmdebug4.3.4间接
npmdecamelize4.0.0间接
npmdecimal.js10.4.3间接
npmdecompress-response6.0.0间接
npmdeep-eql4.1.3间接
npmdeep-equal2.2.3间接
npmdeep-for-each3.0.0间接
npmdeep-is0.1.4间接
npmdefer-to-connect2.0.1间接
npmdefine-data-property1.1.1间接
npmdefine-data-property1.1.4间接
npmdefine-properties1.2.1间接
npmdelayed-stream1.0.0间接
npmdepd2.0.0间接
npmdestroy1.2.0间接
npmdetect-file1.0.0间接
npmdiff4.0.2间接
npmdiff5.0.0间接
npmdir-glob3.0.1间接
npmdoctrine2.1.0间接
npmdoctrine3.0.0间接
npmdom-accessibility-api0.5.16间接
npmdomexception4.0.0间接
npmdox1.0.0间接
npmdunder-proto1.0.1间接
npmduplexer0.1.2间接
npmeastasianwidth0.2.0间接
npmee-first1.1.1间接
npmejs3.1.10间接
npmelectron-to-chromium1.4.677间接
npmelectron-to-chromium1.5.373间接
npmemoji-regex8.0.0间接
npmemoji-regex9.2.2间接
npmemojilib2.4.0间接
npmencodeurl1.0.2间接
npmencodeurl2.0.0间接
npmend-of-stream1.4.4间接
npmenhanced-resolve5.24.0间接
npmenquirer2.4.1间接
npmentities3.0.1间接
npmentities4.5.0间接
npmenvinfo7.11.0间接
npmes-abstract1.22.3间接
npmes-define-property1.0.0间接
npmes-define-property1.0.1间接
npmes-errors1.3.0间接
npmes-get-iterator1.1.3间接
npmes-iterator-helpers1.0.15间接
npmes-module-lexer2.1.0间接
npmes-object-atoms1.1.2间接
npmes-set-tostringtag2.1.0间接
npmes-shim-unscopables1.0.2间接
npmes-to-primitive1.2.1间接
npmesbuild0.15.18间接
npmesbuild0.18.20间接
npmesbuild0.19.12间接
npmesbuild0.27.7间接
npmesbuild-android-640.15.18间接
npmesbuild-android-arm640.15.18间接
npmesbuild-darwin-640.15.18间接
npmesbuild-darwin-arm640.15.18间接
npmesbuild-freebsd-640.15.18间接
npmesbuild-freebsd-arm640.15.18间接
npmesbuild-linux-320.15.18间接
npmesbuild-linux-640.15.18间接
npmesbuild-linux-arm0.15.18间接
npmesbuild-linux-arm640.15.18间接
npmesbuild-linux-mips64le0.15.18间接
npmesbuild-linux-ppc64le0.15.18间接
npmesbuild-linux-riscv640.15.18间接
npmesbuild-linux-s390x0.15.18间接
npmesbuild-netbsd-640.15.18间接
npmesbuild-openbsd-640.15.18间接
npmesbuild-plugin-umd-wrapper1.0.7间接
npmesbuild-runner2.2.2间接
npmesbuild-sunos-640.15.18间接
npmesbuild-windows-320.15.18间接
npmesbuild-windows-640.15.18间接
npmesbuild-windows-arm640.15.18间接
npmescalade3.1.2间接
npmescalade3.2.0间接
npmescape-html1.0.3间接
npmescape-string-regexp1.0.5间接
npmescape-string-regexp4.0.0间接
npmescodegen2.1.0间接
npmeslint7.32.0间接
npmeslint-import-resolver-node0.3.9间接
npmeslint-module-utils2.8.0间接
npmeslint-plugin-import2.29.1间接
npmeslint-plugin-jsdoc40.3.0间接
npmeslint-plugin-react7.33.2间接
npmeslint-plugin-react-hooks4.6.0间接
npmeslint-plugin-security1.7.1间接
npmeslint-scope5.1.1间接
npmeslint-utils2.1.0间接
npmeslint-visitor-keys1.3.0间接
npmeslint-visitor-keys2.1.0间接
npmeslint-visitor-keys3.4.3间接
npmespree7.3.1间接
npmesprima4.0.1间接
npmesquery1.5.0间接
npmesrecurse4.3.0间接
npmestraverse4.3.0间接
npmestraverse5.3.0间接
npmestree-walker2.0.2间接
npmesutils2.0.3间接
npmetag1.8.1间接
npmeventemitter20.4.14间接
npmevents1.1.1间接
npmevents3.3.0间接
npmexit0.1.2间接
npmexpand-tilde2.0.2间接
npmexpress4.18.2间接
npmexpress4.22.2间接
npmextend3.0.2间接
npmfast-deep-equal3.1.3间接
npmfast-glob3.3.2间接
npmfast-json-stable-stringify2.1.0间接
npmfast-levenshtein2.0.6间接
npmfast-uri3.1.2间接
npmfastest-levenshtein1.0.16间接
npmfastq1.16.0间接
npmfflate0.7.4间接
npmfile-entry-cache6.0.1间接
npmfilelist1.0.4间接
npmfill-range7.1.1间接
npmfinalhandler1.2.0间接
npmfinalhandler1.3.2间接
npmfind-up4.1.0间接
npmfind-up5.0.0间接
npmfindup-sync0.3.0间接
npmfindup-sync4.0.0间接
npmfindup-sync5.0.0间接
npmfined1.2.0间接
npmflagged-respawn1.0.1间接
npmflat5.0.2间接
npmflat-cache3.2.0间接
npmflatted3.4.2间接
npmfor-each0.3.3间接
npmfor-in1.0.2间接
npmfor-own1.0.0间接
npmforeground-child3.2.1间接
npmform-data2.5.6间接
npmform-data4.0.6间接
npmforwarded0.2.0间接
npmfresh0.5.2间接
npmfs.realpath1.0.0间接
npmfsevents2.3.2间接
npmfsevents2.3.3间接
npmfunction-bind1.1.2间接
npmfunction.prototype.name1.1.6间接
npmfunctional-red-black-tree1.0.1间接
npmfunctions-have-names1.2.3间接
npmgensync1.0.0-beta.2间接
npmget-caller-file2.0.5间接
npmget-func-name2.0.2间接
npmget-intrinsic1.2.4间接
npmget-intrinsic1.3.0间接
npmget-proto1.0.1间接
npmget-stream5.2.0间接
npmget-symbol-description1.0.0间接
npmget-tsconfig4.13.7间接
npmgetobject1.0.2间接
npmglob10.5.0间接
npmglob5.0.15间接
npmglob7.1.6间接
npmglob7.1.7间接
npmglob7.2.3间接
npmglob-parent5.1.2间接
npmglob-to-regexp0.4.1间接
npmglobal-modules1.0.0间接
npmglobal-prefix1.0.2间接
npmglobals11.12.0间接
npmglobals13.24.0间接
npmglobalthis1.0.3间接
npmglobby11.1.0间接
npmgopd1.0.1间接
npmgopd1.2.0间接
npmgraceful-fs4.2.11间接
npmgraphemer1.4.0间接
npmgrowl1.10.5间接
npmgrunt1.6.2间接
npmgrunt-cli1.2.0间接
npmgrunt-cli1.4.3间接
npmgrunt-known-options1.1.1间接
npmgrunt-known-options2.0.0间接
npmgrunt-legacy-log3.0.0间接
npmgrunt-legacy-log-utils2.1.0间接
npmgrunt-legacy-util2.0.1间接
npmgrunt-shell1.1.2间接
npmgrunt-webpack5.0.0间接
npmgzip-size6.0.0间接
npmhas-ansi2.0.0间接
npmhas-bigints1.0.2间接
npmhas-flag3.0.0间接
npmhas-flag4.0.0间接
npmhas-property-descriptors1.0.1间接
npmhas-property-descriptors1.0.2间接
npmhas-proto1.0.1间接
npmhas-proto1.0.3间接
npmhas-symbols1.0.3间接
npmhas-symbols1.1.0间接
npmhas-tostringtag1.0.2间接
npmhasown2.0.1间接
npmhasown2.0.4间接
npmhe1.2.0间接
npmhexy0.2.11间接
npmhomedir-polyfill1.0.3间接
npmhooker0.2.3间接
npmhtml-encoding-sniffer3.0.0间接
npmhttp-cache-semantics4.1.1间接
npmhttp-errors2.0.0间接
npmhttp-errors2.0.1间接
npmhttp-proxy-agent5.0.0间接
npmhttp2-wrapper1.0.3间接
npmhttps-proxy-agent5.0.1间接
npmiconv-lite0.4.24间接
npmiconv-lite0.6.3间接
npmieee7541.1.13间接
npmignore4.0.6间接
npmignore5.3.0间接
npmimport-fresh3.3.0间接
npmimport-local3.1.0间接
npmimurmurhash0.1.4间接
npminflight1.0.6间接
npminherits2.0.4间接
npmini1.3.8间接
npminternal-slot1.0.6间接
npminterpret1.1.0间接
npminterpret1.4.0间接
npminterpret3.1.1间接
npmipaddr.js1.9.1间接
npmis-absolute1.0.0间接
npmis-arguments1.1.1间接
npmis-array-buffer3.0.2间接
npmis-async-function2.0.0间接
npmis-bigint1.0.4间接
npmis-binary-path2.1.0间接
npmis-boolean-object1.1.2间接
npmis-buffer1.1.6间接
npmis-callable1.2.7间接
npmis-core-module2.13.1间接
npmis-date-object1.0.5间接
npmis-docker2.2.1间接
npmis-extglob2.1.1间接
npmis-finalizationregistry1.0.2间接
npmis-fullwidth-code-point2.0.0间接
npmis-fullwidth-code-point3.0.0间接
npmis-generator-function1.0.10间接
npmis-glob4.0.3间接
npmis-map2.0.2间接
npmis-negative-zero2.0.2间接
npmis-number7.0.0间接
npmis-number-object1.0.7间接
npmis-plain-obj2.1.0间接
npmis-plain-object2.0.4间接
npmis-potential-custom-element-name1.0.1间接
npmis-regex1.1.4间接
npmis-relative1.0.0间接
npmis-set2.0.2间接
npmis-shared-array-buffer1.0.2间接
npmis-string1.0.7间接
npmis-symbol1.0.4间接
npmis-typed-array1.1.12间接
npmis-unc-path1.0.0间接
npmis-weakmap2.0.1间接
npmis-weakref1.0.2间接
npmis-weakset2.0.2间接
npmis-windows1.0.2间接
npmis-wsl2.2.0间接
npmisarray1.0.0间接
npmisarray2.0.5间接
npmisexe2.0.0间接
npmisobject3.0.1间接
npmiterator.prototype1.1.2间接
npmjackspeak3.4.0间接
npmjake10.8.7间接
npmjest-worker27.5.1间接
npmjmespath0.16.0间接
npmjs-tokens4.0.0间接
npmjs-yaml3.14.2间接
npmjs-yaml4.0.0间接
npmjsdoc-type-pratt-parser4.0.0间接
npmjsdoctypeparser9.0.0间接
npmjsdom20.0.3间接
npmjsesc2.5.2间接
npmjsesc3.1.0间接
npmjson-buffer3.0.1间接
npmjson-schema-traverse0.4.1间接
npmjson-schema-traverse1.0.0间接
npmjson-stable-stringify-without-jsonify1.0.1间接
npmjson51.0.2间接
npmjson52.2.3间接
npmjsonc-parser3.2.0间接
npmjsx-ast-utils3.3.5间接
npmkeyv4.5.4间接
npmkind-of6.0.3间接
npmlevn0.4.1间接
npmliftup3.0.1间接
npmlinkify-it4.0.1间接
npmloader-runner4.3.2间接
npmlocal-pkg0.4.3间接
npmlocate-path5.0.0间接
npmlocate-path6.0.0间接
npmlodash4.17.23间接
npmlodash.isplainobject4.0.6间接
npmlodash.merge4.6.2间接
npmlodash.truncate4.4.2间接
npmlog-symbols4.0.0间接
npmloose-envify1.4.0间接
npmloupe2.3.7间接
npmlowercase-keys2.0.0间接
npmlru-cache10.3.0间接
npmlru-cache5.1.1间接
npmlru-cache6.0.0间接
npmlunr2.3.9间接
npmlz-string1.5.0间接
npmmake-error1.3.6间接
npmmake-iterator1.0.1间接
npmmap-cache0.2.2间接
npmmarkdown-it13.0.1间接
npmmarked4.3.0间接
npmmarked9.1.6间接
npmmarked-terminal6.2.0间接
npmmath-intrinsics1.1.0间接
npmmd52.3.0间接
npmmdurl1.0.1间接
npmmedia-typer0.3.0间接
npmmerge-descriptors1.0.1间接
npmmerge-descriptors1.0.3间接
npmmerge-stream2.0.0间接
npmmerge21.4.1间接
npmmethods1.1.2间接
npmmicromatch4.0.8间接
npmmime1.6.0间接
npmmime-db1.52.0间接
npmmime-db1.54.0间接
npmmime-types2.1.35间接
npmmimic-response1.0.1间接
npmmimic-response3.1.0间接
npmminimatch3.0.4间接
npmminimatch3.1.5间接
npmminimatch5.1.9间接
npmminimatch9.0.9间接
npmminimist1.2.8间接
npmminipass7.1.2间接
npmmkdirp0.5.6间接
npmmkdirp3.0.1间接
npmmocha8.4.0间接
npmmocha-junit-reporter2.2.1间接
npmms2.0.0间接
npmms2.1.2间接
npmms2.1.3间接
npmnanoid3.1.20间接
npmnanoid3.3.12间接
npmnanoid3.3.7间接
npmnatural-compare1.4.0间接
npmnatural-compare-lite1.4.0间接
npmnegotiator0.6.3间接
npmneo-async2.6.2间接
npmnode-emoji2.1.3间接
npmnode-releases2.0.14间接
npmnode-releases2.0.47间接
npmnopt3.0.6间接
npmnopt4.0.3间接
npmnopt5.0.0间接
npmnormalize-path3.0.0间接
npmnormalize-url6.1.0间接
npmnwsapi2.2.7间接
npmobject-assign4.1.1间接
npmobject-inspect1.13.1间接
npmobject-inspect1.13.4间接
npmobject-is1.1.5间接
npmobject-keys1.1.1间接
npmobject.assign4.1.5间接
npmobject.defaults1.1.0间接
npmobject.entries1.1.7间接
npmobject.fromentries2.0.7间接
npmobject.groupby1.0.1间接
npmobject.hasown1.1.3间接
npmobject.map1.0.1间接
npmobject.pick1.3.0间接
npmobject.values1.1.7间接
npmon-finished2.4.1间接
npmonce1.4.0间接
npmopen7.4.2间接
npmoptionator0.9.3间接
npmos-homedir1.0.2间接
npmos-tmpdir1.0.2间接
npmosenv0.1.5间接
npmp-cancelable2.1.1间接
npmp-limit2.3.0间接
npmp-limit3.1.0间接
npmp-locate4.1.0间接
npmp-locate5.0.0间接
npmp-try2.2.0间接
npmpackage-json-from-dist1.0.0间接
npmparent-module1.0.1间接
npmparse-filepath1.0.2间接
npmparse-passwd1.0.0间接
npmparse57.1.2间接
npmparseurl1.3.3间接
npmpath-browserify1.0.1间接
npmpath-exists4.0.0间接
npmpath-is-absolute1.0.1间接
npmpath-key3.1.1间接
npmpath-parse1.0.7间接
npmpath-root0.1.1间接
npmpath-root-regex0.1.2间接
npmpath-scurry1.11.1间接
npmpath-to-regexp0.1.13间接
npmpath-to-regexp0.1.7间接
npmpath-type4.0.0间接
npmpathval1.1.1间接
npmpicocolors1.0.0间接
npmpicocolors1.1.1间接
npmpicomatch2.3.2间接
npmpkg-dir4.2.0间接
npmplaywright1.41.2间接
npmplaywright1.61.0间接
npmplaywright-core1.41.2间接
npmplaywright-core1.61.0间接
npmpostcss8.4.35间接
npmpostcss8.5.15间接
npmprelude-ls1.2.1间接
npmprettier3.3.3间接
npmpretty-format27.5.1间接
npmprocess0.11.10间接
npmprogress2.0.3间接
npmprop-types15.8.1间接
npmproxy-addr2.0.7间接
npmpsl1.9.0间接
npmpump3.0.0间接
npmpunycode1.3.2间接
npmpunycode2.3.1间接
npmqs6.11.0间接
npmqs6.15.2间接
npmquerystring0.2.0间接
npmquerystringify2.2.0间接
npmqueue-microtask1.2.3间接
npmquick-lru5.1.1间接
npmrandombytes2.1.0间接
npmrange-parser1.2.1间接
npmraw-body2.5.1间接
npmraw-body2.5.3间接
npmreact18.2.0间接
npmreact-dom18.2.0间接
npmreact-is16.13.1间接
npmreact-is17.0.2间接
npmreact-refresh0.13.0间接
npmreact-refresh0.14.0间接
npmreadable-stream3.6.2间接
npmreaddirp3.5.0间接
npmrechoir0.6.2间接
npmrechoir0.7.1间接
npmrechoir0.8.0间接
npmredeyed2.1.1间接
npmreflect.getprototypeof1.0.4间接
npmregexp-tree0.1.27间接
npmregexp.prototype.flags1.5.1间接
npmregexpp3.2.0间接
npmrequire-directory2.1.1间接
npmrequire-from-string2.0.2间接
npmrequirejs2.1.22间接
npmrequires-port1.0.0间接
npmresolve1.1.7间接
npmresolve1.22.8间接
npmresolve2.0.0-next.5间接
npmresolve-alpn1.2.1间接
npmresolve-cwd3.0.0间接
npmresolve-dir1.0.1间接
npmresolve-from4.0.0间接
npmresolve-from5.0.0间接
npmresolve-pkg-maps1.0.0间接
npmresponselike2.0.1间接
npmreusify1.0.4间接
npmrimraf2.6.3间接
npmrimraf3.0.2间接
npmrollup2.80.0间接
npmrollup3.29.4间接
npmrollup3.30.0间接
npmrollup4.12.0间接
npmrun-parallel1.2.0间接
npmsafe-array-concat1.1.0间接
npmsafe-buffer5.2.1间接
npmsafe-regex2.1.1间接
npmsafe-regex-test1.0.2间接
npmsafer-buffer2.1.2间接
npmsax1.2.1间接
npmsaxes6.0.0间接
npmscheduler0.23.0间接
npmschema-utils4.3.3间接
npmsemver6.3.1间接
npmsemver7.5.4间接
npmsend0.18.0间接
npmsend0.19.2间接
npmserialize-javascript5.0.1间接
npmserve-static1.15.0间接
npmserve-static1.16.3间接
npmset-function-length1.2.0间接
npmset-function-length1.2.1间接
npmset-function-name2.0.1间接
npmsetprototypeof1.2.0间接
npmshallow-clone3.0.1间接
npmshebang-command2.0.0间接
npmshebang-regex3.0.0间接
npmshelljs0.8.5间接
npmshiki0.14.7间接
npmside-channel1.0.5间接
npmside-channel1.1.1间接
npmside-channel-list1.0.1间接
npmside-channel-map1.0.1间接
npmside-channel-weakmap1.0.2间接
npmsignal-exit4.1.0间接
npmskin-tone2.0.0间接
npmslash3.0.0间接
npmslice-ansi4.0.0间接
npmsource-map0.6.1间接
npmsource-map0.7.4间接
npmsource-map-explorer2.5.3间接
npmsource-map-js1.0.2间接
npmsource-map-js1.2.1间接
npmsource-map-support0.5.21间接
npmspdx-exceptions2.3.0间接
npmspdx-expression-parse3.0.1间接
npmspdx-license-ids3.0.16间接
npmsprintf-js1.0.3间接
npmsprintf-js1.1.3间接
npmstatuses2.0.1间接
npmstatuses2.0.2间接
npmstop-iteration-iterator1.0.0间接
npmstream-browserify3.0.0间接
npmstream-transform3.3.2间接
npmstring-width2.1.1间接
npmstring-width4.2.3间接
npmstring-width5.1.2间接
npmstring.prototype.matchall4.0.10间接
npmstring.prototype.trim1.2.8间接
npmstring.prototype.trimend1.0.7间接
npmstring.prototype.trimstart1.0.7间接
npmstring_decoder1.3.0间接
npmstrip-ansi3.0.1间接
npmstrip-ansi4.0.0间接
npmstrip-ansi6.0.1间接
npmstrip-ansi7.1.0间接
npmstrip-bom3.0.0间接
npmstrip-json-comments3.1.1间接
npmsupports-color2.0.0间接
npmsupports-color5.5.0间接
npmsupports-color7.2.0间接
npmsupports-color8.1.1间接
npmsupports-hyperlinks3.0.0间接
npmsupports-preserve-symlinks-flag1.0.0间接
npmsymbol-tree3.2.4间接
npmtable6.8.1间接
npmtapable2.3.3间接
npmtemp0.9.4间接
npmterser5.48.0间接
npmterser-webpack-plugin5.6.1间接
npmtext-table0.2.0间接
npmtinypool0.2.4间接
npmtinyspy1.1.1间接
npmto-fast-properties2.0.0间接
npmto-regex-range5.0.1间接
npmto-utf80.0.1间接
npmtoidentifier1.0.1间接
npmtough-cookie4.1.3间接
npmtr463.0.0间接
npmts-expose-internals-conditionally1.0.0-empty.0间接
npmts-loader9.5.1间接
npmts-node10.9.2间接
npmtsconfig-paths3.15.0间接
npmtsconfig-paths4.2.0间接
npmtsconfig-paths-webpack-plugin4.1.0间接
npmtslib1.14.1间接
npmtslib2.4.0间接
npmtslib2.6.2间接
npmtsutils3.21.0间接
npmtsx4.21.0间接
npmtype-check0.4.0间接
npmtype-detect4.0.8间接
npmtype-fest0.20.2间接
npmtype-fest3.13.1间接
npmtype-is1.6.18间接
npmtyped-array-buffer1.0.0间接
npmtyped-array-byte-length1.0.0间接
npmtyped-array-byte-offset1.0.0间接
npmtyped-array-length1.0.4间接
npmtypedoc0.24.8间接
npmtypescript4.9.5间接
npmtypescript5.3.3间接
npmuc.micro1.0.6间接
npmunbox-primitive1.0.2间接
npmunc-path-regex0.1.2间接
npmunderscore.string3.3.6间接
npmundici-types5.26.5间接
npmunicode-emoji-modifier-base1.0.0间接
npmuniversalify0.2.0间接
npmunpipe1.0.0间接
npmupdate-browserslist-db1.0.13间接
npmupdate-browserslist-db1.2.3间接
npmuri-js4.4.1间接
npmurl0.10.3间接
npmurl-parse1.5.10间接
npmutil0.12.5间接
npmutil-deprecate1.0.2间接
npmutils-merge1.0.1间接
npmuuid8.0.0间接
npmv8-compile-cache2.4.0间接
npmv8-compile-cache-lib3.0.1间接
npmv8flags3.2.0间接
npmvalidate-npm-package-name5.0.0间接
npmvary1.1.2间接
npmvite3.2.11间接
npmvite4.5.14间接
npmvite4.5.2间接
npmvite5.1.3间接
npmvitest0.18.1间接
npmvscode-oniguruma1.7.0间接
npmvscode-textmate8.0.0间接
npmw3c-xmlserializer4.0.0间接
npmwatchpack2.5.2间接
npmwebidl-conversions7.0.0间接
npmwebpack5.107.2间接
npmwebpack-cli5.1.4间接
npmwebpack-merge5.10.0间接
npmwebpack-sources3.5.0间接
npmwhatwg-encoding2.0.0间接
npmwhatwg-mimetype3.0.0间接
npmwhatwg-url11.0.0间接
npmwhich1.3.1间接
npmwhich2.0.2间接
npmwhich-boxed-primitive1.0.2间接
npmwhich-builtin-type1.1.3间接
npmwhich-collection1.0.1间接
npmwhich-typed-array1.1.13间接
npmwide-align1.1.3间接
npmwildcard2.0.1间接
npmworkerpool6.1.0间接
npmwrap-ansi7.0.0间接
npmwrap-ansi8.1.0间接
npmwrappy1.0.2间接
npmxml1.0.1间接
npmxml-name-validator4.0.0间接
npmxml2js0.6.2间接
npmxmlbuilder11.0.1间接
npmxmlchars2.2.0间接
npmy18n5.0.8间接
npmyallist3.1.1间接
npmyallist4.0.0间接
npmyargs16.2.0间接
npmyargs-parser20.2.4间接
npmyargs-unparser2.0.0间接
npmyn3.1.1间接
npmyocto-queue0.1.0间接
依赖安全公告 40

该仓库未发布可被索引解析的包,因此评估的是其自身的依赖图——共 1,043 个包,其中也包含从不交付的开发与测试版本固定:40 个存在已知公告,0 个为直接依赖。

软件包版本关系严重程度公告数修复版本
requirejs2.1.22间接严重12.3.7
rollup3.29.4间接严重24.59.0
rollup4.12.0间接严重24.59.0
vitest0.18.1间接严重14.1.0
body-parser1.20.1间接22.3.0
brace-expansion1.1.11间接35.0.7
brace-expansion2.1.1间接15.0.7
fast-uri3.1.2间接24.1.1
js-yaml3.14.2间接24.3.0
js-yaml4.0.0间接34.3.0
linkify-it4.0.1间接25.0.2
lodash4.17.23间接24.18.0
minimatch3.0.4间接410.2.3
path-to-regexp0.1.7间接38.0.0
playwright1.41.2间接11.55.1
serialize-javascript5.0.1间接27.0.5
uuid8.0.0间接113.0.1
vite3.2.11间接138.0.16
vite4.5.14间接78.0.16
vite4.5.2间接168.0.16
vite5.1.3间接168.0.16
@babel/helpers7.23.9间接18.0.0-alpha.17
diff4.0.2间接18.0.3
diff5.0.0间接18.0.3
esbuild0.15.18间接10.25.0
esbuild0.18.20间接10.25.0
esbuild0.19.12间接10.25.0
express4.18.2间接25.0.0-beta.3
markdown-it13.0.1间接214.2.0
nanoid3.1.20间接25.0.9
nanoid3.3.7间接15.0.9
postcss8.4.35间接18.5.10
qs6.11.0间接26.14.2
send0.18.0间接10.19.0
serve-static1.15.0间接12.1.0
@babel/core7.23.9间接18.0.0-rc.6
aws-sdk2.1693.0间接1
body-parser1.20.5间接12.3.0
cookie0.5.0间接10.7.0
esbuild0.27.7间接10.28.1

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

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "client-library",
        "rest",
        "realtime",
        "js",
        "javascript",
        "realtime-messaging",
        "react-native",
        "sdk",
        "typescript",
        "ts"
      ],
      "is_fork": false,
      "size_kb": 36406,
      "has_wiki": false,
      "homepage": "https://ably.com/download",
      "languages": {
        "CSS": 61,
        "HTML": 3744,
        "JavaScript": 1445977,
        "TypeScript": 2880104
      },
      "pushed_at": "2026-07-22T18:50:20Z",
      "created_at": "2012-11-13T19:41:13Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-22T18:04:30Z",
      "description": "Javascript, Node, Typescript, React, React Native client library SDK for Ably realtime messaging service",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript",
        "JavaScript"
      ]
    },
    "owner": {
      "blog": "https://ably.com/documentation",
      "name": "Ably Realtime - our client library SDKs and libraries",
      "type": "Organization",
      "login": "ably",
      "company": null,
      "location": "London, UK",
      "followers": 214,
      "avatar_url": "https://avatars.githubusercontent.com/u/1859245?v=4",
      "created_at": "2012-06-17T17:14:20Z",
      "is_verified": null,
      "public_repos": 123,
      "account_age_days": 5148
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "2.25.0",
          "kind": "minor",
          "published_at": "2026-07-17T14:45:29Z"
        },
        {
          "tag": "2.24.0",
          "kind": "minor",
          "published_at": "2026-07-09T09:53:02Z"
        },
        {
          "tag": "2.23.0",
          "kind": "minor",
          "published_at": "2026-06-19T14:03:27Z"
        },
        {
          "tag": "2.22.1",
          "kind": "patch",
          "published_at": "2026-06-08T16:33:51Z"
        },
        {
          "tag": "2.22.0",
          "kind": "minor",
          "published_at": "2026-06-05T16:59:24Z"
        },
        {
          "tag": "2.21.0",
          "kind": "minor",
          "published_at": "2026-03-19T11:56:48Z"
        },
        {
          "tag": "2.20.0",
          "kind": "minor",
          "published_at": "2026-03-13T13:07:26Z"
        },
        {
          "tag": "2.19.0",
          "kind": "minor",
          "published_at": "2026-03-03T14:20:01Z"
        },
        {
          "tag": "2.18.0",
          "kind": "minor",
          "published_at": "2026-02-23T18:36:42Z"
        },
        {
          "tag": "2.17.1",
          "kind": "patch",
          "published_at": "2026-01-30T16:17:07Z"
        },
        {
          "tag": "2.17.0",
          "kind": "minor",
          "published_at": "2026-01-08T14:32:25Z"
        },
        {
          "tag": "2.16.0",
          "kind": "minor",
          "published_at": "2025-12-19T16:00:30Z"
        },
        {
          "tag": "2.15.0",
          "kind": "minor",
          "published_at": "2025-12-02T19:56:40Z"
        },
        {
          "tag": "2.14.0",
          "kind": "minor",
          "published_at": "2025-10-02T12:20:50Z"
        },
        {
          "tag": "2.13.0",
          "kind": "minor",
          "published_at": "2025-09-19T08:26:31Z"
        },
        {
          "tag": "2.12.0",
          "kind": "minor",
          "published_at": "2025-08-22T20:14:14Z"
        },
        {
          "tag": "2.11.1",
          "kind": "patch",
          "published_at": "2025-08-21T20:45:03Z"
        },
        {
          "tag": "2.11.0",
          "kind": "minor",
          "published_at": "2025-08-13T16:14:46Z"
        },
        {
          "tag": "2.10.1",
          "kind": "patch",
          "published_at": "2025-07-16T08:48:11Z"
        },
        {
          "tag": "2.10.0",
          "kind": "minor",
          "published_at": "2025-06-25T08:36:28Z"
        },
        {
          "tag": "2.9.0",
          "kind": "minor",
          "published_at": "2025-05-08T17:53:55Z"
        },
        {
          "tag": "2.8.0",
          "kind": "minor",
          "published_at": "2025-05-01T16:31:42Z"
        },
        {
          "tag": "2.7.0",
          "kind": "minor",
          "published_at": "2025-04-17T12:34:01Z"
        },
        {
          "tag": "2.6.5",
          "kind": "patch",
          "published_at": "2025-03-24T20:58:12Z"
        },
        {
          "tag": "2.6.4",
          "kind": "patch",
          "published_at": "2025-03-17T15:43:16Z"
        },
        {
          "tag": "2.6.3",
          "kind": "patch",
          "published_at": "2025-01-28T15:05:25Z"
        },
        {
          "tag": "2.6.2",
          "kind": "patch",
          "published_at": "2025-01-14T12:23:39Z"
        },
        {
          "tag": "2.6.1",
          "kind": "patch",
          "published_at": "2025-01-13T16:29:32Z"
        },
        {
          "tag": "2.6.0",
          "kind": "minor",
          "published_at": "2024-12-10T09:35:41Z"
        },
        {
          "tag": "2.5.0",
          "kind": "minor",
          "published_at": "2024-11-06T16:37:33Z"
        },
        {
          "tag": "2.4.1",
          "kind": "patch",
          "published_at": "2024-10-04T16:24:14Z"
        },
        {
          "tag": "2.4.0",
          "kind": "minor",
          "published_at": "2024-09-11T18:13:34Z"
        },
        {
          "tag": "2.3.2",
          "kind": "patch",
          "published_at": "2024-09-06T20:46:05Z"
        },
        {
          "tag": "2.3.1",
          "kind": "patch",
          "published_at": "2024-07-30T09:34:22Z"
        },
        {
          "tag": "2.3.0",
          "kind": "minor",
          "published_at": "2024-07-10T15:54:25Z"
        },
        {
          "tag": "2.2.1",
          "kind": "patch",
          "published_at": "2024-07-02T17:08:55Z"
        },
        {
          "tag": "2.2.0",
          "kind": "minor",
          "published_at": "2024-06-24T20:27:22Z"
        },
        {
          "tag": "2.1.0",
          "kind": "minor",
          "published_at": "2024-06-03T22:52:44Z"
        },
        {
          "tag": "2.0.4",
          "kind": "patch",
          "published_at": "2024-05-03T12:55:09Z"
        },
        {
          "tag": "2.0.3",
          "kind": "patch",
          "published_at": "2024-04-18T12:18:19Z"
        },
        {
          "tag": "2.0.2",
          "kind": "patch",
          "published_at": "2024-04-09T13:44:01Z"
        },
        {
          "tag": "2.0.1",
          "kind": "patch",
          "published_at": "2024-03-25T15:36:23Z"
        },
        {
          "tag": "2.0.0",
          "kind": "major",
          "published_at": "2024-03-22T12:53:43Z"
        },
        {
          "tag": "1.2.50",
          "kind": "patch",
          "published_at": "2024-03-21T17:35:24Z"
        },
        {
          "tag": "1.2.49",
          "kind": "patch",
          "published_at": "2024-02-07T14:00:38Z"
        },
        {
          "tag": "1.2.48",
          "kind": "patch",
          "published_at": "2023-11-21T14:47:07Z"
        },
        {
          "tag": "1.2.47",
          "kind": "patch",
          "published_at": "2023-11-02T13:53:01Z"
        },
        {
          "tag": "1.2.46",
          "kind": "patch",
          "published_at": "2023-10-25T10:12:24Z"
        },
        {
          "tag": "1.2.45",
          "kind": "patch",
          "published_at": "2023-09-25T11:33:29Z"
        },
        {
          "tag": "1.2.44",
          "kind": "patch",
          "published_at": "2023-09-04T14:36:27Z"
        },
        {
          "tag": "1.2.43",
          "kind": "patch",
          "published_at": "2023-08-10T13:01:07Z"
        },
        {
          "tag": "1.2.42",
          "kind": "patch",
          "published_at": "2023-07-25T10:51:03Z"
        },
        {
          "tag": "1.2.41",
          "kind": "patch",
          "published_at": "2023-06-29T14:35:00Z"
        },
        {
          "tag": "1.2.40",
          "kind": "patch",
          "published_at": "2023-05-26T14:08:08Z"
        },
        {
          "tag": "1.2.39",
          "kind": "patch",
          "published_at": "2023-04-13T15:25:25Z"
        },
        {
          "tag": "1.2.38",
          "kind": "patch",
          "published_at": "2023-04-04T14:46:07Z"
        },
        {
          "tag": "1.2.37",
          "kind": "patch",
          "published_at": "2023-02-27T16:44:03Z"
        },
        {
          "tag": "1.2.36",
          "kind": "patch",
          "published_at": "2023-02-10T14:06:59Z"
        },
        {
          "tag": "1.2.35",
          "kind": "patch",
          "published_at": "2023-01-30T14:33:56Z"
        },
        {
          "tag": "1.2.34",
          "kind": "patch",
          "published_at": "2022-12-13T17:13:01Z"
        },
        {
          "tag": "1.2.33",
          "kind": "patch",
          "published_at": "2022-11-11T14:13:44Z"
        },
        {
          "tag": "1.2.32",
          "kind": "patch",
          "published_at": "2022-11-09T17:05:08Z"
        },
        {
          "tag": "1.2.31",
          "kind": "patch",
          "published_at": "2022-11-08T16:05:47Z"
        },
        {
          "tag": "1.2.30",
          "kind": "patch",
          "published_at": "2022-10-05T09:44:12Z"
        },
        {
          "tag": "1.2.29",
          "kind": "patch",
          "published_at": "2022-08-08T13:44:30Z"
        },
        {
          "tag": "1.2.28",
          "kind": "patch",
          "published_at": "2022-07-28T17:05:50Z"
        },
        {
          "tag": "1.2.27",
          "kind": "patch",
          "published_at": "2022-07-06T15:14:43Z"
        },
        {
          "tag": "1.2.26",
          "kind": "patch",
          "published_at": "2022-06-30T10:44:47Z"
        },
        {
          "tag": "1.2.25",
          "kind": "patch",
          "published_at": "2022-06-10T15:27:08Z"
        },
        {
          "tag": "1.2.24",
          "kind": "patch",
          "published_at": "2022-06-09T21:49:34Z"
        },
        {
          "tag": "1.2.23",
          "kind": "patch",
          "published_at": "2022-06-09T17:00:04Z"
        },
        {
          "tag": "1.2.22",
          "kind": "patch",
          "published_at": "2022-05-18T13:54:33Z"
        },
        {
          "tag": "1.2.21",
          "kind": "patch",
          "published_at": "2022-05-05T16:09:45Z"
        },
        {
          "tag": "1.2.20",
          "kind": "patch",
          "published_at": "2022-04-06T17:21:13Z"
        },
        {
          "tag": "1.2.19",
          "kind": "patch",
          "published_at": "2022-04-05T13:30:47Z"
        },
        {
          "tag": "1.2.18",
          "kind": "patch",
          "published_at": "2022-04-01T14:16:53Z"
        },
        {
          "tag": "1.2.17",
          "kind": "patch",
          "published_at": "2022-01-14T17:03:21Z"
        },
        {
          "tag": "1.2.16",
          "kind": "patch",
          "published_at": "2022-01-14T12:32:21Z"
        },
        {
          "tag": "1.2.15",
          "kind": "patch",
          "published_at": "2021-11-22T13:12:45Z"
        },
        {
          "tag": "1.2.14",
          "kind": "patch",
          "published_at": "2021-09-22T15:48:03Z"
        },
        {
          "tag": "1.2.13",
          "kind": "patch",
          "published_at": "2021-08-03T16:04:22Z"
        },
        {
          "tag": "1.2.12",
          "kind": "patch",
          "published_at": "2021-08-02T11:17:04Z"
        },
        {
          "tag": "1.2.11",
          "kind": "patch",
          "published_at": "2021-07-20T09:42:14Z"
        },
        {
          "tag": "1.2.10",
          "kind": "patch",
          "published_at": "2021-05-28T14:29:15Z"
        },
        {
          "tag": "1.2.9",
          "kind": "patch",
          "published_at": "2021-04-12T10:28:12Z"
        },
        {
          "tag": "1.2.8",
          "kind": "patch",
          "published_at": "2021-03-26T17:40:19Z"
        },
        {
          "tag": "1.2.7",
          "kind": "patch",
          "published_at": "2021-03-25T11:37:35Z"
        },
        {
          "tag": "1.2.5",
          "kind": "patch",
          "published_at": "2021-02-16T13:16:07Z"
        },
        {
          "tag": "1.2.4",
          "kind": "patch",
          "published_at": "2020-11-04T16:15:03Z"
        },
        {
          "tag": "1.2.3",
          "kind": "patch",
          "published_at": "2020-09-30T15:41:50Z"
        },
        {
          "tag": "1.2.2",
          "kind": "patch",
          "published_at": "2020-09-03T15:09:12Z"
        },
        {
          "tag": "1.2.1",
          "kind": "patch",
          "published_at": "2020-06-09T15:30:10Z"
        },
        {
          "tag": "1.2.0",
          "kind": "minor",
          "published_at": "2020-06-08T14:45:42Z"
        },
        {
          "tag": "1.1.25",
          "kind": "patch",
          "published_at": "2020-05-19T11:07:58Z"
        },
        {
          "tag": "1.1.14",
          "kind": "patch",
          "published_at": "2019-06-25T13:28:06Z"
        },
        {
          "tag": "1.1.12",
          "kind": "patch",
          "published_at": "2019-06-10T10:21:01Z"
        },
        {
          "tag": "1.1.11",
          "kind": "patch",
          "published_at": "2019-05-22T16:40:49Z"
        },
        {
          "tag": "1.1.10",
          "kind": "patch",
          "published_at": "2019-05-22T16:40:25Z"
        },
        {
          "tag": "1.1.9",
          "kind": "patch",
          "published_at": "2019-05-08T10:28:10Z"
        },
        {
          "tag": "1.1.8",
          "kind": "patch",
          "published_at": "2019-04-30T12:28:50Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "9619f3dbd2bdf704e885a14835178f37fbcfb70b",
          "body": "[AIT-1183] Add push token updates support for React Native",
          "is_bot": false,
          "headline": "Merge pull request #2267 from ably/AIT-1183/rn-push-fix",
          "author_name": "Evgeny Khokhlov",
          "author_login": "ttypic",
          "committed_at": "2026-07-22T18:01:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "104abc72d24086c5a41fb47f48fe316e11b3292e",
          "body": "…on on React Native",
          "is_bot": false,
          "headline": "[AIT-1183] feat: add support for push token updates and synchronizati…",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-22T17:44:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2b3544ab3fb27c0effb0b517e54ff2bc7a0b625",
          "body": "Fix rewind race in realtime message-append test",
          "is_bot": false,
          "headline": "Merge pull request #2269 from ably/fix-rewind-setoptions-test",
          "author_name": "Lewis Marshall",
          "author_login": "lmars",
          "committed_at": "2026-07-22T17:17:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f6582d242fb862c32c1c6b43705e6a7e80d565a",
          "body": "Phase 2 of \"Should append to a message over realtime\" reattached with rewind\nby calling subscribe() — which kicks off an implicit no-rewind attach\n(RTL7g) — and then setOptions({rewind}), which sent a second ATTACH carrying\nrewind. Replay therefore depended on the rewind ATTACH reaching the server\nb\n[…]\ne/attach, so the sole\nATTACH carries rewind and history is replayed deterministically. Phase 1\n(live append fan-out) is unchanged.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix rewind race in realtime message-append test",
          "author_name": "Lewis Marshall",
          "author_login": "lmars",
          "committed_at": "2026-07-22T13:28:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "95d0b8a17421374df15f171df27f64907ac97169",
          "body": "Support running the node test suite against ABLY_LOCAL_SANDBOX_URL",
          "is_bot": false,
          "headline": "Merge pull request #2266 from ably/local-server-testing",
          "author_name": "Lewis Marshall",
          "author_login": "lmars",
          "committed_at": "2026-07-22T13:02:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e26ffaeb800a3de750f10d2fdf559532f92798d",
          "body": "When ABLY_LOCAL_SANDBOX_URL is set, each test provisions its app through a\nlocal sandbox's POST /apps (the same appspec as the cloud sandbox) instead\nof the cloud, and routes every client at the isolated server that response\ndescribes (its own endpoint/port/tls). Teardown and stats fixtures target\nt\n[…]\n\n\nThe wiring lives in test/common/globals/environment.js and\ntest/common/modules/{testapp_manager,client_module,shared_helper}.js.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Support running the node test suite against ABLY_LOCAL_SANDBOX_URL",
          "author_name": "Lewis Marshall",
          "author_login": "lmars",
          "committed_at": "2026-07-22T10:59:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "160d6fba029cd8027f652a0d89ba8ba82a4fbd2a",
          "body": "The embedded JWT tests were skipped against a local sandbox: the echo server\nminted the embedded Ably token itself by calling requestToken against a public\nAbly environment, which it can't reach for a local platform (and which only\nsupports staging/sandbox environments otherwise).\n\nMint the inner to\n[…]\n cloud and local sandboxes. Removes\nthe endpoint-string guard (and now-unused globals import) that previously\nskipped these tests.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Run embedded JWT tests against any platform via innerToken",
          "author_name": "Lewis Marshall",
          "author_login": "lmars",
          "committed_at": "2026-07-22T10:59:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c26b945929597adc55652c7791e6bb7fd9e24d88",
          "body": "The checkput/checkpatch/checkdelete tests build a Rest client aimed at\necho.ably.io by overriding endpoint on a client from the shared factory.\nAgainst a local sandbox that factory also injects the sandbox's ephemeral\nport/tlsPort, which survived the endpoint override — leaving the client\ntargeting \n[…]\n it in the request tests. This puts the intent at the call\nsite rather than making the shared factory conditionally strip routing.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add AblyRestEcho helper so echo-server tests drop stale sandbox routing",
          "author_name": "Lewis Marshall",
          "author_login": "lmars",
          "committed_at": "2026-07-22T10:59:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a50ba14510bb5d524010b4111f9cc29330a40861",
          "body": "The test injects a synthetic presence ENTER after the first SYNC frame and\nasserts presence.get() includes it. It fired the injection from inside the\nintercepted processMessage without the main flow awaiting it. When the server\ndelivers the whole presence set in a single (non-paginated) SYNC frame, \n[…]\ncheduling, not\non server behaviour.\n\nAwait the injection (via a promise resolved once it completes) before calling\npresence.get().\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix presence_sync_interruptus test race",
          "author_name": "Lewis Marshall",
          "author_login": "lmars",
          "committed_at": "2026-07-22T10:59:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "759ced21fe912795c9712553f4f1c2739531fb41",
          "body": "feat(react): add useObject hook for LiveObjects",
          "is_bot": false,
          "headline": "Merge pull request #2259 from ably/useobject-hook",
          "author_name": "Owen Pearson",
          "author_login": "owenpearson",
          "committed_at": "2026-07-21T14:28:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08b179cae2306d743c5d7c587a758e626ba31f3d",
          "body": "attw's node10 column uses classic node resolution, which ignores the\nexports field and resolves subpaths by filesystem path. There was no\nphysical declaration at liveobjects/react, so node10 resolution failed.",
          "is_bot": false,
          "headline": "fix(react): resolve ably/liveobjects/react types under node10",
          "author_name": "owenpearson",
          "author_login": "owenpearson",
          "committed_at": "2026-07-21T13:09:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52ae44dff2631f7374d6c441c84f610261632843",
          "body": "…object\n\nThe typed-selector overload takes (object: PathObject<LiveMap<T>>) => N,\ninferring T from the selector's annotation — the same inner-shape type\nparameter RealtimeObject.get<T>() takes — and rejecting selectors that\nannotate the channel's object as a non-map node.",
          "is_bot": false,
          "headline": "fix(react): type useObject's selector parameter as the channel's map …",
          "author_name": "owenpearson",
          "author_login": "owenpearson",
          "committed_at": "2026-07-21T13:09:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b2b6ec163bc41db0526fd4dae77aaaecc034759",
          "body": "- refresh the cached snapshot after subscribing so a change landing\n  between render and subscription setup is not missed\n- add a types condition to the ably/liveobjects/react export\n- type the no-selector overload with the inner object shape, matching\n  RealtimeObject.get<T>() and rejecting non-map\n[…]\n- say \"the channel's object\" rather than \"root\" in public docs and JSDoc\n- document the error return value and the React 18 requirement\n- add type-flow checks for useObject to the NPM package test app",
          "is_bot": false,
          "headline": "fix(react): address useObject review feedback",
          "author_name": "owenpearson",
          "author_login": "owenpearson",
          "committed_at": "2026-07-21T13:09:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1b66b4a8cf1747a9da90dcb34083ab92be4c5733",
          "body": "Adds a new `ably/liveobjects/react` entry point exporting `useObject`,\nwhich subscribes to a channel's LiveObjects state (optionally a nested\nnode selected by navigating from the root) and re-renders on change,\nbuilt on useSyncExternalStore with a cached compact() snapshot.",
          "is_bot": false,
          "headline": "feat(react): add useObject hook for LiveObjects",
          "author_name": "owenpearson",
          "author_login": "owenpearson",
          "committed_at": "2026-07-21T13:09:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dfa453af4e5c5e69bb2aae6eb4eed30ff3c3d98c",
          "body": "chore: release/2.25.0",
          "is_bot": false,
          "headline": "Merge pull request #2264 from ably/release/2.25.0",
          "author_name": "Evgeny Khokhlov",
          "author_login": "ttypic",
          "committed_at": "2026-07-17T14:43:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41883a63b453a000ddce34854c81bb185a7fe790",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: release/2.25.0",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-17T12:47:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e847d96c890f5b9accb975a19db737efe566454f",
          "body": "[AIT-850] feat: react native push plugin",
          "is_bot": false,
          "headline": "Merge pull request #2262 from ably/AIT-850/react-native-push",
          "author_name": "Evgeny Khokhlov",
          "author_login": "ttypic",
          "committed_at": "2026-07-17T09:26:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff2ce3af39b41e66519ae0156e45383aab9fe1a0",
          "body": "…ts support\n\nMetro only resolves the package exports map from React\nNative 0.79, so older apps importing ably/react-native-push would fail to\nresolve the exports-only entry. The root shim re-exports the built bundle\nfor legacy main-field resolution, mirroring how the other root entry files\nwork; the exports map takes precedence everywhere else.\n\nfix: remove deregistered push state from storage on deactivation\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build: add root react-native-push.js shim for resolvers without expor…",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-16T13:58:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c76ec4cd6485b6474ddd5410340a30d9a2e01180",
          "body": "attw flagged an incorrect default export: the declarations claimed a true\nESM default export, but the shipped bundle is a UMD/CJS module, so under\nNode's ESM interop a default import resolves to the whole module.exports\nnamespace rather than its .default property. Restructure the declarations\nas an export = namespace (the same style as push.d.ts), which types the\nmodule correctly in node10, node16 CJS/ESM, and bundler resolution modes.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: declare ably/react-native-push types with export = to match runtime",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-16T13:58:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8ff6f46784d498dc37da88f5297f0b4da592d99a",
          "body": "Review feedback: create() now checks that the supplied storage implements\nall of getItem, setItem, and removeItem, matching what its error message\nalready promised, and getReactNativePushDeviceDetails rejects a malformed\nrequestToken result (unknown transport type or empty token) with a clear\nactivation error instead of silently registering it as an fcm recipient.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: validate ReactNativePush options and token results",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-16T13:58:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "db73278e87d849904d9f0789ef198f3c5c1893b5",
          "body": "Review feedback on the async storage paths. getDevice() and\nActivationStateMachine.ensureInitialized() no longer cache a rejected\npromise, so a transient storage failure can be retried on the next call.\nloggedStorageWrites() now preserves the rejection for callers awaiting\npersistence (activation fa\n[…]\nnous activation-state writes\nare chained per state machine so a slow earlier write cannot land after a\nlater transition and restore stale state.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: make push storage failures recoverable and ordered",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-16T13:58:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6e1403ec3923d7ed7e20318e9b5df78a68fe1b1f",
          "body": "Review feedback: installing a plugin-carried push config into the global\nPlatform.Config.push meant a second React Native client silently reused the\nfirst client's storage and requestToken callbacks, hydrating the wrong state\nor registering the wrong token. BaseClient now exposes a pushConfig getter\n[…]\naviour), and the state\nmachine and LocalDevice read that per-client config. Adds a test proving two\nclients keep independent storage and tokens.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: resolve push config per client instead of installing it globally",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-16T13:58:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4a3b1a403ddd3e59bfa9bedb4a7f753f2209d630",
          "body": "Declares getDevice() on the modular BaseRest and BaseRealtime classes,\nwhose RestClient/RealtimeClient interfaces now require it (this was\nfailing the packaging typecheck). Also removes the blank TSDoc line\nbetween the returns and deprecated tags flagged by jsdoc/tag-lines, and\ntypes PushChannel's private helpers off getDevice() rather than the\ndeprecated device().\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: typing follow-ups for client.getDevice()",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-16T13:58:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "acaa34f2e31dc01f76e34816900a8d31372bf21f",
          "body": "Adds the esbuild config (react-native kept external, no CDN variants since\nthere is no script-tag path in React Native), a build:react-native-push\ngrunt task wired into the main build, the package.json export map entry and\nfiles listing, typed root declarations in react-native-push.d.ts, and\nregisters the bundle in the module size report.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build: publish ably/react-native-push plugin bundle",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-16T13:58:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "045a7b75013fd848b8d3370d3ca05a954a76ec79",
          "body": "Adds src/plugins/react-native-push, a push plugin for React Native that\nmirrors the web Push plugin. Users supply an async storage implementation\n(matching @react-native-async-storage/async-storage) and a requestToken\ncallback returning { transportType: 'fcm' | 'apns', token }, keeping the\nSDK free \n[…]\ncated sync device() guard and post-hydration cache,\nrequestToken failure, and getDevice()/device() equivalence on synchronous\nweb-style storage.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add ReactNativePush plugin",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-16T13:58:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0e1786f2383a179d9af379319b688363daa36871",
          "body": "A push plugin may now carry a pushConfig property which the core installs\ninto Platform.Config.push during client construction. This lets plugins\nwhose push environment is user-supplied (the upcoming ReactNativePush)\nprovide platform, form factor, storage, and the device-details hook without\nvalue-importing the Platform singleton into the plugin bundle, and without\nrequiring users to call plugin setup before constructing the client.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: allow the Push plugin to supply the platform push config",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-16T13:58:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6b31415750d6319c74c4ccf8b377b67977f10a9d",
          "body": "… events\n\nThe activation state machine's processEvent handlers are synchronous by\ncontract and read the local device via the sync client.device(). To support\nasynchronous push storage without an async state-machine rewrite,\npush.activate()/deactivate() now await client.getDevice() and a new\nActivati\n[…]\nrated cache. Async\ncall sites (updateRegistration, deregister, PushChannel methods,\ngetW3CPushDeviceDetails) switch to await client.getDevice().\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: pre-hydrate device and machine state before push activation…",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-16T13:58:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "041dee7d10f93c0765665653f0a73c8260f5d9b2",
          "body": "Adds FcmPushRecipient and ApnsPushRecipient to the PushRecipient union in\npreparation for the ReactNativePush plugin (PSRFC-25), which registers\nFCM registration tokens and APNs device tokens as push recipients.\n\nWidens IPlatformPushStorage so get/set/remove may return promises, and adds\na declarati\n[…]\nasync-storage platforms it throws before hydration with a remediation\npointing at getDevice(). In the next major release device() becomes async.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add fcm and apns push recipient types",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-16T13:58:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "660fa6ffcadb9f93c5b57bda5c420a4f7d4f246f",
          "body": "[DX-1211] Address currently silent failures around missing `modes`",
          "is_bot": false,
          "headline": "Merge pull request #2236 from ably/DX-1211/silent-failure-hints",
          "author_name": "Umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-15T09:37:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "359aad9d65edfe490bd724c89c696e6407e0b626",
          "body": "…ictMode default flips\n\nA future major makes the strict behaviour unconditional; don't imply the\nstrictMode option survives with a flipped default. Aligns with the TO3r\nwording agreed on ably/specification#505.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: state the intended end behaviour instead of assuming the str…",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-15T08:58:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0cdd0ebcd10f019da3f5a11cfe8c705fa9feb6e2",
          "body": "- RTL7i1: after the strict-mode rejection, grant the mode via setOptions and\n  verify the originally-registered listener receives a publish without a\n  further subscribe call (listener survives the failed subscribe)\n- RTL7i2: capture the warning log via logHandler, assert it names strictMode,\n  and \n[…]\n warning log via logHandler and assert it names\n  presence_subscribe and strictMode\n\nAll four tests now carry full @spec tags (no @specpartial).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: extend missing-modes tests to fully cover their spec points",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-14T15:01:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "36dae37106eaffcbb4362220de6a726fdfd08182",
          "body": "…roposed spec points\n\nSpec point IDs RTL7i1/RTL7i2 and RTP11f1/RTP11f2 are proposed in\nably/specification#505 and are provisional until that PR merges.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: add @spec tags to the missing-modes tests, referencing the p…",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-14T14:54:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "81152bcfd89baad54cd4aabed1604546a8af47db",
          "body": "… code\n\nThe silent-failure-hints changes push the minimal useful Realtime bundle\nraw size to 119.79 KiB (over the 119 KiB limit) and gzipped to 35.95 KiB\n(just under the 36 KiB limit). Raise the thresholds to 121 KiB raw and\n37 KiB gzip to fit the new size with sensible headroom.",
          "is_bot": false,
          "headline": "Bump minimal useful Realtime bundle size threshold to accommodate new…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-14T11:32:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85a204c63d27585cb6cd39a85718fb60819d55ae",
          "body": "…ame on main\n\nMain (via #2233) renamed ErrorInfo.hint to ErrorInfo.remediation after this\nbranch was cut. Rename the field at the new strict-mode error sites, the\nsilent-failure log lines, the strictMode docstring, the\nsilentFailureLogSuffix doc comment, and the test assertions to match.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: rename hint to remediation following the ErrorInfo field ren…",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-14T08:47:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e9f758012a9ef539e907338ee091b461bbed3619",
          "body": "…capability branch\n\nDrops the attach-rejection narration, which surfaces as its own error,\nand promotes the parentheticals to sentences. Keeps the guard that\nchannels.get(name, { modes }) on an existing channel throws, steering\nthe caller between the two suggested remedies.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: rewrite the annotation subscribe hint: keep only the silent …",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-14T08:44:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "23d56baee589a1d54470799d95a2b3c26904783c",
          "body": "…e-get mode hints\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: fold the reattach parenthetical in the subscribe and presenc…",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-14T08:44:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6340ed6be19ed43b7b6e6bb49e58dbd9ba84a7cc",
          "body": "…align the silent-failure log suffix\n\nFrom the 2026-07-02 docstrings-pr-review run:\n\n- ClientOptions.strictMode: both strictMode-gated paths are async, so the\n  caller-observable failure is a rejected promise, not a throw. Also drop the\n  vague \"documented silent-failure paths\" (D10), the version la\n[…]\ntach and silently drops the mode. The 93001 hint's reject-vs-downgrade split\nis therefore correct as shipped and is deliberately left unchanged.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: correct strictMode contract wording (reject, not throw) and …",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-14T08:44:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a45ec375adeadaf2ddbfbccef5bfa9592aab3da6",
          "body": "… off colliding 93002\n\nTwo fixes to the presence.get()/channel.subscribe() missing-mode errors:\n\n- Hint correctness (review feedback): the presence hint named a\n  \"presence-subscribe\" capability that does not exist. Presence delivery is\n  governed by the \"subscribe\" capability, matching the subscrib\n[…]\nhis\n  unreleased branch, so the renumber is non-breaking. Reserved in\n  ably/ably-common#345. Update the two tests asserting them.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: fix presence hint capability; move presence/subscribe errors…",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-14T08:44:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a09df870af1de88648af91b1e569e78406dcce02",
          "body": "…grade\n\nThe 93001 hint lumped two distinct failure modes under \"if the subsequent\nattach is rejected\": a missing namespace rule (Mutable Messages) does reject\nthe attach, but a missing annotation-subscribe capability does NOT - the\nserver silently drops the mode and this same error re-fires. Confirm\n[…]\nnotations still undelivered =>\ngrant the capability. Addresses review feedback that the hint was\npresumptuous and over-enumerated.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: rewrite annotation missing-mode hint to split reject vs down…",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-14T08:44:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0b07201ba954b48a18df4e77da773ab3f9ca321f",
          "body": "- Terser, technical error messages for 93002/93003\n- Hints now offer setOptions() or omitting modes + capability check;\n  drop confusing channel.modes note\n- Keep listener registered on strict-mode throw (matches existing\n  subscribe semantics)\n- Remove ticket IDs from test names\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: address review feedback on missing-mode errors",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-14T08:43:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e9a9ce0eab665d90328f58786bd227852c715f49",
          "body": "When a channel was attached without the subscribe mode, the server\nnever delivers messages to the listener, so channel.subscribe()\nappears to succeed but no callback ever fires. This commit closes the\ngap symmetrically to presence.get() in the previous commit:\n\n- After the implicit attach completes \n[…]\nubscribe: false is out of scope — the check requires an\nattach to have populated _mode. Document this caveat separately if\nneeded.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: surface silent channel.subscribe() without subscribe mode",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-14T08:42:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "94d3225553be74ba0b22486d88b7dcff209d6d1e",
          "body": "When a channel was attached without the presence_subscribe mode, the\nserver never delivers presence members, so presence.get() resolves to\n[] regardless of who is actually present. Today there is no signal\ndistinguishing \"no one is present\" from \"this client cannot see anyone\".\n\nThis commit detects \n[…]\nther weaken that pin or need a rubric refactor.\n\nSuspended-state and {waitForSync: false} paths return earlier and are\nunaffected.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: surface silent presence.get() without presence_subscribe",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-14T08:42:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fc9f8f5bbb1d5a157f85b3acb8efc81c23090da2",
          "body": "A short suffix appended to silent-failure warning logs emitted when\nclientOptions.strictMode is off, so the reader knows the same path will\nthrow in a future major version. Co-locating on Logger keeps the import\nsurface tight; callers do `Logger.silentFailureLogSuffix()` next to\n`Logger.logActionNoS\n[…]\nut into ErrorInfo.hint, because\nthe hint is also shown when the throw fires (strictMode on), where the\nsuffix would be misleading.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: add Logger.silentFailureLogSuffix helper",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-14T08:42:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a114f17c08e79a65a37dcf8e31506e64f4ec08c1",
          "body": "The guard at line 73 parenthesised `(state === 'attached' && _mode & flag) === 0`\nso the `=== 0` compared against `(boolean && number)`. It happened to behave\ncorrectly — `false === 0` is `false` so the throw skipped when not attached,\nand the bitwise result === 0 was correct when attached — but the\n[…]\nr swallows the throw. No\nsilentFailureLogSuffix here because this throw is unconditional (pre-DXRFC-022)\nand not strictMode-gated.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: fix annotation_subscribe mode-check precedence; add warn log",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-14T08:42:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dfc29ba6b8320242fcd4e9683f91c4796f34060e",
          "body": "Declaration only — no runtime use yet. Documented silent-failure paths\nwill read this option in subsequent commits to gate a hint-carrying\nthrow; the default stays `false` in v2.x. Per DXRFC-022 work item B5\nthe default flips to `true` in v3 with no per-call opt-out.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1211: add clientOptions.strictMode declaration",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-14T08:42:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2ed28c7f49ed8a7e7fffd73ce0422bf6ba24f96a",
          "body": "DX-1209: inline remediation guidance on SDK ErrorInfo throw sites",
          "is_bot": false,
          "headline": "Merge pull request #2233 from ably/DX-1209/error-hints",
          "author_name": "Umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-10T09:17:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4cd059802ec67e9dc5f73dfda9b90758b785e98d",
          "body": "channelGetShouldThrowWhenWouldCauseReattach pinned \"setOptions\" inside\nerr.message, but the redundancy pass on this branch moved the fix\npointer into the remediation field, leaving only the failure statement\nin the message. Assert against err.remediation, where the pointer now\nlives. This was the single test failing across all six CI test jobs.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: assert setOptions pointer on err.remediation, not err.message",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-10T08:49:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "eb6101add5c3208919ce7eafe0e9b69d62e5f638",
          "body": "Renames the field across the public type declaration, the ErrorInfo /\nPartialErrorInfo implementations and toString output, every throw site,\nthe legacy entry-point shims, tests, and the contributor docs. Note\nthis is a breaking rename of a field first shipped in 2.22.0.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: rename ErrorInfo.hint to ErrorInfo.remediation",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T11:06:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cd8f00517da28db22646f42ac7c159f107456ad3",
          "body": "…o 2.24.0\n\nRebasing onto main brought the minimal useful Realtime bundle to\n118.20 KiB, just over the 118 KiB ceiling this branch set for the hint\nstrings. Gzipped size is unchanged and within its 36 KiB limit.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: raise minimal-bundle raw ceiling to 119 KiB after rebase ont…",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:58:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4820c52d60fb6aff8bbdd43465fac96be27c745a",
          "body": "…d agents\n\nAdds CLAUDE.md (with AGENTS.md symlink, matching the convention in\nsibling Ably repos) carrying coding conventions, starting with the\nErrorInfo message/hint contract: what each field is for, when a throw\nsite warrants a hint, and the writing/accuracy rules. CONTRIBUTING.md\npoints to it. Requested in PR #2233 review as a prerequisite for merge.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: document the error message/hint contract for contributors an…",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "362fea1c4f1fc02016bb3f8cf76c62e3c80889bf",
          "body": "lmars flagged that suggesting defaultTokenParams: { clientId: \"*\" }\nwithout qualification implies the client ends up identified as \"*\",\nwhen a wildcard token actually leaves the client unidentified but able\nto claim any clientId per operation. Move the fixed-identity\nexplanation into the message and\n[…]\nscription (enterClient / message.clientId), covering both the API\nkey and wildcard-token routes, with the non-identity caveat stated\nexplicitly.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: rework 40012 wildcard-clientId hint per PR review",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6bdc313dfcdd34d9c6802555a119f7dcbdc332be",
          "body": "Fact-bearing parentheticals fold into the clause or become their own\nsentence per the hint style bar. The LiveObjects mode hints keep the\nguard that channels.get(name, { modes }) on an existing channel throws,\nsteering the caller between the two suggested remedies.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: promote fact-bearing parentheticals in hints to sentences",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "83e3c23b331669d12b5f10644854fbd73570de46",
          "body": "…ll-PR docs review\n\nVerified findings from the 2026-07-02 docstrings-pr-review run (each traced\nagainst code paths, state machines, CLI output, and a live sandbox trace):\n\n- utils.ts: derived-channel 40010 message was false (branch fires only on\n  empty/unparseable names, and the hint's own example \n[…]\ne\n  publish sites\n- auth.ts/baseclient.ts: clientId type-check hints byte-identical; residual\n  diagnosis clauses moved from hints into messages\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: fix hint factual accuracy and cross-site consistency from fu…",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6bf1b30b842f915b79e9afa7e6834d41d48f9ff9",
          "body": "Address lmars' 2026-06-29 review comments plus a PR-wide accuracy sweep,\neach verified against the SDK code paths, state machines, and ably.com docs:\n\n- auth.ts: clarify 40160 client-side vs server-side auth guidance (docs-aligned);\n  split the 40102 message vs hint; reframe the 40170 \"too large\" fa\n[…]\nepresence.ts: correct leave() guidance per state (presence members\n  are cleared on failed/detached, so there is nothing to leave)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: fix error hint factual accuracy from PR #2233 review",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "11764fd9face6a220aec00f7a6dcd8cecdfeed8e",
          "body": null,
          "is_bot": false,
          "headline": "language tweaks based on PR feedback",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29159c25be43bdf064381de2a419827fcb7abd82",
          "body": "Per PR review, message and hint must not overlap: message states only\n\"what\" went wrong; hint states only \"how\" to fix it. A workflow assessed\nall 93 message/hint pairs and tightened the 19 remaining offenders:\n\n- Stripped restated-\"what\" preambles from hints (realtimepresence,\n  connectionmanager, \n[…]\nrealtime).\n\nNo actionable guidance lost - removed text was duplicated in its\ncounterpart. tsc --noEmit clean for all edited files.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: second message/hint redundancy pass",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "af31d5477cfc87bb4e31652d34325416e238f215",
          "body": "Pinning exact hint substrings (and the static AST coverage check that\nguarded token presence) treats hints like a tested API surface. We don't\ntest exact error-message wording elsewhere, and the same reasoning\napplies to hints — they're guidance, not a contract. Remove the apparatus\nrather than main\n[…]\nI step in check.yml)\n  - test/unit/error-hints.test.js\n\nGuidance on writing/using hints will live in a best-practices doc instead.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: drop hint-coverage script and hint-pinning tests",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3b5c8616c8c5f2eb37e55531586ae553b47e1868",
          "body": "The _getDeviceIdentityToken() throw site in pushchannel.ts is reached\nfrom both subscribeDevice() and unsubscribeDevice() (via the shared\n_getPushAuthHeaders() helper), but its message and hint only mentioned\nsubscribing. CodeRabbit flagged that this misdirects users hitting the\nerror from an unsubscribe call. Rewrite both message and hint to be\naction-neutral.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: broaden device-token hint to cover unsubscribe path",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c89270a26b3a116bfae1789a560dc3b9949879a7",
          "body": "The decoding loop in basemessage.ts catches per-encoding errors and\nrewraps them with an outer ErrorInfo so the caller gets one error per\nmessage rather than one per encoding stage. The wrapper used the\npositional ErrorInfo constructor, which has no hint parameter, so the\nthree hint-bearing throws i\n[…]\nches) which\ndo not fit cause: ErrorInfo | PartialErrorInfo without an instanceof\nbranch, and CodeRabbit flagged cause as optional.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: forward inner hint when wrapping decode failures",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "82bec677bfbf29801e452f90c2bd1edd17e4a1c3",
          "body": "Sweep every (message, hint) pair in the SDK; six sites had a hint that\njust rephrased the message (or vice versa). For each, keep the\n\"what failed\" in the message and lean on the hint for the \"how to fix\".\n\nutils.ts:\n  - derived-channel regex hint dropped the rephrased \"Channel names with\n    derive\n[…]\ne \"server did not acknowledge\n    within realtimeRequestTimeout\" sentence (a rephrasing of \"Channel\n    attach/detach timed out\").\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: trim message/hint redundancy per D1 audit",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "397bef5c1e59c3a04fd21b499193e041c689e3dc",
          "body": "test/unit/error-hints.test.js:\n  - Add `expect(err.hint).to.be.a('string')` before each substring\n    assertion so a missing/undefined hint fails with a clear \"expected\n    a string\" rather than a TypeError on `.contain()` (CodeRabbit nit).\n  - Document why `rest._FilteredSubscriptions` is the trigg\n[…]\nb ~80 inline err.hint strings (~9 KiB raw, ~3 KiB gzip), with\n    recalibration guidance for future hint changes (CodeRabbit nit).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: tighten error-hints test + document bundle threshold bump",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e39c097def47ddbc3938e65b4c2f516c6b344dbd",
          "body": "Replace the regex-based scanner with a ts.createSourceFile + AST walk.\nAddresses AndyTWF's concern that the script is brittle, and CodeRabbit's\nedge-case findings (block-comment stripping breaks inside string\nliterals; semicolon termination breaks inside string literals).\n\nThe new implementation wal\n[…]\nes to the options-object form) the\nold regex extractor was finding zero hints. The new walker finds 92\nsites; all pass the rubric.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: rewrite hint-coverage as a TypeScript AST walker",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cb3c418944964b8c6afda26ffc2cecb4f86aa5cd",
          "body": "- Replace em-dashes (—) with hyphens (-) inside every err.hint string\n  per AndyTWF's convention preference. Code-comment em-dashes elsewhere\n  in the codebase are left alone.\n- Fix typo: \"caes\" → \"case\" in realtimeannotations.ts attach-state\n  comment (CodeRabbit).\n\nNo semantic change.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: style polish across hint text",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6d7de013a3ba1e7bba0df1bd33df329a8090d82d",
          "body": "Address AndyTWF's substantive feedback on hint wording, factual\naccuracy, and over-prescriptive server-rejection forecasts.\n\nWording (declarative tone, drop docs-style imperative):\n  - auth.ts authUrl Content-Type missing/unacceptable hints: switch\n    from \"Have your auth endpoint return...\" to \"Au\n[…]\n0) so\n    href auto-populates correctly under the new ErrorInfo overload.\n\nNo new throw sites added; no semantic behaviour change.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: tighten hint and message content per PR #2233 review",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6e0489b09b8e09aa8306f484c1364fb8339d5235",
          "body": "Address AndyTWF's review-feedback question on whether the SDK should\nexpose hint as a constructor parameter so the throw pattern is one call\ninstead of three. Now that ErrorInfo (and PartialErrorInfo) accept a\nvalues-object overload, all ~85 inline hint sites move from\n\n  const err = new ErrorInfo('\n[…]\nn.ts and push.ts.\n\nNo wording changes in this commit; subsequent commits will refine hint\ncontent per Andy's substantive feedback.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: migrate hint-bearing throw sites to single-call form",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b054e6299ec573d7815a8133743f5887da437ce1",
          "body": "Hint-bearing throw sites in the SDK currently follow a 3-step pattern:\n\n  const err = new ErrorInfo('msg', 40000, 400);\n  err.hint = 'how to fix...';\n  throw err;\n\nAdd an options-object overload to ErrorInfo and PartialErrorInfo so\nthe same throw collapses to one call:\n\n  throw new ErrorInfo({ messa\n[…]\nes AndyTWF's review-feedback question on whether fromValues\nshould accept hint directly so the SDK throw pattern is a single call.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: extend ErrorInfo with values-object constructor overload",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "753c502a635d0658607011a925590f3a00065b90",
          "body": "getW3CDeviceDetails.ts: swap ErrorInfo argument order at two throw\nsites where (statusCode, code) had been transposed. The ErrorInfo\nconstructor expects (message, code, statusCode); the two calls were\npassing (message, 400, 40000) where 400 is HTTP status and 40000 is\nthe SDK error code. Pre-existin\n[…]\nd\nemit a registration event with `deviceRegistration as any === undefined`.\nFlagged by CodeRabbit as a critical correctness issue.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: fix push plugin bugs surfaced by PR #2233 review",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "20e6f00845daebcd7643dfd1cec8b13b272e13b3",
          "body": "Prettier --write across the 9 hint-affected files (8 SDK source + the\nnew scripts/hint-coverage.ts) and bump the minimal-Realtime bundle\nthreshold to keep the size guard green.\n\n- Lint: prettier formatting on the trailing CLI-line additions and\n  the multi-line hint strings. No semantic change.\n- Bu\n[…]\nped to the minimal bundle.\n  Same threshold-bump pattern fff1c1bc used for the initial DX-1209\n  hint additions (106→107 / 32→33).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: address Lint + Bundle CI failures",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4cff2b6b7157241acbea07f053d07a5709306829",
          "body": "Static drift-guard for the ~90 inline err.hint sites DX-1209 added.\nFor every err.hint = assignment under src/, asserts the hint string is\nnon-empty and — if a per-code rubric exists — contains required tokens\n(e.g. 93001 must contain \"annotation_subscribe\" and \"modes\"; 40024 must\ncontain the dynami\n[…]\ned into the existing Lint workflow (.github/workflows/check.yml)\nalongside npm run lint / format:check so drift fails PRs cheaply.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: add scripts/hint-coverage.ts + wire into lint CI",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "311031f07a053021a31a78de753220da4f2ea721",
          "body": "Sharpens ~15 of the inline error hints DX-1209 introduced based on\n~120 LLM-pilot runs (see PR description for the full evaluation).\n\nLanguage: remove soft hedges (`probably`, `likely`, `potentially`,\n`may trigger`) in favour of active, definitive guidance.\n\nSecond-wall forecasts: where a client-sid\n[…]\nurned\n22-30-tool-call monkey-patch attempts into clean 7-tool-call\nacknowledgements that the SDK is right and the call is misused.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: tighten hint language, forecast server walls, add CLI tips",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cf0b78c0acf469a85b0b6d1abf7af7c2e3b1430a",
          "body": "Adopts the message-vs-hint split DX-1204 introduced (`err.message` says\n*what* failed; `err.hint` says *how* to fix it) and applies it at every\nErrorInfo throw in the SDK where a fix-it hint adds value. Server-relayed\ncodes (40140, 40142, 40160, 40300, 42910, …) are deliberately out of\nscope here — \n[…]\na per-site hint).\n\nTests pin the hint strings so silent rephrasing flags as drift, modelled\non the DX-1204 v1-callback assertions.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DX-1209: inline fix-it hints on SDK ErrorInfo throw sites",
          "author_name": "umair",
          "author_login": "umair-ably",
          "committed_at": "2026-07-09T10:52:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a398ce32f285ee4d6b712c10096e0b4b24771b4e",
          "body": "Release version 2.24.0",
          "is_bot": false,
          "headline": "Merge pull request #2258 from ably/release/2.24.0",
          "author_name": "Evgeny Khokhlov",
          "author_login": "ttypic",
          "committed_at": "2026-07-09T09:52:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9cd6c5ac1178c83691a98864ce20a164993d244",
          "body": null,
          "is_bot": false,
          "headline": "chore: release/2.24.0",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-09T09:36:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "442ec1c50198b44e938ffa4bb3c95362c8130a62",
          "body": "feat(push): iOS Live Activity support via APNs broadcast channels",
          "is_bot": false,
          "headline": "Merge pull request #2253 from ably/AIT-794/apns-channel-implementation",
          "author_name": "Evgeny Khokhlov",
          "author_login": "ttypic",
          "committed_at": "2026-07-03T17:11:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eaf29d6ddc2d9417da310b43640b96993be30d24",
          "body": "- Updated `PushChannelOptions` to set `channels` and `deviceId` as mandatory fields.\n- Added a reference link for `messageStoragePolicy` in `PushApnsBroadcastOptions`.",
          "is_bot": false,
          "headline": "fix: make `channels` and `deviceId` required in Push options",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-03T17:07:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93c03d471ceed1211eb2db93fe93a7cb53301008",
          "body": "- Introduced `LiveActivity` class to manage the lifecycle of iOS Live Activities (start, update, end) via APNs broadcast channels.\n- Updated `ably.d.ts` with types for `PushLiveActivity` and associated parameters.",
          "is_bot": false,
          "headline": "feat(push): add `liveActivity` support for managing iOS Live Activities",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-03T17:07:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf5e845b2f83a51a6c3a5f05985147bb849337d0",
          "body": "- Introduced `createApnsBroadcast` function in the Push client to support APNs broadcast channels.\n- Added support for defining `messageStoragePolicy` options.\n- Updated `ably.d.ts` to include types for `PushApnsBroadcastOptions` and `PushApnsBroadcast`.",
          "is_bot": false,
          "headline": "feat(push): add `createApnsBroadcast` for iOS Live Activity",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-07-03T17:07:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "503a39d88be6de84f57b90918b1685c334e9fdba",
          "body": "…ntials-error-code\n\nfix: use error code 40106 for missing credentials (RSC1b)",
          "is_bot": false,
          "headline": "Merge pull request #2254 from rodriguescarson/fix/rsc1b-missing-crede…",
          "author_name": "Evgeny Khokhlov",
          "author_login": "ttypic",
          "committed_at": "2026-07-02T10:54:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4454fe5049241e6e1052b546914d9665c4b55280",
          "body": "Per spec RSC1b, a client constructed with no usable auth method must fail with\nerror code 40106. ably-js threw 40160 for the basic-auth path (missing key),\nand a plain Error with no code for the { useTokenAuth: true } path.\n\nSet both throw sites in auth.ts to ErrorInfo(msg, 40106, 401), and remove t\n[…]\nSC1b UTS tests (no credentials / clientId alone /\nREST no-auth-method) now that they pass, plus tighten the useTokenAuth test to\nassert the code. Drops the RSC1b entry from deviations.md.\n\nFixes #2204",
          "is_bot": false,
          "headline": "fix: use error code 40106 for missing credentials (RSC1b)",
          "author_name": "Carson Rodrigues",
          "author_login": "rodriguescarson",
          "committed_at": "2026-07-02T08:11:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "86ee0e54f0fffaa2a4bb40bdd982b502e89f1220",
          "body": "…permission\n\nci: grant deployments:write to features workflow",
          "is_bot": false,
          "headline": "Merge pull request #2252 from ably/fix/features-workflow-deployments-…",
          "author_name": "Matt Hammond",
          "author_login": "emptyhammond",
          "committed_at": "2026-07-01T09:47:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d19aec9547c026cb7d53be2c74f08386e11c415",
          "body": "The sdk-features reusable workflow requires deployments:write and\nid-token:write. PR #2228 scoped the GITHUB_TOKEN to least privilege but\nomitted deployments:write, causing an invisible failure at workflow\nstartup. Add the missing permission.",
          "is_bot": false,
          "headline": "ci: grant deployments:write to features workflow",
          "author_name": "Matt Hammond",
          "author_login": "emptyhammond",
          "committed_at": "2026-06-25T21:34:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13bd25d02e6c7fda6b071cc418beca2d50b39394",
          "body": "Release 2.23.0",
          "is_bot": false,
          "headline": "Merge pull request #2251 from ably/release/2.23.0",
          "author_name": "Andrew Bulat",
          "author_login": "VeskeR",
          "committed_at": "2026-06-19T13:50:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6c52f6ef8c75323f484f53c9c174b7c5d85b53a",
          "body": null,
          "is_bot": false,
          "headline": "chore: release/2.23.0",
          "author_name": "Andrew Bulat",
          "author_login": "VeskeR",
          "committed_at": "2026-06-19T13:03:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa63502c00601f39ad6b35f9fd3e1d3c214afa6e",
          "body": "[ECO-5728] Fix presence auto reenter causes NACKs with \"not currently attached\" after reconnect from transient disconnect",
          "is_bot": false,
          "headline": "Merge pull request #2241 from ably/ECO-5728/fix-presence-auto-reenter",
          "author_name": "Andrew Bulat",
          "author_login": "VeskeR",
          "committed_at": "2026-06-19T12:59:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "293142226b41d598ebafbbe8081d747bda82f714",
          "body": "When the connection becomes CONNECTED the connection-wide message queue is\nflushed (RTL3d). A presence message must not be flushed while its channel\nis still re-attaching, or the server rejects it with \"not currently\nattached\". Transfer any such queued presence off the connection-wide queue\nonto the\n[…]\nnding-presence queue, so it is sent only once the\nchannel has re-attached (RTL3d2, RTP5b). Presence for channels that are not\nbeing re-attached is left on the connection-wide queue.\n\nResolves ECO-5728",
          "is_bot": false,
          "headline": "Queue presence onto re-attaching channels on reconnect (RTL3d2)",
          "author_name": "Andrew Bulat",
          "author_login": "VeskeR",
          "committed_at": "2026-06-19T11:58:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "55dae3c108fa9296489ca01fd0e4c50b2e87faea",
          "body": "A presence operation on a channel that has not yet reached the ATTACHED\nstate is queued at the channel level only when the queueMessages client\noption is enabled (RTP16b); when it is disabled the operation is rejected\ninstead of queued. The implicit attach of an initialized or detached\nchannel (RTP8d) is independent of queueMessages and always happens.",
          "is_bot": false,
          "headline": "Honor queueMessages for channel-level presence queueing (RTP16b)",
          "author_name": "Andrew Bulat",
          "author_login": "VeskeR",
          "committed_at": "2026-06-19T11:58:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6452384db9870c486a4dcf55f9dbdd2ec9f67ea",
          "body": "feat(react): allow omitting channelName to use the nearest ChannelProvider",
          "is_bot": false,
          "headline": "Merge pull request #2248 from ably/react-hooks-channel",
          "author_name": "Owen Pearson",
          "author_login": "owenpearson",
          "committed_at": "2026-06-19T10:50:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d5441648dc7dcde5a11949f6a0085c1d85158bc",
          "body": "…vider",
          "is_bot": false,
          "headline": "feat(react): allow omitting channelName to use the nearest ChannelPro…",
          "author_name": "owenpearson",
          "author_login": "owenpearson",
          "committed_at": "2026-06-19T07:42:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7cf2a94094bf3ba54b82bed1b87e3ef7573d995",
          "body": "fix(test): update tests to support new 40165 error code for publish without permission",
          "is_bot": false,
          "headline": "Merge pull request #2250 from ably/fix/broken-publish-tests",
          "author_name": "Evgeny Khokhlov",
          "author_login": "ttypic",
          "committed_at": "2026-06-18T14:47:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb649472f0368de77ccd30caefa682902653554a",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into fix/broken-publish-tests",
          "author_name": "Evgeny Khokhlov",
          "author_login": "ttypic",
          "committed_at": "2026-06-18T14:42:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "266dd87bbc52f4d4b8bb875c88efd3d2daac1b01",
          "body": "feat[uts]: Pub/Sub unified test suite added",
          "is_bot": false,
          "headline": "Merge pull request #2247 from ably/uts-pubsub",
          "author_name": "Evgeny Khokhlov",
          "author_login": "ttypic",
          "committed_at": "2026-06-18T12:37:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e155351da63eac170057e82de69ad8d244d7b942",
          "body": "…ithout permission\n\n- Updated test checks to account for `40165` error code",
          "is_bot": false,
          "headline": "fix(test): update tests to support new 40165 error code for publish w…",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-06-18T11:49:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f157f2e01b456e385daf1b3e18bf4118688d06d5",
          "body": null,
          "is_bot": false,
          "headline": "test(uts): add uts check workflow",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-06-18T09:08:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a502dba2e3db4c4064f27ce5869fbe36521f335b",
          "body": null,
          "is_bot": false,
          "headline": "chore(uts): prettier reformat",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-06-18T08:10:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7430d0b3725daa41e5a38abd1b26a9bf3d41b860",
          "body": "- Added optional parameter support to multiple functions to ensure compatibility with `ably.d.ts`\n- Updated tests to include stricter type annotations and address cases with potential type conflicts.\n- Fixed minor logging inconsistencies, ensuring proper initialization of logger.",
          "is_bot": false,
          "headline": "refactor(uts): improve type safety and function signatures",
          "author_name": "evgeny",
          "author_login": "ttypic",
          "committed_at": "2026-06-18T07:57:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25c9a7507a33139cd4c01d7e3f5724dff9fe150c",
          "body": "Verify decode and round-trip of all 8 ably-common msgpack fixtures\n(strings, binary, JSON array/object at various sizes).\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add RSL6a3 msgpack interoperability tests",
          "author_name": "Paddy Byers",
          "author_login": "paddybyers",
          "committed_at": "2026-06-18T07:47:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a8b3ddf810be8bbfd365833be64c06af306762ff",
          "body": "Add describeEachProtocol helper and update all 10 data-path integration\ntest files to run with both protocol variants. Each test receives the\nprotocol and sets useBinaryProtocol accordingly.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Run data-path integration tests with both JSON and msgpack (G1)",
          "author_name": "Paddy Byers",
          "author_login": "paddybyers",
          "committed_at": "2026-06-18T07:47:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bce710e33d2af6ed64c2a36fb2139d290df92236",
          "body": "- Unit tests: endpoint: 'sandbox' → 'test' (not a real environment)\n- Update host/fallback assertions to match (test.realtime.ably.net)\n- Proxy helper: use nonprod sandbox hostnames\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Align unit test endpoints with UTS specs",
          "author_name": "Paddy Byers",
          "author_login": "paddybyers",
          "committed_at": "2026-06-18T07:47:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8fb6b7f432468d868cbb4f4544e8acf171a29ad3",
          "body": "Every ably-js UTS test now has a `// UTS: <test-id>` comment mapping it\nto its corresponding UTS spec. All 1120 UTS Test IDs are covered (1226\ntotal JS tests, with some specs covered by multiple tests via .N suffixes).\n\nNew tests added across 13 files:\n- Fallback/endpoint config (REC): 10 tests in f\n[…]\nfallbackHostsUseDefault not implemented, connectivity check not accessible,\naddRequestIds not implemented, switch-to-basic-auth not supported).\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add UTS test IDs to all tests and implement 50 missing test scenarios",
          "author_name": "Paddy Byers",
          "author_login": "paddybyers",
          "committed_at": "2026-06-18T07:47:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "983161ac0f7b4013e1bcca2e8eecd2527eb2137c",
          "body": "Adds tests for unreachable endpoint (ECONNREFUSED), connection drop\n(http_drop), 5xx with/without error body, 4xx not retried, and RSL1k4\nidempotent publish (skipped pending proxy response modification support).\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add comprehensive REST proxy integration tests for HTTP error handling",
          "author_name": "Paddy Byers",
          "author_login": "paddybyers",
          "committed_at": "2026-06-18T07:47:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 100,
      "commits_last_year": 399,
      "latest_release_at": "2026-07-17T14:45:29Z",
      "latest_release_tag": "2.25.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 46,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 18.7
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "ably",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/ably",
          "is_deprecated": false,
          "latest_version": "2.25.0",
          "repository_url": "https://github.com/ably/ably-js",
          "versions_count": 216,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 9,
          "monthly_downloads": 4424547,
          "first_published_at": "2015-04-12T22:58:41.192000Z",
          "latest_published_at": "2026-07-17T14:48:59.338000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 61,
      "stars": 361,
      "watchers": 30,
      "fork_history": {
        "days": [
          {
            "date": "2015-02-05",
            "count": 1
          },
          {
            "date": "2016-01-24",
            "count": 1
          },
          {
            "date": "2016-01-29",
            "count": 1
          },
          {
            "date": "2016-08-09",
            "count": 1
          },
          {
            "date": "2016-10-31",
            "count": 1
          },
          {
            "date": "2016-12-19",
            "count": 1
          },
          {
            "date": "2017-06-21",
            "count": 1
          },
          {
            "date": "2017-12-10",
            "count": 1
          },
          {
            "date": "2018-01-25",
            "count": 1
          },
          {
            "date": "2018-04-13",
            "count": 1
          },
          {
            "date": "2018-06-12",
            "count": 1
          },
          {
            "date": "2018-08-02",
            "count": 1
          },
          {
            "date": "2019-02-06",
            "count": 1
          },
          {
            "date": "2019-02-11",
            "count": 1
          },
          {
            "date": "2019-05-10",
            "count": 1
          },
          {
            "date": "2019-06-19",
            "count": 1
          },
          {
            "date": "2019-08-30",
            "count": 1
          },
          {
            "date": "2020-09-14",
            "count": 1
          },
          {
            "date": "2020-12-08",
            "count": 1
          },
          {
            "date": "2021-07-04",
            "count": 1
          },
          {
            "date": "2021-08-15",
            "count": 1
          },
          {
            "date": "2021-10-14",
            "count": 1
          },
          {
            "date": "2021-10-25",
            "count": 2
          },
          {
            "date": "2022-02-07",
            "count": 1
          },
          {
            "date": "2022-03-28",
            "count": 1
          },
          {
            "date": "2022-04-01",
            "count": 1
          },
          {
            "date": "2022-04-30",
            "count": 1
          },
          {
            "date": "2022-05-08",
            "count": 1
          },
          {
            "date": "2022-05-30",
            "count": 1
          },
          {
            "date": "2022-07-07",
            "count": 1
          },
          {
            "date": "2022-08-31",
            "count": 1
          },
          {
            "date": "2022-09-26",
            "count": 1
          },
          {
            "date": "2022-12-05",
            "count": 1
          },
          {
            "date": "2023-01-18",
            "count": 1
          },
          {
            "date": "2023-02-06",
            "count": 1
          },
          {
            "date": "2023-03-06",
            "count": 1
          },
          {
            "date": "2023-03-16",
            "count": 1
          },
          {
            "date": "2023-04-14",
            "count": 1
          },
          {
            "date": "2023-10-23",
            "count": 1
          },
          {
            "date": "2023-11-12",
            "count": 1
          },
          {
            "date": "2023-11-17",
            "count": 1
          },
          {
            "date": "2023-11-29",
            "count": 1
          },
          {
            "date": "2024-01-01",
            "count": 1
          },
          {
            "date": "2024-01-26",
            "count": 1
          },
          {
            "date": "2024-01-29",
            "count": 1
          },
          {
            "date": "2024-03-26",
            "count": 1
          },
          {
            "date": "2024-06-21",
            "count": 1
          },
          {
            "date": "2024-09-30",
            "count": 1
          },
          {
            "date": "2024-11-26",
            "count": 1
          },
          {
            "date": "2025-03-06",
            "count": 1
          },
          {
            "date": "2025-04-30",
            "count": 1
          },
          {
            "date": "2025-05-04",
            "count": 1
          },
          {
            "date": "2025-07-04",
            "count": 1
          },
          {
            "date": "2025-08-04",
            "count": 1
          },
          {
            "date": "2025-09-09",
            "count": 1
          },
          {
            "date": "2025-10-20",
            "count": 1
          },
          {
            "date": "2026-05-04",
            "count": 1
          },
          {
            "date": "2026-06-29",
            "count": 1
          },
          {
            "date": "2026-07-02",
            "count": 1
          },
          {
            "date": "2026-07-12",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 61,
        "total_forks": 61
      },
      "star_history": null,
      "open_issues_and_prs": 204
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "src/platform/react-hooks/tsconfig.json",
        "test/package/browser/template/src/tsconfig.json",
        "test/package/browser/template/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 445747,
      "source_files_sampled": 429,
      "oversized_source_files": 7,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 3743
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "requirejs",
            "direct": false,
            "version": "2.1.22",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 10,
            "advisory_ids": [
              "GHSA-x3m3-4wpv-5vgc"
            ],
            "fixed_version": "2.3.7",
            "advisory_count": 1,
            "oldest_advisory_days": 751
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "3.29.4",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.1,
            "advisory_ids": [
              "GHSA-gcx4-mw62-g8wm",
              "GHSA-mw96-cpmx-2vgc"
            ],
            "fixed_version": "4.59.0",
            "advisory_count": 2,
            "oldest_advisory_days": 666
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "4.12.0",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.1,
            "advisory_ids": [
              "GHSA-gcx4-mw62-g8wm",
              "GHSA-mw96-cpmx-2vgc"
            ],
            "fixed_version": "4.59.0",
            "advisory_count": 2,
            "oldest_advisory_days": 666
          },
          {
            "name": "vitest",
            "direct": false,
            "version": "0.18.1",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-5xrq-8626-4rwp"
            ],
            "fixed_version": "4.1.0",
            "advisory_count": 1,
            "oldest_advisory_days": 51
          },
          {
            "name": "body-parser",
            "direct": false,
            "version": "1.20.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-qwcr-r2fm-qrc7",
              "GHSA-v422-hmwv-36x6"
            ],
            "fixed_version": "2.3.0",
            "advisory_count": 2,
            "oldest_advisory_days": 680
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.11",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp",
              "GHSA-f886-m6hf-6m8v",
              "GHSA-v6h2-p8h4-qcjw"
            ],
            "fixed_version": "5.0.7",
            "advisory_count": 3,
            "oldest_advisory_days": 407
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.1.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp"
            ],
            "fixed_version": "5.0.7",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          },
          {
            "name": "fast-uri",
            "direct": false,
            "version": "3.1.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-4c8g-83qw-93j6",
              "GHSA-v2hh-gcrm-f6hx"
            ],
            "fixed_version": "4.1.1",
            "advisory_count": 2,
            "oldest_advisory_days": 1
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "3.14.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-52cp-r559-cp3m",
              "GHSA-h67p-54hq-rp68"
            ],
            "fixed_version": "4.3.0",
            "advisory_count": 2,
            "oldest_advisory_days": 37
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.0.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-52cp-r559-cp3m",
              "GHSA-h67p-54hq-rp68",
              "GHSA-mh29-5h37-fv8m"
            ],
            "fixed_version": "4.3.0",
            "advisory_count": 3,
            "oldest_advisory_days": 250
          },
          {
            "name": "linkify-it",
            "direct": false,
            "version": "4.0.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-22p9-wv53-3rq4",
              "GHSA-v245-v573-v5vm"
            ],
            "fixed_version": "5.0.2",
            "advisory_count": 2,
            "oldest_advisory_days": 25
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.17.23",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 8.1,
            "advisory_ids": [
              "GHSA-f23m-r3pf-42rh",
              "GHSA-r5fr-rjxr-66jc"
            ],
            "fixed_version": "4.18.0",
            "advisory_count": 2,
            "oldest_advisory_days": 111
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.0.4",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-23c5-xmqv-rm74",
              "GHSA-3ppc-4f35-3m26",
              "GHSA-7r86-cg39-jmmj",
              "GHSA-f8q6-p94x-37v3"
            ],
            "fixed_version": "10.2.3",
            "advisory_count": 4,
            "oldest_advisory_days": 1373
          },
          {
            "name": "path-to-regexp",
            "direct": false,
            "version": "0.1.7",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-37ch-88jc-xwx2",
              "GHSA-9wv6-86v2-598j",
              "GHSA-rhx6-c78j-4q9w"
            ],
            "fixed_version": "8.0.0",
            "advisory_count": 3,
            "oldest_advisory_days": 680
          },
          {
            "name": "playwright",
            "direct": false,
            "version": "1.41.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": null,
            "advisory_ids": [
              "GHSA-7mvr-c777-76hp"
            ],
            "fixed_version": "1.55.1",
            "advisory_count": 1,
            "oldest_advisory_days": 281
          },
          {
            "name": "serialize-javascript",
            "direct": false,
            "version": "5.0.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 8.1,
            "advisory_ids": [
              "GHSA-5c6j-r48x-rmvq",
              "GHSA-qj8w-gfj5-8c6v"
            ],
            "fixed_version": "7.0.5",
            "advisory_count": 2,
            "oldest_advisory_days": 144
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "8.0.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-w5hq-g745-h8pq"
            ],
            "fixed_version": "13.0.1",
            "advisory_count": 1,
            "oldest_advisory_days": 90
          },
          {
            "name": "vite",
            "direct": false,
            "version": "3.2.11",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-356w-63v5-8wf4",
              "GHSA-4r4m-qw57-chr8",
              "GHSA-4w7w-66w2-5vf9",
              "GHSA-859w-5945-r5v3",
              "GHSA-93m4-6634-74q7",
              "GHSA-c27g-q93r-2cwf",
              "GHSA-fx2h-pf6j-xcff",
              "GHSA-g4jq-h2w9-997c",
              "GHSA-jqfw-vq24-v9c3",
              "GHSA-v6wh-96g9-6wx3"
            ],
            "fixed_version": "8.0.16",
            "advisory_count": 13,
            "oldest_advisory_days": 546
          },
          {
            "name": "vite",
            "direct": false,
            "version": "4.5.14",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-4w7w-66w2-5vf9",
              "GHSA-93m4-6634-74q7",
              "GHSA-c27g-q93r-2cwf",
              "GHSA-fx2h-pf6j-xcff",
              "GHSA-g4jq-h2w9-997c",
              "GHSA-jqfw-vq24-v9c3",
              "GHSA-v6wh-96g9-6wx3"
            ],
            "fixed_version": "8.0.16",
            "advisory_count": 7,
            "oldest_advisory_days": 315
          },
          {
            "name": "vite",
            "direct": false,
            "version": "4.5.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-356w-63v5-8wf4",
              "GHSA-4r4m-qw57-chr8",
              "GHSA-4w7w-66w2-5vf9",
              "GHSA-64vr-g452-qvp3",
              "GHSA-859w-5945-r5v3",
              "GHSA-8jhw-289h-jh2g",
              "GHSA-93m4-6634-74q7",
              "GHSA-9cwx-2883-4wfx",
              "GHSA-c27g-q93r-2cwf",
              "GHSA-fx2h-pf6j-xcff"
            ],
            "fixed_version": "8.0.16",
            "advisory_count": 16,
            "oldest_advisory_days": 840
          },
          {
            "name": "vite",
            "direct": false,
            "version": "5.1.3",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-356w-63v5-8wf4",
              "GHSA-4r4m-qw57-chr8",
              "GHSA-4w7w-66w2-5vf9",
              "GHSA-64vr-g452-qvp3",
              "GHSA-859w-5945-r5v3",
              "GHSA-8jhw-289h-jh2g",
              "GHSA-93m4-6634-74q7",
              "GHSA-9cwx-2883-4wfx",
              "GHSA-c27g-q93r-2cwf",
              "GHSA-fx2h-pf6j-xcff"
            ],
            "fixed_version": "8.0.16",
            "advisory_count": 16,
            "oldest_advisory_days": 840
          },
          {
            "name": "@babel/helpers",
            "direct": false,
            "version": "7.23.9",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.2,
            "advisory_ids": [
              "GHSA-968p-4wvh-cqc8"
            ],
            "fixed_version": "8.0.0-alpha.17",
            "advisory_count": 1,
            "oldest_advisory_days": 497
          },
          {
            "name": "diff",
            "direct": false,
            "version": "4.0.2",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-73rr-hh4g-fpgx"
            ],
            "fixed_version": "8.0.3",
            "advisory_count": 1,
            "oldest_advisory_days": 188
          },
          {
            "name": "diff",
            "direct": false,
            "version": "5.0.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-73rr-hh4g-fpgx"
            ],
            "fixed_version": "8.0.3",
            "advisory_count": 1,
            "oldest_advisory_days": 188
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.15.18",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-67mh-4wv8-2f99"
            ],
            "fixed_version": "0.25.0",
            "advisory_count": 1,
            "oldest_advisory_days": 527
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.18.20",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-67mh-4wv8-2f99"
            ],
            "fixed_version": "0.25.0",
            "advisory_count": 1,
            "oldest_advisory_days": 527
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.19.12",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-67mh-4wv8-2f99"
            ],
            "fixed_version": "0.25.0",
            "advisory_count": 1,
            "oldest_advisory_days": 527
          },
          {
            "name": "express",
            "direct": false,
            "version": "4.18.2",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.1,
            "advisory_ids": [
              "GHSA-qw6h-vgh9-j6wx",
              "GHSA-rv95-896h-c2vc"
            ],
            "fixed_version": "5.0.0-beta.3",
            "advisory_count": 2,
            "oldest_advisory_days": 848
          },
          {
            "name": "markdown-it",
            "direct": false,
            "version": "13.0.1",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-38c4-r59v-3vqw",
              "GHSA-6v5v-wf23-fmfq"
            ],
            "fixed_version": "14.2.0",
            "advisory_count": 2,
            "oldest_advisory_days": 160
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.1.20",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.5,
            "advisory_ids": [
              "GHSA-mwcw-c2x4-8c55",
              "GHSA-qrpm-p2h7-hrv2"
            ],
            "fixed_version": "5.0.9",
            "advisory_count": 2,
            "oldest_advisory_days": 1642
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.7",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 4.3,
            "advisory_ids": [
              "GHSA-mwcw-c2x4-8c55"
            ],
            "fixed_version": "5.0.9",
            "advisory_count": 1,
            "oldest_advisory_days": 590
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "8.4.35",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.1,
            "advisory_ids": [
              "GHSA-qx2v-qp2m-jg93"
            ],
            "fixed_version": "8.5.10",
            "advisory_count": 1,
            "oldest_advisory_days": 89
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.11.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-6rw7-vpxm-498p",
              "GHSA-w7fw-mjwx-w883"
            ],
            "fixed_version": "6.14.2",
            "advisory_count": 2,
            "oldest_advisory_days": 203
          },
          {
            "name": "send",
            "direct": false,
            "version": "0.18.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5,
            "advisory_ids": [
              "GHSA-m6fv-jmcg-4jfg"
            ],
            "fixed_version": "0.19.0",
            "advisory_count": 1,
            "oldest_advisory_days": 679
          },
          {
            "name": "serve-static",
            "direct": false,
            "version": "1.15.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5,
            "advisory_ids": [
              "GHSA-cm22-4g7w-348p"
            ],
            "fixed_version": "2.1.0",
            "advisory_count": 1,
            "oldest_advisory_days": 679
          },
          {
            "name": "@babel/core",
            "direct": false,
            "version": "7.23.9",
            "severity": "low",
            "ecosystem": "npm",
            "cvss_score": 3.2,
            "advisory_ids": [
              "GHSA-4x5r-pxfx-6jf8"
            ],
            "fixed_version": "8.0.0-rc.6",
            "advisory_count": 1,
            "oldest_advisory_days": 37
          },
          {
            "name": "aws-sdk",
            "direct": false,
            "version": "2.1693.0",
            "severity": "low",
            "ecosystem": "npm",
            "cvss_score": 3.7,
            "advisory_ids": [
              "GHSA-j965-2qgj-vjmq"
            ],
            "fixed_version": null,
            "advisory_count": 1,
            "oldest_advisory_days": 194
          },
          {
            "name": "body-parser",
            "direct": false,
            "version": "1.20.5",
            "severity": "low",
            "ecosystem": "npm",
            "cvss_score": 3.7,
            "advisory_ids": [
              "GHSA-v422-hmwv-36x6"
            ],
            "fixed_version": "2.3.0",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          },
          {
            "name": "cookie",
            "direct": false,
            "version": "0.5.0",
            "severity": "low",
            "ecosystem": "npm",
            "cvss_score": null,
            "advisory_ids": [
              "GHSA-pxg6-pf52-xh8x"
            ],
            "fixed_version": "0.7.0",
            "advisory_count": 1,
            "oldest_advisory_days": 655
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.27.7",
            "severity": "low",
            "ecosystem": "npm",
            "cvss_score": 2.5,
            "advisory_ids": [
              "GHSA-g7r4-m6w7-qqqr"
            ],
            "fixed_version": "0.28.1",
            "advisory_count": 1,
            "oldest_advisory_days": 39
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "low": 5,
          "high": 17,
          "critical": 4,
          "moderate": 14
        },
        "advisory_count": 109,
        "affected_count": 40,
        "assessed_count": 1043,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@ably/msgpack-js",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.4.0"
        },
        {
          "name": "dequal",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.3"
        },
        {
          "name": "fastestsmallesttextencoderdecoder",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.22"
        },
        {
          "name": "got",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.8.5"
        },
        {
          "name": "ulid",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.3.0"
        },
        {
          "name": "ws",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.17.1"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@ably/msgpack-js",
            "direct": true,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "dequal",
            "direct": true,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "fastestsmallesttextencoderdecoder",
            "direct": true,
            "version": "1.0.22",
            "ecosystem": "npm"
          },
          {
            "name": "got",
            "direct": true,
            "version": "11.8.6",
            "ecosystem": "npm"
          },
          {
            "name": "ulid",
            "direct": true,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ws",
            "direct": true,
            "version": "8.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aashutoshrathi/word-wrap",
            "direct": false,
            "version": "1.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@ably/vcdiff-decoder",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@ampproject/remapping",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@andrewbranch/untar.js",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@arethetypeswrong/cli",
            "direct": false,
            "version": "0.13.5",
            "ecosystem": "npm"
          },
          {
            "name": "@arethetypeswrong/core",
            "direct": false,
            "version": "0.13.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.12.11",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.23.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/compat-data",
            "direct": false,
            "version": "7.23.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/compat-data",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/core",
            "direct": false,
            "version": "7.23.9",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/core",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/generator",
            "direct": false,
            "version": "7.23.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/generator",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-annotate-as-pure",
            "direct": false,
            "version": "7.22.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-compilation-targets",
            "direct": false,
            "version": "7.23.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-compilation-targets",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-environment-visitor",
            "direct": false,
            "version": "7.22.20",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-function-name",
            "direct": false,
            "version": "7.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-globals",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-hoist-variables",
            "direct": false,
            "version": "7.22.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-module-imports",
            "direct": false,
            "version": "7.22.15",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-module-imports",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-module-transforms",
            "direct": false,
            "version": "7.23.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-module-transforms",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-plugin-utils",
            "direct": false,
            "version": "7.22.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-simple-access",
            "direct": false,
            "version": "7.22.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-split-export-declaration",
            "direct": false,
            "version": "7.22.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-string-parser",
            "direct": false,
            "version": "7.23.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-string-parser",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.22.20",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-option",
            "direct": false,
            "version": "7.23.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-option",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helpers",
            "direct": false,
            "version": "7.23.9",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helpers",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/highlight",
            "direct": false,
            "version": "7.23.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "7.23.9",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-jsx",
            "direct": false,
            "version": "7.23.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-react-jsx",
            "direct": false,
            "version": "7.23.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-react-jsx-development",
            "direct": false,
            "version": "7.22.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-react-jsx-self",
            "direct": false,
            "version": "7.23.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-react-jsx-source",
            "direct": false,
            "version": "7.23.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/runtime",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/template",
            "direct": false,
            "version": "7.23.9",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/template",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/traverse",
            "direct": false,
            "version": "7.23.9",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/traverse",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "7.23.9",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@colors/colors",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@cspotcode/source-map-support",
            "direct": false,
            "version": "0.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@discoveryjs/json-ext",
            "direct": false,
            "version": "0.5.7",
            "ecosystem": "npm"
          },
          {
            "name": "@es-joy/jsdoccomment",
            "direct": false,
            "version": "0.37.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/aix-ppc64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/aix-ppc64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openharmony-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint-community/eslint-utils",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint-community/regexpp",
            "direct": false,
            "version": "4.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/eslintrc",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/config-array",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/object-schema",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@isaacs/cliui",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.3.13",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/remapping",
            "direct": false,
            "version": "2.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/resolve-uri",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/resolve-uri",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/set-array",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/source-map",
            "direct": false,
            "version": "0.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.4.15",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.22",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.31",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.scandir",
            "direct": false,
            "version": "2.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.stat",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.walk",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "@pkgjs/parseargs",
            "direct": false,
            "version": "0.11.0",
            "ecosystem": "npm"
          },
          {
            "name": "@playwright/experimental-ct-core",
            "direct": false,
            "version": "1.41.2",
            "ecosystem": "npm"
          },
          {
            "name": "@playwright/experimental-ct-react",
            "direct": false,
            "version": "1.41.2",
            "ecosystem": "npm"
          },
          {
            "name": "@playwright/test",
            "direct": false,
            "version": "1.41.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/pluginutils",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-android-arm-eabi",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-android-arm64",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-darwin-arm64",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-darwin-x64",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm-gnueabihf",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm64-gnu",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm64-musl",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-riscv64-gnu",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-x64-gnu",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-x64-musl",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-arm64-msvc",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-ia32-msvc",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-x64-msvc",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sindresorhus/is",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@szmarczak/http-timer",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@testing-library/dom",
            "direct": false,
            "version": "8.20.1",
            "ecosystem": "npm"
          },
          {
            "name": "@testing-library/react",
            "direct": false,
            "version": "13.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tootallnate/once",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node10",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node12",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node14",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node16",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node16",
            "direct": false,
            "version": "16.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/aria-query",
            "direct": false,
            "version": "5.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__core",
            "direct": false,
            "version": "7.20.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__generator",
            "direct": false,
            "version": "7.6.8",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__template",
            "direct": false,
            "version": "7.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__traverse",
            "direct": false,
            "version": "7.20.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/body-parser",
            "direct": false,
            "version": "1.19.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/cacheable-request",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/caseless",
            "direct": false,
            "version": "0.12.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/chai",
            "direct": false,
            "version": "4.3.11",
            "ecosystem": "npm"
          },
          {
            "name": "@types/chai-subset",
            "direct": false,
            "version": "1.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/cli-table",
            "direct": false,
            "version": "0.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/connect",
            "direct": false,
            "version": "3.4.38",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/express",
            "direct": false,
            "version": "4.17.21",
            "ecosystem": "npm"
          },
          {
            "name": "@types/express-serve-static-core",
            "direct": false,
            "version": "4.17.43",
            "ecosystem": "npm"
          },
          {
            "name": "@types/http-cache-semantics",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/http-errors",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/jmespath",
            "direct": false,
            "version": "0.15.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/json-schema",
            "direct": false,
            "version": "7.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "@types/json5",
            "direct": false,
            "version": "0.0.29",
            "ecosystem": "npm"
          },
          {
            "name": "@types/keyv",
            "direct": false,
            "version": "3.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/mime",
            "direct": false,
            "version": "1.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/mocha",
            "direct": false,
            "version": "10.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "18.19.8",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "20.11.19",
            "ecosystem": "npm"
          },
          {
            "name": "@types/prop-types",
            "direct": false,
            "version": "15.7.11",
            "ecosystem": "npm"
          },
          {
            "name": "@types/qs",
            "direct": false,
            "version": "6.9.11",
            "ecosystem": "npm"
          },
          {
            "name": "@types/range-parser",
            "direct": false,
            "version": "1.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/react",
            "direct": false,
            "version": "18.2.48",
            "ecosystem": "npm"
          },
          {
            "name": "@types/react-dom",
            "direct": false,
            "version": "18.2.18",
            "ecosystem": "npm"
          },
          {
            "name": "@types/request",
            "direct": false,
            "version": "2.48.12",
            "ecosystem": "npm"
          },
          {
            "name": "@types/responselike",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/scheduler",
            "direct": false,
            "version": "0.16.8",
            "ecosystem": "npm"
          },
          {
            "name": "@types/semver",
            "direct": false,
            "version": "7.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/send",
            "direct": false,
            "version": "0.17.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/serve-static",
            "direct": false,
            "version": "1.15.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/tough-cookie",
            "direct": false,
            "version": "4.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/ws",
            "direct": false,
            "version": "8.5.10",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/eslint-plugin",
            "direct": false,
            "version": "5.62.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/parser",
            "direct": false,
            "version": "5.62.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/scope-manager",
            "direct": false,
            "version": "5.62.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/type-utils",
            "direct": false,
            "version": "5.62.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/types",
            "direct": false,
            "version": "5.62.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/typescript-estree",
            "direct": false,
            "version": "5.62.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/utils",
            "direct": false,
            "version": "5.62.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/visitor-keys",
            "direct": false,
            "version": "5.62.0",
            "ecosystem": "npm"
          },
          {
            "name": "@ungap/promise-all-settled",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@vitejs/plugin-react",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@vitejs/plugin-react",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/ast",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/floating-point-hex-parser",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-api-error",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-buffer",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-numbers",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-wasm-bytecode",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-wasm-section",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/ieee754",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/leb128",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/utf8",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-edit",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-gen",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-opt",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-parser",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wast-printer",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webpack-cli/configtest",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webpack-cli/info",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webpack-cli/serve",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@xtuc/ieee754",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@xtuc/long",
            "direct": false,
            "version": "4.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "abab",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "abbrev",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "accepts",
            "direct": false,
            "version": "1.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "7.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.11.3",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.17.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-globals",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-import-phases",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-jsx",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-walk",
            "direct": false,
            "version": "8.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "6.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "8.20.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-formats",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-keywords",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-colors",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-colors",
            "direct": false,
            "version": "4.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-escapes",
            "direct": false,
            "version": "6.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-sequence-parser",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "6.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansicolors",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "anymatch",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "arg",
            "direct": false,
            "version": "4.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "aria-query",
            "direct": false,
            "version": "5.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "array-buffer-byte-length",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "array-each",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "array-flatten",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "array-includes",
            "direct": false,
            "version": "3.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "array-slice",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "array-union",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "array.prototype.findlastindex",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "array.prototype.flat",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "array.prototype.flatmap",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "array.prototype.tosorted",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "arraybuffer.prototype.slice",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "assertion-error",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "astral-regex",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "async",
            "direct": false,
            "version": "1.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "async",
            "direct": false,
            "version": "3.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "asynciterator.prototype",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "asynckit",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "available-typed-arrays",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "aws-sdk",
            "direct": false,
            "version": "2.1693.0",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "base64-js",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "baseline-browser-mapping",
            "direct": false,
            "version": "2.10.37",
            "ecosystem": "npm"
          },
          {
            "name": "binary-extensions",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "body-parser",
            "direct": false,
            "version": "1.20.1",
            "ecosystem": "npm"
          },
          {
            "name": "body-parser",
            "direct": false,
            "version": "1.20.5",
            "ecosystem": "npm"
          },
          {
            "name": "bops",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "browser-stdout",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist",
            "direct": false,
            "version": "4.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist",
            "direct": false,
            "version": "4.28.2",
            "ecosystem": "npm"
          },
          {
            "name": "btoa",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": false,
            "version": "4.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-from",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "builtins",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "bytes",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "cacheable-lookup",
            "direct": false,
            "version": "5.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "cacheable-request",
            "direct": false,
            "version": "7.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "call-bound",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-lite",
            "direct": false,
            "version": "1.0.30001588",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-lite",
            "direct": false,
            "version": "1.0.30001799",
            "ecosystem": "npm"
          },
          {
            "name": "cardinal",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "chai",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "char-regex",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "charenc",
            "direct": false,
            "version": "0.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "check-error",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "3.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "chrome-trace-event",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "cli-table",
            "direct": false,
            "version": "0.3.11",
            "ecosystem": "npm"
          },
          {
            "name": "cli-table3",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "7.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "clone-deep",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "clone-response",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "1.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "colorette",
            "direct": false,
            "version": "2.0.20",
            "ecosystem": "npm"
          },
          {
            "name": "colors",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "colors",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "combined-stream",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "10.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "2.20.3",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "9.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "comment-parser",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "content-disposition",
            "direct": false,
            "version": "0.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "content-type",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cookie",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "cookie",
            "direct": false,
            "version": "0.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "cookie-signature",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "cors",
            "direct": false,
            "version": "2.8.5",
            "ecosystem": "npm"
          },
          {
            "name": "create-require",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "crypt",
            "direct": false,
            "version": "0.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "cssom",
            "direct": false,
            "version": "0.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "cssom",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "cssstyle",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "csstype",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "csv",
            "direct": false,
            "version": "6.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "csv-generate",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "csv-parse",
            "direct": false,
            "version": "5.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "csv-stringify",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "data-urls",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "dateformat",
            "direct": false,
            "version": "4.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "2.6.9",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "3.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "decamelize",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "decimal.js",
            "direct": false,
            "version": "10.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "decompress-response",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "deep-eql",
            "direct": false,
            "version": "4.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "deep-equal",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "deep-for-each",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "deep-is",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "defer-to-connect",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "define-data-property",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "define-data-property",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "define-properties",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "delayed-stream",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "depd",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "destroy",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "detect-file",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dir-glob",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "doctrine",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "doctrine",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dom-accessibility-api",
            "direct": false,
            "version": "0.5.16",
            "ecosystem": "npm"
          },
          {
            "name": "domexception",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dox",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "duplexer",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "eastasianwidth",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "ee-first",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ejs",
            "direct": false,
            "version": "3.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "electron-to-chromium",
            "direct": false,
            "version": "1.4.677",
            "ecosystem": "npm"
          },
          {
            "name": "electron-to-chromium",
            "direct": false,
            "version": "1.5.373",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "9.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "emojilib",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "encodeurl",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "encodeurl",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "end-of-stream",
            "direct": false,
            "version": "1.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "enhanced-resolve",
            "direct": false,
            "version": "5.24.0",
            "ecosystem": "npm"
          },
          {
            "name": "enquirer",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "envinfo",
            "direct": false,
            "version": "7.11.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-abstract",
            "direct": false,
            "version": "1.22.3",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-get-iterator",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "es-iterator-helpers",
            "direct": false,
            "version": "1.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "es-module-lexer",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "es-set-tostringtag",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-shim-unscopables",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "es-to-primitive",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.18.20",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.19.12",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-android-64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-android-arm64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-darwin-64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-darwin-arm64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-freebsd-64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-freebsd-arm64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-linux-32",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-linux-64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-linux-arm",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-linux-arm64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-linux-mips64le",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-linux-ppc64le",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-linux-riscv64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-linux-s390x",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-netbsd-64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-openbsd-64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-plugin-umd-wrapper",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-runner",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-sunos-64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-windows-32",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-windows-64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-windows-arm64",
            "direct": false,
            "version": "0.15.18",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.1.2",
            "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": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "escodegen",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "7.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-import-resolver-node",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-module-utils",
            "direct": false,
            "version": "2.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-import",
            "direct": false,
            "version": "2.29.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-jsdoc",
            "direct": false,
            "version": "40.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-react",
            "direct": false,
            "version": "7.33.2",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-react-hooks",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-security",
            "direct": false,
            "version": "1.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-scope",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-utils",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "3.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "espree",
            "direct": false,
            "version": "7.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "esprima",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "esquery",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "esrecurse",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estree-walker",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "esutils",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "etag",
            "direct": false,
            "version": "1.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "eventemitter2",
            "direct": false,
            "version": "0.4.14",
            "ecosystem": "npm"
          },
          {
            "name": "events",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "events",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "exit",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "expand-tilde",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "express",
            "direct": false,
            "version": "4.18.2",
            "ecosystem": "npm"
          },
          {
            "name": "express",
            "direct": false,
            "version": "4.22.2",
            "ecosystem": "npm"
          },
          {
            "name": "extend",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-glob",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "fast-json-stable-stringify",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-levenshtein",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "fast-uri",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "fastest-levenshtein",
            "direct": false,
            "version": "1.0.16",
            "ecosystem": "npm"
          },
          {
            "name": "fastq",
            "direct": false,
            "version": "1.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "fflate",
            "direct": false,
            "version": "0.7.4",
            "ecosystem": "npm"
          },
          {
            "name": "file-entry-cache",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "filelist",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "finalhandler",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "finalhandler",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "findup-sync",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "findup-sync",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "findup-sync",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fined",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "flagged-respawn",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "flat",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "flat-cache",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "flatted",
            "direct": false,
            "version": "3.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "for-each",
            "direct": false,
            "version": "0.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "for-in",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "for-own",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "foreground-child",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "form-data",
            "direct": false,
            "version": "2.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "form-data",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "forwarded",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "fresh",
            "direct": false,
            "version": "0.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "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": "function.prototype.name",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "functional-red-black-tree",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "functions-have-names",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "gensync",
            "direct": false,
            "version": "1.0.0-beta.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "get-func-name",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-stream",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-symbol-description",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-tsconfig",
            "direct": false,
            "version": "4.13.7",
            "ecosystem": "npm"
          },
          {
            "name": "getobject",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "10.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "5.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "glob-to-regexp",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "global-modules",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "global-prefix",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "11.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "13.24.0",
            "ecosystem": "npm"
          },
          {
            "name": "globalthis",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "globby",
            "direct": false,
            "version": "11.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "graphemer",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "growl",
            "direct": false,
            "version": "1.10.5",
            "ecosystem": "npm"
          },
          {
            "name": "grunt",
            "direct": false,
            "version": "1.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-cli",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-cli",
            "direct": false,
            "version": "1.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-known-options",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-known-options",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-legacy-log",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-legacy-log-utils",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-legacy-util",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-shell",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "grunt-webpack",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "gzip-size",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-ansi",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-bigints",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-property-descriptors",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "has-property-descriptors",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "has-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "has-proto",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-tostringtag",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "he",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "hexy",
            "direct": false,
            "version": "0.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "homedir-polyfill",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "hooker",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "html-encoding-sniffer",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "http-cache-semantics",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "http-errors",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "http-errors",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "http-proxy-agent",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "http2-wrapper",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.4.24",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "ieee754",
            "direct": false,
            "version": "1.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "import-local",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "imurmurhash",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "inflight",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "ini",
            "direct": false,
            "version": "1.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "internal-slot",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "interpret",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "interpret",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "interpret",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ipaddr.js",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-absolute",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-arguments",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-array-buffer",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-async-function",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-bigint",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-binary-path",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-boolean-object",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-buffer",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "is-callable",
            "direct": false,
            "version": "1.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-date-object",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "is-docker",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-finalizationregistry",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-generator-function",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-map",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-negative-zero",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-number-object",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-obj",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-object",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-potential-custom-element-name",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-regex",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-relative",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-set",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-shared-array-buffer",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-string",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "is-symbol",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-typed-array",
            "direct": false,
            "version": "1.1.12",
            "ecosystem": "npm"
          },
          {
            "name": "is-unc-path",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-weakmap",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-weakref",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-weakset",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-windows",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-wsl",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "isarray",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isarray",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isobject",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "iterator.prototype",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "jackspeak",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "jake",
            "direct": false,
            "version": "10.8.7",
            "ecosystem": "npm"
          },
          {
            "name": "jest-worker",
            "direct": false,
            "version": "27.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "jmespath",
            "direct": false,
            "version": "0.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "3.14.2",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsdoc-type-pratt-parser",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsdoctypeparser",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsdom",
            "direct": false,
            "version": "20.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "jsesc",
            "direct": false,
            "version": "2.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "jsesc",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-buffer",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-stable-stringify-without-jsonify",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "jsonc-parser",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsx-ast-utils",
            "direct": false,
            "version": "3.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "keyv",
            "direct": false,
            "version": "4.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "levn",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "liftup",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "linkify-it",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "loader-runner",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "local-pkg",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.17.23",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isplainobject",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.merge",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.truncate",
            "direct": false,
            "version": "4.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "log-symbols",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "loose-envify",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "loupe",
            "direct": false,
            "version": "2.3.7",
            "ecosystem": "npm"
          },
          {
            "name": "lowercase-keys",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "10.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lunr",
            "direct": false,
            "version": "2.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "lz-string",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "make-error",
            "direct": false,
            "version": "1.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "make-iterator",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "map-cache",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "markdown-it",
            "direct": false,
            "version": "13.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "marked",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "marked",
            "direct": false,
            "version": "9.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "marked-terminal",
            "direct": false,
            "version": "6.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "md5",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "mdurl",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "media-typer",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "merge-descriptors",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "merge-descriptors",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "merge-stream",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "merge2",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "methods",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "mime",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.52.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-types",
            "direct": false,
            "version": "2.1.35",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-response",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-response",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "5.1.9",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "9.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "7.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp",
            "direct": false,
            "version": "0.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "mocha",
            "direct": false,
            "version": "8.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "mocha-junit-reporter",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.1.20",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.12",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.7",
            "ecosystem": "npm"
          },
          {
            "name": "natural-compare",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "natural-compare-lite",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "negotiator",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "neo-async",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "node-emoji",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "node-releases",
            "direct": false,
            "version": "2.0.14",
            "ecosystem": "npm"
          },
          {
            "name": "node-releases",
            "direct": false,
            "version": "2.0.47",
            "ecosystem": "npm"
          },
          {
            "name": "nopt",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "nopt",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "nopt",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-url",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "nwsapi",
            "direct": false,
            "version": "2.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "object-assign",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-inspect",
            "direct": false,
            "version": "1.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-inspect",
            "direct": false,
            "version": "1.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "object-is",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "object-keys",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object.assign",
            "direct": false,
            "version": "4.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "object.defaults",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "object.entries",
            "direct": false,
            "version": "1.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "object.fromentries",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "object.groupby",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object.hasown",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "object.map",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object.pick",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "object.values",
            "direct": false,
            "version": "1.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "on-finished",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "open",
            "direct": false,
            "version": "7.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "optionator",
            "direct": false,
            "version": "0.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "os-homedir",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "os-tmpdir",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "osenv",
            "direct": false,
            "version": "0.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "p-cancelable",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "package-json-from-dist",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "parent-module",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse-filepath",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "parse-passwd",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "parse5",
            "direct": false,
            "version": "7.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "parseurl",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "path-browserify",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-is-absolute",
            "direct": false,
            "version": "1.0.1",
            "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-root",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-root-regex",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "path-scurry",
            "direct": false,
            "version": "1.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-to-regexp",
            "direct": false,
            "version": "0.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "path-to-regexp",
            "direct": false,
            "version": "0.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "path-type",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pathval",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-dir",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "playwright",
            "direct": false,
            "version": "1.41.2",
            "ecosystem": "npm"
          },
          {
            "name": "playwright",
            "direct": false,
            "version": "1.61.0",
            "ecosystem": "npm"
          },
          {
            "name": "playwright-core",
            "direct": false,
            "version": "1.41.2",
            "ecosystem": "npm"
          },
          {
            "name": "playwright-core",
            "direct": false,
            "version": "1.61.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "8.4.35",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "8.5.15",
            "ecosystem": "npm"
          },
          {
            "name": "prelude-ls",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "prettier",
            "direct": false,
            "version": "3.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "pretty-format",
            "direct": false,
            "version": "27.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "process",
            "direct": false,
            "version": "0.11.10",
            "ecosystem": "npm"
          },
          {
            "name": "progress",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "prop-types",
            "direct": false,
            "version": "15.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "proxy-addr",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "psl",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "pump",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.11.0",
            "ecosystem": "npm"
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.15.2",
            "ecosystem": "npm"
          },
          {
            "name": "querystring",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "querystringify",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "queue-microtask",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "quick-lru",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "randombytes",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "range-parser",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "raw-body",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "raw-body",
            "direct": false,
            "version": "2.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "react",
            "direct": false,
            "version": "18.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "react-dom",
            "direct": false,
            "version": "18.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "react-is",
            "direct": false,
            "version": "16.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "react-is",
            "direct": false,
            "version": "17.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "react-refresh",
            "direct": false,
            "version": "0.13.0",
            "ecosystem": "npm"
          },
          {
            "name": "react-refresh",
            "direct": false,
            "version": "0.14.0",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "3.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "rechoir",
            "direct": false,
            "version": "0.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "rechoir",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "rechoir",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "redeyed",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "reflect.getprototypeof",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "regexp-tree",
            "direct": false,
            "version": "0.1.27",
            "ecosystem": "npm"
          },
          {
            "name": "regexp.prototype.flags",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "regexpp",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-from-string",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "requirejs",
            "direct": false,
            "version": "2.1.22",
            "ecosystem": "npm"
          },
          {
            "name": "requires-port",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.8",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "2.0.0-next.5",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-alpn",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-cwd",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-dir",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-pkg-maps",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "responselike",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "reusify",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "2.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "2.80.0",
            "ecosystem": "npm"
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "3.29.4",
            "ecosystem": "npm"
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "3.30.0",
            "ecosystem": "npm"
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "run-parallel",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "safe-array-concat",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-regex",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-regex-test",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "sax",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "saxes",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "scheduler",
            "direct": false,
            "version": "0.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "schema-utils",
            "direct": false,
            "version": "4.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "send",
            "direct": false,
            "version": "0.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "send",
            "direct": false,
            "version": "0.19.2",
            "ecosystem": "npm"
          },
          {
            "name": "serialize-javascript",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "serve-static",
            "direct": false,
            "version": "1.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "serve-static",
            "direct": false,
            "version": "1.16.3",
            "ecosystem": "npm"
          },
          {
            "name": "set-function-length",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "set-function-length",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "set-function-name",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "setprototypeof",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "shallow-clone",
            "direct": false,
            "version": "3.0.1",
            "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": "shelljs",
            "direct": false,
            "version": "0.8.5",
            "ecosystem": "npm"
          },
          {
            "name": "shiki",
            "direct": false,
            "version": "0.14.7",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-list",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-map",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-weakmap",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "skin-tone",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "slash",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "slice-ansi",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.7.4",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-explorer",
            "direct": false,
            "version": "2.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-support",
            "direct": false,
            "version": "0.5.21",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-exceptions",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-expression-parse",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-license-ids",
            "direct": false,
            "version": "3.0.16",
            "ecosystem": "npm"
          },
          {
            "name": "sprintf-js",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "sprintf-js",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "statuses",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "statuses",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "stop-iteration-iterator",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "stream-browserify",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "stream-transform",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "string.prototype.matchall",
            "direct": false,
            "version": "4.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "string.prototype.trim",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "string.prototype.trimend",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "string.prototype.trimstart",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-bom",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "8.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-hyperlinks",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "symbol-tree",
            "direct": false,
            "version": "3.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "table",
            "direct": false,
            "version": "6.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "tapable",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "temp",
            "direct": false,
            "version": "0.9.4",
            "ecosystem": "npm"
          },
          {
            "name": "terser",
            "direct": false,
            "version": "5.48.0",
            "ecosystem": "npm"
          },
          {
            "name": "terser-webpack-plugin",
            "direct": false,
            "version": "5.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "text-table",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinypool",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "tinyspy",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "to-fast-properties",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "to-utf8",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "toidentifier",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tough-cookie",
            "direct": false,
            "version": "4.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "tr46",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-expose-internals-conditionally",
            "direct": false,
            "version": "1.0.0-empty.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-loader",
            "direct": false,
            "version": "9.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "ts-node",
            "direct": false,
            "version": "10.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "tsconfig-paths",
            "direct": false,
            "version": "3.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "tsconfig-paths",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "tsconfig-paths-webpack-plugin",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "tsutils",
            "direct": false,
            "version": "3.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "tsx",
            "direct": false,
            "version": "4.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-check",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-detect",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.20.2",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "3.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "type-is",
            "direct": false,
            "version": "1.6.18",
            "ecosystem": "npm"
          },
          {
            "name": "typed-array-buffer",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "typed-array-byte-length",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "typed-array-byte-offset",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "typed-array-length",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "typedoc",
            "direct": false,
            "version": "0.24.8",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "4.9.5",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "uc.micro",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "unbox-primitive",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "unc-path-regex",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "underscore.string",
            "direct": false,
            "version": "3.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "5.26.5",
            "ecosystem": "npm"
          },
          {
            "name": "unicode-emoji-modifier-base",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "universalify",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "unpipe",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "update-browserslist-db",
            "direct": false,
            "version": "1.0.13",
            "ecosystem": "npm"
          },
          {
            "name": "update-browserslist-db",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "url",
            "direct": false,
            "version": "0.10.3",
            "ecosystem": "npm"
          },
          {
            "name": "url-parse",
            "direct": false,
            "version": "1.5.10",
            "ecosystem": "npm"
          },
          {
            "name": "util",
            "direct": false,
            "version": "0.12.5",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "utils-merge",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "v8-compile-cache",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "v8-compile-cache-lib",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "v8flags",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "validate-npm-package-name",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "vary",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "3.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "4.5.14",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "4.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "5.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "vitest",
            "direct": false,
            "version": "0.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "vscode-oniguruma",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "vscode-textmate",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "w3c-xmlserializer",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "watchpack",
            "direct": false,
            "version": "2.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "webidl-conversions",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "webpack",
            "direct": false,
            "version": "5.107.2",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-cli",
            "direct": false,
            "version": "5.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-merge",
            "direct": false,
            "version": "5.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-sources",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-encoding",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-mimetype",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-url",
            "direct": false,
            "version": "11.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "which-boxed-primitive",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "which-builtin-type",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "which-collection",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "which-typed-array",
            "direct": false,
            "version": "1.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "wide-align",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "wildcard",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "workerpool",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "8.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "xml",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "xml-name-validator",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "xml2js",
            "direct": false,
            "version": "0.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "xmlbuilder",
            "direct": false,
            "version": "11.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "xmlchars",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "16.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "20.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-unparser",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yn",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 1043,
        "direct_count": 6,
        "indirect_count": 1037
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 44,
        "merged_prs": 1013,
        "open_issues": 160,
        "closed_ratio": 0.801,
        "closed_issues": 644,
        "closed_unmerged_prs": 411
      },
      "bus_factor": 3,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "owenpearson",
          "commits": 1172,
          "avatar_url": "https://avatars.githubusercontent.com/u/48608556?v=4"
        },
        {
          "type": "User",
          "login": "SimonWoolf",
          "commits": 1151,
          "avatar_url": "https://avatars.githubusercontent.com/u/5908687?v=4"
        },
        {
          "type": "User",
          "login": "lawrence-forooghian",
          "commits": 1104,
          "avatar_url": "https://avatars.githubusercontent.com/u/53756884?v=4"
        },
        {
          "type": "User",
          "login": "VeskeR",
          "commits": 698,
          "avatar_url": "https://avatars.githubusercontent.com/u/9639405?v=4"
        },
        {
          "type": "User",
          "login": "paddybyers",
          "commits": 444,
          "avatar_url": "https://avatars.githubusercontent.com/u/1137574?v=4"
        },
        {
          "type": "User",
          "login": "mattheworiordan",
          "commits": 221,
          "avatar_url": "https://avatars.githubusercontent.com/u/43789?v=4"
        },
        {
          "type": "User",
          "login": "funkyboy",
          "commits": 143,
          "avatar_url": "https://avatars.githubusercontent.com/u/348355?v=4"
        },
        {
          "type": "User",
          "login": "ttypic",
          "commits": 85,
          "avatar_url": "https://avatars.githubusercontent.com/u/16488867?v=4"
        },
        {
          "type": "User",
          "login": "umair-ably",
          "commits": 54,
          "avatar_url": "https://avatars.githubusercontent.com/u/157486912?v=4"
        },
        {
          "type": "User",
          "login": "AndyTWF",
          "commits": 43,
          "avatar_url": "https://avatars.githubusercontent.com/u/6977297?v=4"
        }
      ],
      "contributors_sampled": 50,
      "top_contributor_share": 0.217
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "bundle-report.yml",
        "check.yml",
        "docs.yml",
        "features.yml",
        "publish-cdn.yml",
        "react.yml",
        "spec-coverage-report.yml",
        "test-browser.yml",
        "test-node-uts.yml",
        "test-node.yml",
        "test-package.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".eslintrc.js",
        ".eslintrc.json"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "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": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "7 out of 7 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": 10,
            "reason": "all changesets reviewed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 22 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 10,
            "reason": "all dependencies are pinned",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 8,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "62 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "9619f3dbd2bdf704e885a14835178f37fbcfb70b",
        "ran_at": "2026-07-22T19:35:28Z",
        "aggregate_score": 6.9,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-22T18:02:28Z",
      "oldest_open_prs": [
        {
          "number": 1602,
          "created_at": "2024-01-29T11:47:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1661,
          "created_at": "2024-03-01T18:29:46Z",
          "last_comment_at": "2024-03-06T19:39:03Z",
          "last_comment_author": "mschristensen"
        },
        {
          "number": 1758,
          "created_at": "2024-05-03T17:39:06Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1813,
          "created_at": "2024-07-09T18:08:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1816,
          "created_at": "2024-07-16T17:49:57Z",
          "last_comment_at": "2024-09-24T18:30:16Z",
          "last_comment_author": "coderabbitai"
        },
        {
          "number": 1870,
          "created_at": "2024-09-17T09:20:59Z",
          "last_comment_at": "2024-09-17T09:21:25Z",
          "last_comment_author": "coderabbitai"
        },
        {
          "number": 1932,
          "created_at": "2024-12-05T07:21:18Z",
          "last_comment_at": "2024-12-11T03:03:53Z",
          "last_comment_author": "VeskeR"
        },
        {
          "number": 1970,
          "created_at": "2025-02-13T10:39:34Z",
          "last_comment_at": "2025-02-13T10:39:43Z",
          "last_comment_author": "coderabbitai"
        },
        {
          "number": 1983,
          "created_at": "2025-03-06T04:04:06Z",
          "last_comment_at": "2025-03-06T04:04:16Z",
          "last_comment_author": "coderabbitai"
        },
        {
          "number": 1986,
          "created_at": "2025-03-21T12:56:06Z",
          "last_comment_at": "2025-03-21T12:56:15Z",
          "last_comment_author": "coderabbitai"
        },
        {
          "number": 2031,
          "created_at": "2025-05-14T10:01:04Z",
          "last_comment_at": "2025-05-14T10:01:11Z",
          "last_comment_author": "coderabbitai"
        },
        {
          "number": 2033,
          "created_at": "2025-05-22T09:08:05Z",
          "last_comment_at": "2025-05-22T09:08:11Z",
          "last_comment_author": "coderabbitai"
        },
        {
          "number": 2036,
          "created_at": "2025-05-22T16:59:44Z",
          "last_comment_at": "2025-05-22T16:59:51Z",
          "last_comment_author": "coderabbitai"
        },
        {
          "number": 2055,
          "created_at": "2025-07-07T07:52:11Z",
          "last_comment_at": "2025-07-07T07:52:17Z",
          "last_comment_author": "coderabbitai"
        },
        {
          "number": 2071,
          "created_at": "2025-08-19T16:10:53Z",
          "last_comment_at": "2025-08-19T16:11:01Z",
          "last_comment_author": "coderabbitai"
        },
        {
          "number": 2075,
          "created_at": "2025-08-24T07:18:05Z",
          "last_comment_at": "2025-09-03T08:22:30Z",
          "last_comment_author": "AndyTWF"
        },
        {
          "number": 2079,
          "created_at": "2025-09-09T23:38:35Z",
          "last_comment_at": "2025-09-09T23:38:46Z",
          "last_comment_author": "coderabbitai"
        },
        {
          "number": 2080,
          "created_at": "2025-09-09T23:38:38Z",
          "last_comment_at": "2025-09-09T23:38:45Z",
          "last_comment_author": "coderabbitai"
        },
        {
          "number": 2086,
          "created_at": "2025-09-18T20:16:29Z",
          "last_comment_at": "2025-09-18T20:16:42Z",
          "last_comment_author": "coderabbitai"
        },
        {
          "number": 2093,
          "created_at": "2025-09-26T09:56:33Z",
          "last_comment_at": "2025-09-26T15:59:13Z",
          "last_comment_author": "VeskeR"
        }
      ],
      "last_merged_pr_at": "2026-07-22T18:01:43Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 169,
          "created_at": "2015-11-25T23:46:56Z",
          "last_comment_at": "2016-11-16T17:47:17Z",
          "last_comment_author": "SimonWoolf"
        },
        {
          "number": 309,
          "created_at": "2016-07-12T21:05:23Z",
          "last_comment_at": "2023-01-17T21:45:59Z",
          "last_comment_author": "yairhaimo"
        },
        {
          "number": 315,
          "created_at": "2016-07-14T23:36:12Z",
          "last_comment_at": "2022-03-04T11:56:23Z",
          "last_comment_author": "Peter-Maguire"
        },
        {
          "number": 337,
          "created_at": "2016-09-25T22:38:19Z",
          "last_comment_at": "2016-10-12T01:49:28Z",
          "last_comment_author": "mattheworiordan"
        },
        {
          "number": 361,
          "created_at": "2016-12-14T13:30:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 750,
          "created_at": "2016-12-21T12:50:57Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 371,
          "created_at": "2017-01-09T17:58:21Z",
          "last_comment_at": "2017-01-10T00:10:35Z",
          "last_comment_author": "paddybyers"
        },
        {
          "number": 379,
          "created_at": "2017-02-22T19:32:56Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 383,
          "created_at": "2017-03-09T13:11:24Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 400,
          "created_at": "2017-04-25T10:42:43Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 414,
          "created_at": "2017-09-15T14:32:30Z",
          "last_comment_at": "2017-09-15T14:40:11Z",
          "last_comment_author": "BrentLoft1"
        },
        {
          "number": 425,
          "created_at": "2017-10-25T13:19:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 437,
          "created_at": "2017-12-11T09:39:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 466,
          "created_at": "2018-02-15T11:52:11Z",
          "last_comment_at": "2024-06-24T10:43:01Z",
          "last_comment_author": "VeskeR"
        },
        {
          "number": 748,
          "created_at": "2018-02-27T15:15:58Z",
          "last_comment_at": "2024-11-05T09:37:55Z",
          "last_comment_author": "ttypic"
        },
        {
          "number": 749,
          "created_at": "2019-01-18T19:15:03Z",
          "last_comment_at": "2019-01-18T20:39:39Z",
          "last_comment_author": "SimonWoolf"
        },
        {
          "number": 607,
          "created_at": "2019-09-04T23:20:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 632,
          "created_at": "2020-03-18T12:53:15Z",
          "last_comment_at": "2021-05-11T15:26:37Z",
          "last_comment_author": "owenpearson"
        },
        {
          "number": 657,
          "created_at": "2020-06-01T17:59:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 671,
          "created_at": "2020-07-01T23:50:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/ably/ably-js",
    "host": "github.com",
    "name": "ably-js",
    "owner": "ably"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 84,
      "inputs": {
        "security": 75,
        "vitality": 98,
        "community": 75,
        "governance": 81,
        "engineering": 90
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 98,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 96,
            "inputs": {
              "commits_last_year": 399,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 46
            },
            "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": "46/52 weeks with commits",
                "points": 31.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 46
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "399 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 399
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "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": 100,
              "latest_release_tag": "2.25.0",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 18.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "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 ~18.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 18.7
                    }
                  }
                ],
                "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": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 75,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "forks": 61,
              "stars": 361,
              "watchers": 30,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "361 stars",
                "points": 41.5,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 361
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "61 forks",
                "points": 14.8,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 61
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "30 watchers",
                "points": 8.1,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 30
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "excellent",
            "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": 100,
            "inputs": {
              "packages": [
                "ably"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 4424547
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "4,424,547 downloads/month across npm",
                "points": 80,
                "status": "met",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 4424547,
                      "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": "good",
        "name": "Sustainability & Governance",
        "value": 81,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "good",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "bus_factor": 3,
              "contributors_sampled": 50,
              "top_contributor_share": 0.217
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "3 contributor(s) cover half of all commits",
                "points": 36,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 22% of commits",
                "points": 17.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 22
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "50 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 50
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 22 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "merged_prs": 1013,
              "open_issues": 160,
              "closed_issues": 644,
              "issue_closed_ratio": 0.801,
              "closed_unmerged_prs": 411
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "80% of issues closed",
                "points": 37.4,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 80
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "1013/1424 decided PRs merged",
                "points": 27.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1013,
                      "decided": 1424
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "all changesets reviewed",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "followers": 214,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "ably",
              "public_repos": 123,
              "account_age_days": 5148
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "214 followers of ably",
                "points": 16.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 214,
                      "login": "ably"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "123 public repos, account ~14 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 123
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 14
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "ably"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "216 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 216
                    }
                  }
                ],
                "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": "excellent",
        "name": "Engineering Quality",
        "value": 90,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "11 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "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": ".eslintrc.js, .eslintrc.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.js, .eslintrc.json"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "7 out of 7 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "client-library",
                "rest",
                "realtime",
                "js",
                "javascript",
                "realtime-messaging",
                "react-native",
                "sdk",
                "typescript",
                "ts"
              ],
              "has_wiki": false,
              "homepage": "https://ably.com/download",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://ably.com/download",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "10 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "good",
        "name": "Security",
        "value": 75,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 69,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 6.9
            },
            "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": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "7 out of 7 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": "all changesets reviewed",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 22 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "all dependencies are pinned",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "62 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 1043 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 1043
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 109,
              "affected_packages": 40,
              "assessed_packages": 1043,
              "unassessed_packages": 0,
              "affected_by_severity": "critical 4, high 17, moderate 14, low 5",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "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": 1043,
              "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
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 14
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "excellent",
        "name": "AI Readiness",
        "value": 85,
        "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.96,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 3743
            },
            "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": "96 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 96,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "src/platform/react-hooks/tsconfig.json",
                "test/package/browser/template/src/tsconfig.json",
                "test/package/browser/template/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0.61,
              "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": ".eslintrc.js, .eslintrc.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.js, .eslintrc.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "src/platform/react-hooks/tsconfig.json, test/package/browser/template/src/tsconfig.json, test/package/browser/template/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "src/platform/react-hooks/tsconfig.json, test/package/browser/template/src/tsconfig.json, test/package/browser/template/tsconfig.json, 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": "61 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 61,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "dependency automation configured, none observed in the sampled commits",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "dependency_bot_config_only",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "all dependencies are pinned",
                "points": 10,
                "status": "met",
                "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": 445747,
              "source_files_sampled": 429,
              "oversized_source_files": 7
            },
            "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": "7/429 source files over 60KB",
                "points": 54.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 429,
                      "oversized": 7
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "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",
    "deps.dev does not index npm:ably@2.25.0; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T19:35:56.525210Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/ably/ably-js.svg",
  "full_name": "ably/ably-js",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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

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

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