公开记录
软件健康报告模式 0.27.0 · 指标 1.13.0 · 2026-07-23 12:44 UTC

openedx / edx-enterprise

PythonAGPL-3.0★ 50 星标⑂ 71 复刻始于 2016年10月在 GitHub 上查看 ↗

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

81
总分 / 100
良好

软件健康指数

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

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

评分画像

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

所有权

Open edX组织
757 关注者185 个公开仓库始于 2018年6月

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

软件包生态系统

注册表软件包版本月下载量版本数最近发布标签
PyPIedx-enterprise8.7.1-1,4610 天前djangoedx

按类别列示的指标

活力

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

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

发布纪律

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

社区与采用

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

75良好 · 占总体的 18%
评分方式
27.4/60星标 — 50 个星标
15.4/25复刻 — 71 个复刻
10.4/15关注者 — 74 位关注者
所用输入
forks71
stars50
watchers74
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

100优秀
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(AGPL-3.0)
18/18CONTRIBUTING 指南
13.5/13.5行为准则
7.2/7.2议题模板
6.3/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template

可持续性与治理

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

86优秀 · 占总体的 24%
评分方式
54/54巴士系数 — 11 位贡献者贡献了半数提交
19.8/22.5提交分布 — 头号贡献者编写了 12% 的提交
13.5/13.5贡献者广度 — 99 位贡献者
10/10OpenSSF Scorecard:Contributors — project has 21 contributing companies or organizations
所用输入
bus_factor11
contributors_sampled99
top_contributor_share0.12
评分方式
28.5/46.8议题解决 — 61% 的议题已关闭
29.6/38.3PR 接受 — 已裁定的 PR 中 1,966/2,542 已合并
15/15OpenSSF Scorecard:Code-Review — all changesets reviewed
所用输入
merged_prs1,966
open_issues9
closed_issues14
issue_closed_ratio0.609
closed_unmerged_prs576
评分方式
30/30所有权背书 — 组织持有
0/20已验证域名
20.7/25所有者影响力 — openedx 有 757 位关注者
25/25既往记录 — 185 个公开仓库,账户约 8 年
所用输入
followers757
owner_typeOrganization
is_verified
owner_loginopenedx
public_repos185
account_age_days2,963
评分方式
25/25已发布且可解析 — pypi 上有 1 个软件包
35/35发布时效 — 最近一次发布于 0 天前
20/20版本历史 — 1,461 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesedx-enterprise
ecosystemspypi
any_deprecated
min_days_since_publish0

工程质量

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

72良好 · 占总体的 20%

工程实践

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

文档

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

安全

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

72良好 · 占总体的 16%

安全态势

65中等
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — 无数据
2.5/2.5CI-Tests — 23 out of 23 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 21 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 0 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
1/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — 无数据
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 46 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate6.5
已排除计分(无数据或不适用):branch_protection, signed_releases。 其余权重已重新归一化。
评分方式
35/35直接依赖不含已知公告 — 没有直接依赖携带已知公告
0/25间接依赖不含已知公告 — 在此范围内,传递依赖集合无法与开发和测试依赖区分
0/40没有长期未处理的公告 — 没有公告带有发布日期
所用输入
sourceosv
advisories86
affected_packages39
assessed_packages1,041
unassessed_packages50
affected_by_severitycritical 3, high 20, moderate 16
direct_affected_packages0
已排除计分(无数据或不适用):间接依赖不含已知公告, 没有长期未处理的公告。 其余权重已重新归一化。 已将 1041 个已解析依赖与 OSV 比对。 有 50 项无法评估——没有已解析的版本、生态系统不受支持,或超出所报告的软件包清单。 该仓库未发布任何索引可解析的软件包,因此改为评估仓库依赖图。该图将开发与测试版本固定同交付的依赖混在一起,因此仅对声明的运行时依赖计分;传递性发现仅作为背景信息列出,不计入评分。 未对可达性进行分析。

AI 就绪度

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

78良好 · 占总体的 0%
评分方式
45/45代理指令 — .github/copilot-instructions.md, .ralph/AGENT.md, CLAUDE.md
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 96 次人类提交中有 94 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.979
agent_instruction_files.github/copilot-instructions.md, .ralph/AGENT.md, CLAUDE.md
agent_instruction_max_bytes7,063
评分方式
18/18一条命令的引导启动 — Makefile, docs/Makefile
22/22自动化测试
11/11Lint / 格式化配置 — tox.ini
0/11静态类型检查
10/10可复现环境 — Dockerfile, lockfile
10/10已体现的代理实践 — 最近 100 次提交中有 11 次由代理编写或署名代理
8/8自动化维护 — 最近 100 次提交中有 4 次为自动依赖更新
2/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
所用输入
has_nix
has_tests
lockfilespackage-lock.json
has_dockerfile
typed_language
bootstrap_filesMakefile, docs/Makefile
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0.11
toolchain_manifests
dependency_bot_commit_share0.04
评分方式
0/45可类型检查的代码 — Python,未配置类型检查
54.3/55可控的文件大小 — 采样的 1,039 个源文件中有 13 个超过 60KB
所用输入
primary_languagePython
largest_source_bytes458,598
source_files_sampled1,039
oversized_source_files13

关键数据

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

数据采集警告

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch npm package 'edx-enterprise' from its registry
  • deps.dev does not index pypi:edx-enterprise@8.7.1; advisories assessed against the repository dependency graph instead

更多细节

Star 与 Fork 历史 0 ★ / 71 ⇿
0Star
71Fork
88发布

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

01325385063757122016-112021-082026-06
主版本 2次版本 9修订 77

每个点涵盖 9 天。

OpenSSF Scorecard 6.5 / 10
6.5综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-23 12:43 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-Tests23 out of 23 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 21 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 0 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
2Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 2
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
不适用Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities46 existing vulnerabilities detected
直接依赖 2
注册表软件包版本约束清单文件
npm@edx/brandnpm:@edx/brand-edx.org@^1.3.0package.json
npm@openedx/paragon^21.5.7package.json
全部依赖 1,091

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

注册表软件包版本关系
npm@openedx/paragon21.13.1直接
npm@babel/runtime7.25.6间接
npm@babel/runtime-corejs37.25.6间接
npm@edx/brand-edx.org1.6.1间接
npm@formatjs/ecma402-abstract2.0.0间接
npm@formatjs/fast-memoize2.2.0间接
npm@formatjs/icu-messageformat-parser2.7.8间接
npm@formatjs/icu-skeleton-parser1.8.2间接
npm@formatjs/intl2.10.4间接
npm@formatjs/intl-displaynames6.6.8间接
npm@formatjs/intl-listformat7.5.7间接
npm@formatjs/intl-localematcher0.5.4间接
npm@fortawesome/fontawesome-common-types6.6.0间接
npm@fortawesome/fontawesome-svg-core6.6.0间接
npm@fortawesome/react-fontawesome0.1.19间接
npm@popperjs/core2.11.8间接
npm@restart/context2.1.4间接
npm@restart/hooks0.4.16间接
npm@types/hoist-non-react-statics3.3.5间接
npm@types/invariant2.2.37间接
npm@types/prop-types15.7.12间接
npm@types/react18.3.5间接
npm@types/react-transition-group4.4.11间接
npm@types/warning3.0.3间接
npmacorn4.0.13间接
npmacorn5.7.4间接
npmacorn-dynamic-import2.0.2间接
npmajv5.5.2间接
npmajv6.12.6间接
npmajv-keywords3.5.2间接
npmalign-text0.1.4间接
npmalphanum-sort1.0.2间接
npmansi-escapes4.3.2间接
npmansi-regex2.1.1间接
npmansi-regex3.0.1间接
npmansi-regex5.0.1间接
npmansi-styles2.2.1间接
npmansi-styles3.2.1间接
npmansi-styles4.3.0间接
npmanymatch2.0.0间接
npmanymatch3.1.3间接
npmargparse1.0.10间接
npmaria-hidden1.2.4间接
npmarr-diff4.0.0间接
npmarr-flatten1.1.0间接
npmarr-union3.1.0间接
npmarray-unique0.3.2间接
npmasn1.js4.10.1间接
npmassert1.5.1间接
npmassert-ok1.0.0间接
npmassign-symbols1.0.0间接
npmasync2.6.4间接
npmasync-each1.0.6间接
npmatob2.1.2间接
npmattr-accept2.2.2间接
npmautoprefixer6.7.7间接
npmavailable-typed-arrays1.0.7间接
npmbabel-code-frame6.26.0间接
npmbalanced-match0.4.2间接
npmbalanced-match1.0.2间接
npmbase0.11.2间接
npmbase64-js1.5.1间接
npmbig.js5.2.2间接
npmbinary-extensions1.13.1间接
npmbinary-extensions2.3.0间接
npmbindings1.5.0间接
npmbl4.1.0间接
npmbn.js4.12.0间接
npmbn.js5.2.1间接
npmbootstrap4.6.2间接
npmbrace-expansion1.1.11间接
npmbrace-expansion2.0.1间接
npmbraces2.3.2间接
npmbraces3.0.3间接
npmbrorand1.1.0间接
npmbrowserify-aes1.2.0间接
npmbrowserify-cipher1.0.1间接
npmbrowserify-des1.0.2间接
npmbrowserify-rsa4.1.0间接
npmbrowserify-sign4.2.3间接
npmbrowserify-zlib0.2.0间接
npmbrowserslist1.7.7间接
npmbuffer4.9.2间接
npmbuffer5.7.1间接
npmbuffer-xor1.0.3间接
npmbuiltin-status-codes3.0.0间接
npmcache-base1.0.1间接
npmcall-bind1.0.8间接
npmcall-bind-apply-helpers1.0.2间接
npmcall-bound1.0.4间接
npmcamelcase1.2.1间接
npmcamelcase4.1.0间接
npmcaniuse-api1.6.1间接
npmcaniuse-db1.0.30001657间接
npmcast-array1.0.1间接
npmcenter-align0.1.3间接
npmchalk1.1.3间接
npmchalk2.4.2间接
npmchalk4.1.2间接
npmchardet0.7.0间接
npmchild_process1.0.2间接
npmchokidar2.1.8间接
npmchokidar3.6.0间接
npmcipher-base1.0.4间接
npmclap1.2.3间接
npmclass-utils0.3.6间接
npmclassnames2.5.1间接
npmcli1.0.1间接
npmcli-cursor3.1.0间接
npmcli-spinners2.9.2间接
npmcli-width3.0.0间接
npmcliui2.1.0间接
npmcliui3.2.0间接
npmclone1.0.4间接
npmclone-deep4.0.1间接
npmco4.6.0间接
npmcoa1.0.4间接
npmcode-point-at1.1.0间接
npmcollection-visit1.0.0间接
npmcolor0.11.4间接
npmcolor-convert1.9.3间接
npmcolor-convert2.0.1间接
npmcolor-name1.1.3间接
npmcolor-name1.1.4间接
npmcolor-string0.3.0间接
npmcolormin1.1.2间接
npmcolors1.1.2间接
npmcomponent-emitter1.3.1间接
npmconcat-map0.0.1间接
npmconsole-browserify1.1.0间接
npmconstants-browserify1.0.0间接
npmcopy-descriptor0.1.1间接
npmcore-js-pure3.38.1间接
npmcore-util-is1.0.3间接
npmcreate-ecdh4.0.4间接
npmcreate-hash1.1.3间接
npmcreate-hash1.2.0间接
npmcreate-hmac1.1.7间接
npmcross-spawn5.1.0间接
npmcrypto-browserify3.12.0间接
npmcss-color-names0.0.4间接
npmcss-loader0.28.11间接
npmcss-mediaquery0.1.2间接
npmcss-selector-tokenizer0.7.3间接
npmcssesc3.0.0间接
npmcssnano3.10.0间接
npmcsso2.3.2间接
npmcsstype3.1.3间接
npmd1.0.2间接
npmdate-now0.1.4间接
npmdebug2.6.9间接
npmdecamelize1.2.0间接
npmdecode-uri-component0.2.2间接
npmdefaults1.0.4间接
npmdefine-data-property1.1.4间接
npmdefine-properties1.2.1间接
npmdefine-property0.2.5间接
npmdefine-property1.0.0间接
npmdefine-property2.0.2间接
npmdefined1.0.1间接
npmdequal2.0.3间接
npmdes.js1.1.0间接
npmdetect-node-es1.1.0间接
npmdiffie-hellman5.0.3间接
npmdom-helpers5.2.1间接
npmdom-serializer0.2.2间接
npmdomain-browser1.2.0间接
npmdomelementtype1.3.1间接
npmdomelementtype2.3.0间接
npmdomhandler2.3.0间接
npmdomutils1.5.1间接
npmdunder-proto1.0.1间接
npmelectron-to-chromium1.5.14间接
npmelliptic6.6.1间接
npmemail-prop-type3.0.1间接
npmemail-validator2.0.4间接
npmemoji-regex8.0.0间接
npmemojis-list3.0.0间接
npmenhanced-resolve3.4.1间接
npmentities1.0.0间接
npmentities2.2.0间接
npmerrno0.1.8间接
npmerror-ex1.3.2间接
npmes-define-property1.0.1间接
npmes-errors1.3.0间接
npmes-object-atoms1.1.1间接
npmes5-ext0.10.64间接
npmes6-iterator2.0.3间接
npmes6-map0.1.5间接
npmes6-set0.1.6间接
npmes6-symbol3.1.4间接
npmes6-weak-map2.0.3间接
npmescape-string-regexp1.0.5间接
npmescope3.6.0间接
npmesniff2.0.1间接
npmesprima2.7.3间接
npmesrecurse4.3.0间接
npmestraverse4.3.0间接
npmestraverse5.3.0间接
npmesutils2.0.3间接
npmevent-emitter0.3.5间接
npmevents3.3.0间接
npmevp_bytestokey1.0.3间接
npmexeca0.7.0间接
npmexit0.1.2间接
npmexpand-brackets2.1.4间接
npmext1.7.0间接
npmextend-shallow2.0.1间接
npmextend-shallow3.0.2间接
npmexternal-editor3.1.0间接
npmextglob2.0.4间接
npmextract-text-webpack-plugin3.0.2间接
npmfast-deep-equal1.1.0间接
npmfast-deep-equal3.1.3间接
npmfast-json-stable-stringify2.1.0间接
npmfastparse1.1.2间接
npmfigures3.2.0间接
npmfile-selector0.6.0间接
npmfile-uri-to-path1.0.0间接
npmfill-range4.0.0间接
npmfill-range7.1.1间接
npmfilter-obj1.1.0间接
npmfind-up2.1.0间接
npmflatten1.0.3间接
npmfocus-lock1.3.5间接
npmfont-awesome4.7.0间接
npmfor-each0.3.5间接
npmfor-in1.0.2间接
npmfragment-cache0.2.1间接
npmfs.realpath1.0.0间接
npmfsevents1.2.13间接
npmfsevents2.3.3间接
npmfunction-bind1.1.2间接
npmget-caller-file1.0.3间接
npmget-intrinsic1.3.0间接
npmget-nonce1.0.1间接
npmget-proto1.0.1间接
npmget-stream3.0.0间接
npmget-value2.0.6间接
npmglob7.2.3间接
npmglob8.1.0间接
npmglob-parent3.1.0间接
npmglob-parent5.1.2间接
npmgopd1.2.0间接
npmgraceful-fs4.2.11间接
npmhas1.0.4间接
npmhas-ansi2.0.0间接
npmhas-flag1.0.0间接
npmhas-flag2.0.0间接
npmhas-flag3.0.0间接
npmhas-flag4.0.0间接
npmhas-property-descriptors1.0.2间接
npmhas-symbols1.1.0间接
npmhas-tostringtag1.0.2间接
npmhas-value0.3.1间接
npmhas-value1.0.0间接
npmhas-values0.1.4间接
npmhas-values1.0.0间接
npmhash-base2.0.2间接
npmhash-base3.0.4间接
npmhash.js1.1.7间接
npmhasown2.0.2间接
npmhmac-drbg1.0.1间接
npmhoist-non-react-statics3.3.2间接
npmhosted-git-info2.8.9间接
npmhtml-comment-regex1.1.2间接
npmhtmlparser23.8.3间接
npmhttps-browserify1.0.0间接
npmhyphenate-style-name1.1.0间接
npmiconv-lite0.4.24间接
npmicss-replace-symbols1.1.0间接
npmicss-utils2.1.0间接
npmieee7541.2.1间接
npmimask7.6.1间接
npmimmutable4.3.7间接
npmindexes-of1.0.1间接
npminflight1.0.6间接
npminherits2.0.3间接
npminherits2.0.4间接
npminquirer8.2.6间接
npminterpret1.4.0间接
npmintl-messageformat10.5.14间接
npminvariant2.2.4间接
npminvert-kv1.0.0间接
npmis-absolute-url2.1.0间接
npmis-accessor-descriptor1.0.1间接
npmis-arrayish0.2.1间接
npmis-binary-path1.0.1间接
npmis-binary-path2.1.0间接
npmis-buffer1.1.6间接
npmis-callable1.2.7间接
npmis-core-module2.15.1间接
npmis-data-descriptor1.0.1间接
npmis-descriptor0.1.7间接
npmis-descriptor1.0.3间接
npmis-extendable0.1.1间接
npmis-extendable1.0.1间接
npmis-extglob2.1.1间接
npmis-fullwidth-code-point1.0.0间接
npmis-fullwidth-code-point2.0.0间接
npmis-fullwidth-code-point3.0.0间接
npmis-glob3.1.0间接
npmis-glob4.0.3间接
npmis-interactive1.0.0间接
npmis-number3.0.0间接
npmis-number7.0.0间接
npmis-plain-obj1.1.0间接
npmis-plain-object2.0.4间接
npmis-stream1.1.0间接
npmis-svg2.1.0间接
npmis-typed-array1.1.15间接
npmis-unicode-supported0.1.0间接
npmis-windows1.0.2间接
npmisarray0.0.1间接
npmisarray1.0.0间接
npmisarray2.0.5间接
npmisexe2.0.0间接
npmisobject2.1.0间接
npmisobject3.0.1间接
npmjasmine-ajax3.4.0间接
npmjasmine-jquery2.1.1间接
npmjquery2.2.4间接
npmjs-base642.6.4间接
npmjs-tokens3.0.2间接
npmjs-yaml3.7.0间接
npmjshint2.13.6间接
npmjson-loader0.5.7间接
npmjson-schema-traverse0.3.1间接
npmjson-schema-traverse0.4.1间接
npmjson50.5.1间接
npmjson51.0.2间接
npmkind-of3.2.2间接
npmkind-of4.0.0间接
npmkind-of6.0.3间接
npmlazy-cache1.0.4间接
npmlcid1.0.0间接
npmload-json-file2.0.0间接
npmloader-runner2.4.0间接
npmloader-utils1.4.2间接
npmlocate-path2.0.0间接
npmlodash4.17.21间接
npmlodash.camelcase4.3.0间接
npmlodash.memoize4.1.2间接
npmlodash.uniq4.5.0间接
npmlodash.uniqby4.7.0间接
npmlog-symbols4.1.0间接
npmlongest1.0.1间接
npmloose-envify1.4.0间接
npmlru-cache4.1.5间接
npmmailto-link2.0.0间接
npmmap-cache0.2.2间接
npmmap-visit1.0.0间接
npmmatchmediaquery0.3.1间接
npmmath-expression-evaluator1.4.0间接
npmmath-intrinsics1.1.0间接
npmmd5.js1.3.5间接
npmmem1.1.0间接
npmmemory-fs0.4.1间接
npmmicromatch3.1.10间接
npmmiller-rabin4.0.1间接
npmmimic-fn1.2.0间接
npmmimic-fn2.1.0间接
npmminimalistic-assert1.0.1间接
npmminimalistic-crypto-utils1.0.1间接
npmminimatch3.0.8间接
npmminimatch3.1.2间接
npmminimatch5.1.6间接
npmminimist1.2.8间接
npmmixin-deep1.3.2间接
npmmkdirp0.5.6间接
npmms2.0.0间接
npmmute-stream0.0.8间接
npmnan2.20.0间接
npmnanomatch1.2.13间接
npmneo-async2.6.2间接
npmnext-tick1.1.0间接
npmnode-libs-browser2.2.1间接
npmnormalize-package-data2.5.0间接
npmnormalize-path2.1.1间接
npmnormalize-path3.0.0间接
npmnormalize-range0.1.2间接
npmnormalize-url1.9.1间接
npmnpm-run-path2.0.2间接
npmnum2fraction1.2.2间接
npmnumber-is-nan1.0.1间接
npmobject-assign4.1.1间接
npmobject-copy0.1.0间接
npmobject-filter1.0.2间接
npmobject-inspect1.13.4间接
npmobject-keys1.1.1间接
npmobject-visit1.0.1间接
npmobject.assign4.1.5间接
npmobject.pick1.3.0间接
npmonce1.4.0间接
npmonetime5.1.2间接
npmora5.4.1间接
npmos-browserify0.3.0间接
npmos-locale2.1.0间接
npmos-tmpdir1.0.2间接
npmp-finally1.0.0间接
npmp-limit1.3.0间接
npmp-locate2.0.0间接
npmp-try1.0.0间接
npmpako1.0.11间接
npmparse-asn15.1.7间接
npmparse-json2.2.0间接
npmpascalcase0.1.1间接
npmpath-browserify0.0.1间接
npmpath-dirname1.0.2间接
npmpath-exists3.0.0间接
npmpath-is-absolute1.0.1间接
npmpath-key2.0.1间接
npmpath-parse1.0.7间接
npmpath-type2.0.0间接
npmpbkdf23.1.3间接
npmpicomatch2.3.1间接
npmpify2.3.0间接
npmpify4.0.1间接
npmpopper.js1.16.1间接
npmposix-character-classes0.1.1间接
npmpossible-typed-array-names1.1.0间接
npmpostcss5.2.18间接
npmpostcss6.0.23间接
npmpostcss-calc5.3.1间接
npmpostcss-colormin2.2.2间接
npmpostcss-convert-values2.6.1间接
npmpostcss-discard-comments2.0.4间接
npmpostcss-discard-duplicates2.1.0间接
npmpostcss-discard-empty2.1.0间接
npmpostcss-discard-overridden0.1.1间接
npmpostcss-discard-unused2.2.3间接
npmpostcss-filter-plugins2.0.3间接
npmpostcss-merge-idents2.1.7间接
npmpostcss-merge-longhand2.0.2间接
npmpostcss-merge-rules2.1.2间接
npmpostcss-message-helpers2.0.0间接
npmpostcss-minify-font-values1.0.5间接
npmpostcss-minify-gradients1.0.5间接
npmpostcss-minify-params1.2.2间接
npmpostcss-minify-selectors2.1.1间接
npmpostcss-modules-extract-imports1.2.1间接
npmpostcss-modules-local-by-default1.2.0间接
npmpostcss-modules-scope1.1.0间接
npmpostcss-modules-values1.3.0间接
npmpostcss-normalize-charset1.1.1间接
npmpostcss-normalize-url3.0.8间接
npmpostcss-ordered-values2.2.3间接
npmpostcss-reduce-idents2.4.0间接
npmpostcss-reduce-initial1.0.1间接
npmpostcss-reduce-transforms1.0.4间接
npmpostcss-selector-parser2.2.3间接
npmpostcss-svgo2.1.6间接
npmpostcss-unique-selectors2.0.2间接
npmpostcss-value-parser3.3.1间接
npmpostcss-zindex2.2.0间接
npmprepend-http1.0.4间接
npmprocess0.11.10间接
npmprocess-nextick-args2.0.1间接
npmprop-types15.8.1间接
npmprop-types-extra1.1.1间接
npmprr1.0.1间接
npmpseudomap1.0.2间接
npmpublic-encrypt4.0.3间接
npmpunycode1.4.1间接
npmpunycode2.3.1间接
npmq1.5.1间接
npmqs6.14.1间接
npmquery-string4.3.4间接
npmquery-string7.0.1间接
npmquerystring-es30.2.1间接
npmrandombytes2.1.0间接
npmrandomfill1.0.4间接
npmreact17.0.2间接
npmreact-bootstrap1.6.8间接
npmreact-clientside-effect1.2.6间接
npmreact-colorful5.6.1间接
npmreact-dom17.0.2间接
npmreact-dropzone14.2.3间接
npmreact-fast-compare3.2.2间接
npmreact-focus-lock2.13.2间接
npmreact-focus-on3.9.3间接
npmreact-imask7.6.1间接
npmreact-intl6.6.8间接
npmreact-is16.13.1间接
npmreact-lifecycles-compat3.0.4间接
npmreact-loading-skeleton3.4.0间接
npmreact-overlays5.2.1间接
npmreact-popper2.3.0间接
npmreact-proptype-conditional-require1.0.4间接
npmreact-remove-scroll2.5.10间接
npmreact-remove-scroll-bar2.3.6间接
npmreact-responsive8.2.0间接
npmreact-style-singleton2.2.1间接
npmreact-table7.8.0间接
npmreact-transition-group4.4.5间接
npmread-pkg2.0.0间接
npmread-pkg-up2.0.0间接
npmreadable-stream1.1.14间接
npmreadable-stream2.3.8间接
npmreadable-stream3.6.2间接
npmreaddirp2.2.1间接
npmreaddirp3.6.0间接
npmreduce-css-calc1.3.0间接
npmreduce-function-call1.0.3间接
npmregenerator-runtime0.14.1间接
npmregex-not1.0.2间接
npmremove-trailing-separator1.1.0间接
npmrepeat-element1.1.4间接
npmrepeat-string1.6.1间接
npmrequire-directory2.1.1间接
npmrequire-main-filename1.0.1间接
npmresolve1.22.8间接
npmresolve-url0.2.1间接
npmrestore-cursor3.1.0间接
npmret0.1.15间接
npmright-align0.1.3间接
npmripemd1602.0.1间接
npmripemd1602.0.2间接
npmrun-async2.4.1间接
npmrxjs7.8.1间接
npmsafe-buffer5.1.2间接
npmsafe-buffer5.2.1间接
npmsafe-regex1.1.0间接
npmsafer-buffer2.1.2间接
npmsass1.78.0间接
npmsass-loader7.3.1间接
npmsax1.2.4间接
npmscheduler0.20.2间接
npmschema-utils0.3.0间接
npmsemver5.7.2间接
npmsemver6.3.1间接
npmset-blocking2.0.0间接
npmset-function-length1.2.2间接
npmset-value2.0.1间接
npmsetimmediate1.0.5间接
npmsha.js2.4.11间接
npmshallow-clone3.0.1间接
npmshallow-equal1.2.1间接
npmshebang-command1.2.0间接
npmshebang-regex1.0.0间接
npmside-channel1.1.0间接
npmside-channel-list1.0.0间接
npmside-channel-map1.0.1间接
npmside-channel-weakmap1.0.2间接
npmsignal-exit3.0.7间接
npmsnapdragon0.8.2间接
npmsnapdragon-node2.1.1间接
npmsnapdragon-util3.0.1间接
npmsort-keys1.1.2间接
npmsource-list-map2.0.1间接
npmsource-map0.5.7间接
npmsource-map0.6.1间接
npmsource-map-js1.2.0间接
npmsource-map-resolve0.5.3间接
npmsource-map-url0.4.1间接
npmspdx-correct3.2.0间接
npmspdx-exceptions2.5.0间接
npmspdx-expression-parse3.0.1间接
npmspdx-license-ids3.0.20间接
npmsplit-on-first1.1.0间接
npmsplit-string3.1.0间接
npmsprintf-js1.0.3间接
npmstatic-extend0.1.2间接
npmstream-browserify2.0.2间接
npmstream-http2.8.3间接
npmstrict-uri-encode1.1.0间接
npmstrict-uri-encode2.0.0间接
npmstring-width1.0.2间接
npmstring-width2.1.1间接
npmstring-width4.2.3间接
npmstring_decoder0.10.31间接
npmstring_decoder1.1.1间接
npmstring_decoder1.3.0间接
npmstrip-ansi3.0.1间接
npmstrip-ansi4.0.0间接
npmstrip-ansi6.0.1间接
npmstrip-bom3.0.0间接
npmstrip-eof1.0.0间接
npmstrip-json-comments1.0.4间接
npmstyle-loader0.18.2间接
npmsupports-color2.0.0间接
npmsupports-color3.2.3间接
npmsupports-color4.5.0间接
npmsupports-color5.5.0间接
npmsupports-color7.2.0间接
npmsupports-preserve-symlinks-flag1.0.0间接
npmsvgo0.7.2间接
npmtabbable5.3.3间接
npmtapable0.2.9间接
npmthrough2.3.8间接
npmtimers-browserify2.0.12间接
npmtmp0.0.33间接
npmto-arraybuffer1.0.1间接
npmto-buffer1.2.1间接
npmto-object-path0.3.0间接
npmto-regex3.0.2间接
npmto-regex-range2.1.1间接
npmto-regex-range5.0.1间接
npmtslib2.7.0间接
npmtty-browserify0.0.0间接
npmtype2.7.3间接
npmtype-fest0.21.3间接
npmtyped-array-buffer1.0.3间接
npmuglify-js2.8.29间接
npmuglify-to-browserify1.0.2间接
npmuglifyjs-webpack-plugin0.4.6间接
npmuncontrollable7.2.1间接
npmunion-value1.0.1间接
npmuniq1.0.1间接
npmuniqs2.0.0间接
npmunset-value1.0.0间接
npmupath1.2.0间接
npmuri-js4.4.1间接
npmurix0.1.0间接
npmurl0.11.4间接
npmuse3.1.1间接
npmuse-callback-ref1.3.2间接
npmuse-sidecar1.1.2间接
npmutil0.10.4间接
npmutil0.11.1间接
npmutil-deprecate1.0.2间接
npmuuid9.0.1间接
npmvalidate-npm-package-license3.0.4间接
npmvendors1.0.4间接
npmvm-browserify1.1.2间接
npmwarning4.0.3间接
npmwatchpack1.7.5间接
npmwatchpack-chokidar22.0.1间接
npmwcwidth1.0.1间接
npmwebpack3.12.0间接
npmwebpack-sources1.4.3间接
npmwhet.extend0.9.9间接
npmwhich1.3.1间接
npmwhich-module2.0.1间接
npmwhich-typed-array1.1.19间接
npmwindow-size0.1.0间接
npmwordwrap0.0.2间接
npmwrap-ansi2.1.0间接
npmwrap-ansi6.2.0间接
npmwrappy1.0.2间接
npmxtend4.0.2间接
npmy18n3.2.2间接
npmyallist2.1.2间接
npmyargs3.10.0间接
npmyargs8.0.2间接
npmyargs-parser7.0.0间接
PyPIaccessible-pygments0.0.5间接
PyPIacid-xblock0.4.1间接
PyPIaiohappyeyeballs2.7.1间接
PyPIaiohttp3.14.1间接
PyPIaiosignal1.4.0间接
PyPIalabaster1.0.0间接
PyPIamqp5.3.1间接
PyPIanalytics-python1.4.post1间接
PyPIaniso860110.0.1间接
PyPIannotated-doc0.0.4间接
PyPIannotated-types0.7.0间接
PyPIanyio4.14.1间接
PyPIappdirs1.4.4间接
PyPIasgiref3.11.1间接
PyPIasn1crypto1.5.1间接
PyPIastroid3.3.11间接
PyPIattrs26.1.0间接
PyPIbabel2.18.0间接
PyPIbackoff1.10.0间接
PyPIbcrypt5.0.0间接
PyPIbeautifulsoup44.15.0间接
PyPIbilliard4.2.4间接
PyPIbleach间接
PyPIbleach6.4.0间接
PyPIboto31.43.41间接
PyPIbotocore1.43.41间接
PyPIbracex3.0间接
PyPIbridgekeeper0.9间接
PyPIbuild1.5.0间接
PyPIcachecontrol0.14.4间接
PyPIcachetools7.1.4间接
PyPIcamel-converter5.1.0间接
PyPIcasbin-django-orm-adapter1.7.0间接
PyPIcelery间接
PyPIcelery5.6.3间接
PyPIcertifi2026.6.17间接
PyPIcffi2.1.0间接
PyPIchardet7.4.3间接
PyPIcharset-normalizer3.4.9间接
PyPIchem2.0.0间接
PyPIcheroot11.1.2间接
PyPIcherrypy18.10.0间接
PyPIclick8.4.2间接
PyPIclick-didyoumean0.3.1间接
PyPIclick-log0.4.0间接
PyPIclick-plugins1.1.1.2间接
PyPIclick-repl0.3.0间接
PyPIcode-annotations间接
PyPIcode-annotations3.0.0间接
PyPIcodejail-includes2.0.0间接
PyPIcolorama0.4.6间接
PyPIcoverage7.15.2间接
PyPIcrowdsourcehinter-xblock1.0.1间接
PyPIcryptography间接
PyPIcryptography49.0.0间接
PyPIcssutils2.15.0间接
PyPIddt1.3.1间接
PyPIdefusedxml0.7.1间接
PyPIdiff-cover10.3.0间接
PyPIdill0.4.1间接
PyPIdistlib0.4.3间接
PyPIdjango间接
PyPIdjango5.2.16间接
PyPIdjango-appconf1.2.0间接
PyPIdjango-autocomplete-light5.0.0间接
PyPIdjango-cache-memoize间接
PyPIdjango-cache-memoize0.2.1间接
PyPIdjango-celery-results2.6.0间接
PyPIdjango-classy-tags4.1.0间接
PyPIdjango-config-models间接
PyPIdjango-config-models3.0.0间接
PyPIdjango-cors-headers4.9.0间接
PyPIdjango-countries间接
PyPIdjango-countries9.0.0间接
PyPIdjango-crum间接
PyPIdjango-crum0.7.9间接
PyPIdjango-fernet-fields-v2间接
PyPIdjango-fernet-fields-v20.9间接
PyPIdjango-filter间接
PyPIdjango-filter25.2间接
PyPIdjango-ipware间接
PyPIdjango-ipware7.0.1间接
PyPIdjango-js-asset4.0.1间接
PyPIdjango-method-override1.0.4间接
PyPIdjango-mock-queries2.3.0间接
PyPIdjango-model-utils间接
PyPIdjango-model-utils5.0.0间接
PyPIdjango-mptt0.18.0间接
PyPIdjango-multi-email-field间接
PyPIdjango-multi-email-field0.8.0间接
PyPIdjango-mysql4.19.0间接
PyPIdjango-oauth-toolkit间接
PyPIdjango-oauth-toolkit1.7.1间接
PyPIdjango-object-actions间接
PyPIdjango-object-actions5.1.2间接
PyPIdjango-pipeline4.1.0间接
PyPIdjango-push-notifications3.3.0间接
PyPIdjango-ratelimit4.1.0间接
PyPIdjango-sekizai4.1.0间接
PyPIdjango-ses4.7.2间接
PyPIdjango-simple-history间接
PyPIdjango-simple-history3.12.0间接
PyPIdjango-statici18n2.7.1间接
PyPIdjango-storages1.14.6间接
PyPIdjango-user-tasks4.0.0间接
PyPIdjango-waffle间接
PyPIdjango-waffle5.0.0间接
PyPIdjango-webpack-loader3.2.4间接
PyPIdjangorestframework间接
PyPIdjangorestframework3.17.1间接
PyPIdjangorestframework-xml间接
PyPIdjangorestframework-xml2.0.0间接
PyPIdnspython2.8.0间接
PyPIdoc82.0.0间接
PyPIdocutils0.21.2间接
PyPIdone-xblock3.0.0间接
PyPIdrf-jwt1.19.2间接
PyPIdrf-spectacular0.30.0间接
PyPIdrf-yasg1.21.15间接
PyPIedx-ace1.15.0间接
PyPIedx-api-doc-tools3.0.0间接
PyPIedx-auth-backends5.0.0间接
PyPIedx-braze-client1.1.3间接
PyPIedx-bulk-grades2.0.0间接
PyPIedx-ccx-keys2.0.2间接
PyPIedx-celeryutils2.0.0间接
PyPIedx-codejail4.1.0间接
PyPIedx-completion5.0.0间接
PyPIedx-django-release-util1.5.0间接
PyPIedx-django-sites-extensions6.0.0间接
PyPIedx-django-utils间接
PyPIedx-django-utils8.0.1间接
PyPIedx-drf-extensions间接
PyPIedx-drf-extensions10.6.0间接
PyPIedx-enterprise8.3.0间接
PyPIedx-event-bus-kafka6.1.0间接
PyPIedx-event-bus-redis1.0.0间接
PyPIedx-i18n-tools2.0.0间接
PyPIedx-lint6.1.0间接
PyPIedx-milestones2.0.0间接
PyPIedx-opaque-keys间接
PyPIedx-opaque-keys4.0.0间接
PyPIedx-organizations8.0.0间接
PyPIedx-proctoring5.2.0间接
PyPIedx-rbac间接
PyPIedx-rbac3.0.0间接
PyPIedx-rest-api-client间接
PyPIedx-rest-api-client7.0.0间接
PyPIedx-search5.0.2间接
PyPIedx-sga0.29.0间接
PyPIedx-submissions4.0.0间接
PyPIedx-tincan-py352.0.0间接
PyPIedx-toggles间接
PyPIedx-toggles6.0.0间接
PyPIedx-when4.0.0间接
PyPIedxval5.0.1间接
PyPIelasticsearch7.9.1间接
PyPIencutils1.0.0间接
PyPIenmerkar0.7.1间接
PyPIenmerkar-underscore2.4.0间接
PyPIenterprise-integrated-channels0.1.62间接
PyPIevent-tracking4.0.2间接
PyPIfactory-boy间接
PyPIfactory-boy3.3.3间接
PyPIfaker40.31.0间接
PyPIfastavro1.12.2间接
PyPIfilelock3.29.6间接
PyPIfilelock3.30.2间接
PyPIfirebase-admin7.5.0间接
PyPIfreezegun1.5.5间接
PyPIfrozenlist1.8.0间接
PyPIfs2.4.16间接
PyPIfs-s3fs1.1.1间接
PyPIgeoip25.2.0间接
PyPIglob20.7间接
PyPIgoogle-api-core2.31.0间接
PyPIgoogle-auth2.55.1间接
PyPIgoogle-cloud-core2.6.0间接
PyPIgoogle-cloud-firestore2.28.0间接
PyPIgoogle-cloud-storage3.12.0间接
PyPIgoogle-crc32c1.8.0间接
PyPIgoogle-resumable-media2.10.0间接
PyPIgoogleapis-common-protos1.75.0间接
PyPIgrpcio1.82.0间接
PyPIgrpcio-status1.82.0间接
PyPIgunicorn26.0.0间接
PyPIh110.16.0间接
PyPIh24.3.0间接
PyPIhelp-tokens4.0.0间接
PyPIhpack4.2.0间接
PyPIhtml5lib1.1间接
PyPIhttpcore1.0.9间接
PyPIhttpx0.28.1间接
PyPIhyperframe6.1.0间接
PyPIicalendar7.2.0间接
PyPIidna3.18间接
PyPIimagesize2.0.0间接
PyPIimportlib-metadata9.0.0间接
PyPIinflection0.5.1间接
PyPIiniconfig2.3.0间接
PyPIinvoke3.0.3间接
PyPIipaddress1.0.23间接
PyPIisodate0.7.2间接
PyPIisort6.1.0间接
PyPIjaraco-classes3.4.0间接
PyPIjaraco-collections5.2.1间接
PyPIjaraco-context6.1.2间接
PyPIjaraco-functools4.6.0间接
PyPIjaraco-text4.3.0间接
PyPIjasmine3.99.0间接
PyPIjasmine-core3.99.0间接
PyPIjinja22.11.3间接
PyPIjinja23.1.6间接
PyPIjmespath1.1.0间接
PyPIjoblib1.5.3间接
PyPIjsondiff间接
PyPIjsondiff2.2.1间接
PyPIjsonfield间接
PyPIjsonfield3.2.0间接
PyPIjsonschema4.26.0间接
PyPIjsonschema-specifications2025.9.1间接
PyPIjwcrypto1.5.8间接
PyPIkombu5.6.2间接
PyPIlaboratory1.0.2间接
PyPIlazy2.0间接
PyPIlti-consumer-xblock11.3.1间接
PyPIlxml间接
PyPIlxml5.3.2间接
PyPIlxml-html-clean0.4.4间接
PyPImailsnake1.6.4间接
PyPImako1.3.12间接
PyPImarkdown3.10.2间接
PyPImarkdown-it-py4.2.0间接
PyPImarkupsafe3.0.3间接
PyPImaxminddb3.1.1间接
PyPImccabe0.7.0间接
PyPImdurl0.1.2间接
PyPImeilisearch0.42.0间接
PyPImock5.2.0间接
PyPImodel-bakery1.24.0间接
PyPImongoengine0.29.3间接
PyPImonotonic1.6间接
PyPImore-itertools11.1.0间接
PyPImpmath1.3.0间接
PyPImsgpack1.2.1间接
PyPImultidict6.7.1间接
PyPImysqlclient2.2.8间接
PyPInh30.3.6间接
PyPInltk3.9.4间接
PyPInodeenv1.10.0间接
PyPInumpy1.26.4间接
PyPIoauthlib3.3.1间接
PyPIolxcleaner0.3.0间接
PyPIopenedx-atlas间接
PyPIopenedx-atlas0.7.0间接
PyPIopenedx-authz1.21.0间接
PyPIopenedx-calc5.0.0间接
PyPIopenedx-core1.1.0间接
PyPIopenedx-django-pyfs4.0.0间接
PyPIopenedx-django-require3.0.0间接
PyPIopenedx-django-wiki3.1.2间接
PyPIopenedx-events间接
PyPIopenedx-events11.2.0间接
PyPIopenedx-filters间接
PyPIopenedx-filters3.7.0间接
PyPIopenedx-forum0.4.3间接
PyPIoptimizely-sdk5.5.0间接
PyPIora27.1.0间接
PyPIordereddict1.1间接
PyPIoutcome1.3.0.post0间接
PyPIpackaging26.2间接
PyPIparamiko间接
PyPIparamiko5.0.0间接
PyPIpath16.11.0间接
PyPIpath-py间接
PyPIpath-py12.5.0间接
PyPIpgpy间接
PyPIpgpy0.6.0间接
PyPIpiexif1.1.3间接
PyPIpillow间接
PyPIpillow12.3.0间接
PyPIpip26.1.2间接
PyPIpip-tools7.5.3间接
PyPIpkginfo1.12.1.2间接
PyPIplatformdirs4.10.0间接
PyPIpluggy1.6.0间接
PyPIpolib1.2.0间接
PyPIportend3.2.1间接
PyPIprompt-toolkit3.0.52间接
PyPIpropcache0.5.2间接
PyPIproto-plus1.28.0间接
PyPIprotobuf7.35.1间接
PyPIpsutil7.2.2间接
PyPIpsycopg2-binary2.9.12间接
PyPIpyasn10.6.3间接
PyPIpyasn1-modules0.4.2间接
PyPIpycasbin2.8.0间接
PyPIpycodestyle2.14.0间接
PyPIpycountry26.2.16间接
PyPIpycparser3.0间接
PyPIpycryptodomex3.23.0间接
PyPIpydantic2.13.4间接
PyPIpydantic-core2.46.4间接
PyPIpydata-sphinx-theme0.16.1间接
PyPIpydocstyle6.3.0间接
PyPIpygments2.20.0间接
PyPIpyjwt2.13.0间接
PyPIpylatexenc2.10间接
PyPIpylint间接
PyPIpylint3.3.9间接
PyPIpylint-celery0.3间接
PyPIpylint-django2.8.0间接
PyPIpylint-plugin-utils0.9.0间接
PyPIpylti1p32.0.0间接
PyPIpymemcache4.0.0间接
PyPIpymongo4.4.0间接
PyPIpynacl1.6.2间接
PyPIpynliner0.8.0间接
PyPIpyopenssl26.3.0间接
PyPIpyparsing3.3.2间接
PyPIpyproject-api1.10.1间接
PyPIpyproject-hooks1.2.0间接
PyPIpyrsistent0.20.0间接
PyPIpysocks1.7.1间接
PyPIpysrt1.1.2间接
PyPIpytest9.1.1间接
PyPIpytest-cov7.1.0间接
PyPIpytest-django4.12.0间接
PyPIpython-dateutil间接
PyPIpython-dateutil2.9.0.post0间接
PyPIpython-discovery1.4.4间接
PyPIpython-ipware3.0.0间接
PyPIpython-slugify8.0.4间接
PyPIpython-swiftclient4.10.0间接
PyPIpython3-openid3.2.0间接
PyPIpython3-saml间接
PyPIpython3-saml1.16.0间接
PyPIpytz间接
PyPIpytz2026.2间接
PyPIpyuca1.2间接
PyPIpyyaml6.0.3间接
PyPIrandom21.0.2间接
PyPIreadme-renderer45.0间接
PyPIrecommender-xblock5.0.0间接
PyPIredis8.0.1间接
PyPIreferencing0.37.0间接
PyPIregex2026.6.28间接
PyPIrequests间接
PyPIrequests2.34.2间接
PyPIrequests-oauthlib2.0.0间接
PyPIrequests-toolbelt1.0.0间接
PyPIresponses0.26.2间接
PyPIrestructuredtext-lint2.0.2间接
PyPIrich15.0.0间接
PyPIroman-numerals4.1.0间接
PyPIroman-numerals-py4.1.0间接
PyPIrpds-py2026.6.3间接
PyPIrules间接
PyPIrules3.5间接
PyPIs3transfer0.19.0间接
PyPIsailthru-client2.2.3间接
PyPIscipy1.17.1间接
PyPIselenium4.46.0间接
PyPIsemantic-version2.10.0间接
PyPIsetuptools83.0.0间接
PyPIshapely2.1.2间接
PyPIshellingham1.5.4间接
PyPIsimpleeval1.0.7间接
PyPIsimplejson4.1.1间接
PyPIsix1.17.0间接
PyPIslumber间接
PyPIslumber0.7.1间接
PyPIsniffio1.3.1间接
PyPIsnowballstemmer3.1.1间接
PyPIsnowflake-connector-python4.6.0间接
PyPIsocial-auth-app-django间接
PyPIsocial-auth-app-django5.4.1间接
PyPIsocial-auth-core5.0.2间接
PyPIsorl-thumbnail13.0.0间接
PyPIsortedcontainers2.4.0间接
PyPIsoupsieve2.8.4间接
PyPIsphinx间接
PyPIsphinx8.2.3间接
PyPIsphinx-book-theme1.2.0间接
PyPIsphinxcontrib-applehelp2.0.0间接
PyPIsphinxcontrib-devhelp2.0.0间接
PyPIsphinxcontrib-htmlhelp2.1.0间接
PyPIsphinxcontrib-jsmath1.0.1间接
PyPIsphinxcontrib-qthelp2.0.0间接
PyPIsphinxcontrib-serializinghtml2.0.0间接
PyPIsqlparse0.5.5间接
PyPIstaff-graded-xblock4.0.1间接
PyPIstevedore间接
PyPIstevedore5.9.0间接
PyPIsuper-csv5.0.0间接
PyPIsympy1.14.0间接
PyPItempora5.12.0间接
PyPItestfixtures间接
PyPItestfixtures12.2.0间接
PyPItext-unidecode1.3间接
PyPItincan间接
PyPItincan1.0.0间接
PyPItinycss21.5.1间接
PyPItomli-w1.2.0间接
PyPItomlkit0.15.0间接
PyPItomlkit0.15.1间接
PyPItox4.56.4间接
PyPItqdm4.68.4间接
PyPItrio0.33.0间接
PyPItrio-websocket0.12.2间接
PyPItwine1.11.0间接
PyPItyper0.27.0间接
PyPItyper-slim0.24.0间接
PyPItypesense2.0.0间接
PyPItyping-extensions4.16.0间接
PyPItyping-inspection0.4.2间接
PyPItzdata2026.2间接
PyPItzlocal5.4.4间接
PyPIunicodecsv间接
PyPIunicodecsv0.14.1间接
PyPIunicodeit0.7.5间接
PyPIuritemplate4.2.0间接
PyPIurllib32.7.0间接
PyPIvine5.1.0间接
PyPIvirtualenv21.6.1间接
PyPIvoluptuous0.16.0间接
PyPIwalrus0.9.8间接
PyPIwcmatch10.2.1间接
PyPIwcwidth0.8.2间接
PyPIwebencodings0.5.1间接
PyPIwebob1.8.10间接
PyPIwebsocket-client1.9.0间接
PyPIwheel0.47.0间接
PyPIwrapt2.2.2间接
PyPIwsproto1.3.2间接
PyPIxblock6.3.0间接
PyPIxblock-drag-and-drop-v25.0.6间接
PyPIxblock-google-drive0.8.2间接
PyPIxblock-poll1.16.1间接
PyPIxblocks-contrib0.17.0间接
PyPIxmlsec1.3.14间接
PyPIxss-utils1.0.0间接
PyPIyarl1.24.2间接
PyPIzc-lockfile4.0间接
PyPIzipp4.1.0间接
依赖安全公告 39

该仓库未发布可被索引解析的包,因此评估的是其自身的依赖图——共 1,041 个包,其中也包含从不交付的开发与测试版本固定:39 个存在已知公告,0 个为直接依赖。 有 50 个无法评估——没有已解析的版本、生态系统不受支持,或不在所列包清单之内。

软件包版本关系严重程度公告数修复版本
cipher-base1.0.4间接严重11.0.5
immutable4.3.7间接严重35.1.8
sha.js2.4.11间接严重12.4.12
brace-expansion1.1.11间接35.0.7
brace-expansion2.0.1间接35.0.7
braces2.3.2间接13.0.3
cross-spawn5.1.0间接17.0.5
elliptic6.6.1间接1
is-svg2.1.0间接24.3.0
jinja22.11.3间接83.1.6
js-yaml3.7.0间接54.3.0
json50.5.1间接12.2.2
lodash4.17.21间接34.18.0
lxml5.3.2间接26.1.0
lxml-html-clean0.4.4间接20.4.5
minimatch3.0.8间接310.2.3
minimatch3.1.2间接310.2.3
minimatch5.1.6间接310.2.3
nltk3.9.4间接33.10.0
picomatch2.3.1间接24.0.4
pyasn10.6.3间接50.6.4
tmp0.0.33间接20.2.6
uuid9.0.1间接113.0.1
@babel/runtime7.25.6间接18.0.0-alpha.17
@babel/runtime-corejs37.25.6间接18.0.0-alpha.17
ajv5.5.2间接28.18.0
ajv6.12.6间接18.18.0
bn.js4.12.0间接15.2.3
bn.js5.2.1间接15.2.3
color-string0.3.0间接11.5.5
jquery2.2.4间接44.4.0
mem1.1.0间接14.0.0
micromatch3.1.10间接14.0.8
postcss5.2.18间接38.5.10
postcss6.0.23间接38.5.10
pymongo4.4.0间接24.6.3
qs6.14.1间接26.15.2
social-auth-app-django5.4.1间接25.6.0
yargs-parser7.0.0间接118.1.1

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

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 16200,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "HTML": 95485,
        "SCSS": 14714,
        "Shell": 12525,
        "Python": 5906124,
        "Makefile": 10624,
        "Dockerfile": 2741,
        "JavaScript": 36447
      },
      "pushed_at": "2026-07-23T12:40:35Z",
      "created_at": "2016-10-12T13:48:42Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-22T17:36:44Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "AGPL-3.0",
      "default_branch": "master",
      "license_spdx_raw": "AGPL-3.0",
      "primary_language": "Python",
      "significant_languages": [
        "Python"
      ]
    },
    "owner": {
      "blog": "https://openedx.org",
      "name": "Open edX",
      "type": "Organization",
      "login": "openedx",
      "company": null,
      "location": null,
      "followers": 757,
      "avatar_url": "https://avatars.githubusercontent.com/u/40179672?v=4",
      "created_at": "2018-06-11T17:46:52Z",
      "is_verified": null,
      "public_repos": 185,
      "account_age_days": 2963
    },
    "license": {
      "state": "standard",
      "spdx_id": "AGPL-3.0",
      "raw_spdx": "AGPL-3.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "8.7.1",
          "kind": "patch",
          "published_at": "2026-07-23T12:40:35Z"
        },
        {
          "tag": "8.7.0",
          "kind": "minor",
          "published_at": "2026-07-16T15:44:50Z"
        },
        {
          "tag": "8.6.0",
          "kind": "minor",
          "published_at": "2026-07-16T14:40:05Z"
        },
        {
          "tag": "8.5.0",
          "kind": "minor",
          "published_at": "2026-07-15T14:22:29Z"
        },
        {
          "tag": "8.4.0",
          "kind": "minor",
          "published_at": "2026-07-09T20:54:03Z"
        },
        {
          "tag": "8.3.0",
          "kind": "minor",
          "published_at": "2026-06-30T15:45:35Z"
        },
        {
          "tag": "v8.2.0",
          "kind": "minor",
          "published_at": "2026-06-29T13:52:16Z"
        },
        {
          "tag": "v8.1.2",
          "kind": "patch",
          "published_at": "2026-06-23T19:41:26Z"
        },
        {
          "tag": "v8.1.1",
          "kind": "patch",
          "published_at": "2026-06-22T18:55:19Z"
        },
        {
          "tag": "v8.1.0",
          "kind": "minor",
          "published_at": "2026-06-17T19:01:39Z"
        },
        {
          "tag": "8.0.19",
          "kind": "patch",
          "published_at": "2026-06-16T14:07:37Z"
        },
        {
          "tag": "8.0.18",
          "kind": "patch",
          "published_at": "2026-06-15T16:51:48Z"
        },
        {
          "tag": "8.0.17",
          "kind": "patch",
          "published_at": "2026-06-08T15:17:34Z"
        },
        {
          "tag": "8.0.16",
          "kind": "patch",
          "published_at": "2026-06-04T14:05:08Z"
        },
        {
          "tag": "v8.0.15",
          "kind": "patch",
          "published_at": "2026-05-20T21:14:35Z"
        },
        {
          "tag": "v8.0.14",
          "kind": "patch",
          "published_at": "2026-05-15T17:01:34Z"
        },
        {
          "tag": "v8.0.13",
          "kind": "patch",
          "published_at": "2026-05-14T23:09:13Z"
        },
        {
          "tag": "v8.0.12",
          "kind": "patch",
          "published_at": "2026-05-14T19:10:57Z"
        },
        {
          "tag": "8.0.10",
          "kind": "patch",
          "published_at": "2026-05-11T19:48:02Z"
        },
        {
          "tag": "8.0.9",
          "kind": "patch",
          "published_at": "2026-05-07T14:30:12Z"
        },
        {
          "tag": "v8.0.8",
          "kind": "patch",
          "published_at": "2026-05-06T21:39:00Z"
        },
        {
          "tag": "v8.0.6",
          "kind": "patch",
          "published_at": "2026-05-06T02:05:09Z"
        },
        {
          "tag": "v8.0.5",
          "kind": "patch",
          "published_at": "2026-05-05T21:35:59Z"
        },
        {
          "tag": "8.0.4",
          "kind": "patch",
          "published_at": "2026-05-05T13:38:09Z"
        },
        {
          "tag": "v8.0.3",
          "kind": "patch",
          "published_at": "2026-04-30T23:22:20Z"
        },
        {
          "tag": "v8.0.2",
          "kind": "patch",
          "published_at": "2026-04-29T16:02:37Z"
        },
        {
          "tag": "v8.0.1",
          "kind": "patch",
          "published_at": "2026-04-27T15:24:04Z"
        },
        {
          "tag": "v8.0.0",
          "kind": "major",
          "published_at": "2026-04-27T13:47:48Z"
        },
        {
          "tag": "v7.0.7",
          "kind": "patch",
          "published_at": "2026-04-24T15:44:30Z"
        },
        {
          "tag": "v7.0.6",
          "kind": "patch",
          "published_at": "2026-04-24T14:22:00Z"
        },
        {
          "tag": "v7.0.5",
          "kind": "patch",
          "published_at": "2026-04-24T14:25:22Z"
        },
        {
          "tag": "v7.0.4",
          "kind": "patch",
          "published_at": "2026-04-15T21:44:20Z"
        },
        {
          "tag": "7.0.3",
          "kind": "patch",
          "published_at": "2026-04-15T15:08:13Z"
        },
        {
          "tag": "7.0.2",
          "kind": "patch",
          "published_at": "2026-04-14T13:14:35Z"
        },
        {
          "tag": "v7.0.1",
          "kind": "patch",
          "published_at": "2026-04-14T00:27:26Z"
        },
        {
          "tag": "v7.0.0",
          "kind": "major",
          "published_at": "2026-04-07T14:38:05Z"
        },
        {
          "tag": "6.8.6",
          "kind": "patch",
          "published_at": "2026-04-07T13:10:55Z"
        },
        {
          "tag": "6.8.5",
          "kind": "patch",
          "published_at": "2026-04-06T17:45:10Z"
        },
        {
          "tag": "6.8.4",
          "kind": "patch",
          "published_at": "2026-03-31T13:43:37Z"
        },
        {
          "tag": "v6.8.3",
          "kind": "patch",
          "published_at": "2026-03-27T17:18:04Z"
        },
        {
          "tag": "6.8.2",
          "kind": "patch",
          "published_at": "2026-03-27T16:35:26Z"
        },
        {
          "tag": "v6.8.1",
          "kind": "patch",
          "published_at": "2026-03-26T16:49:06Z"
        },
        {
          "tag": "v6.8.0",
          "kind": "minor",
          "published_at": "2026-03-26T00:44:58Z"
        },
        {
          "tag": "6.7.0",
          "kind": "minor",
          "published_at": "2026-03-16T13:40:39Z"
        },
        {
          "tag": "6.6.9",
          "kind": "patch",
          "published_at": "2026-03-10T15:24:01Z"
        },
        {
          "tag": "6.6.8",
          "kind": "patch",
          "published_at": "2026-03-09T20:54:59Z"
        },
        {
          "tag": "v6.6.7",
          "kind": "patch",
          "published_at": "2026-03-04T17:00:51Z"
        },
        {
          "tag": "6.6.6",
          "kind": "patch",
          "published_at": "2026-02-26T23:28:04Z"
        },
        {
          "tag": "6.6.5",
          "kind": "patch",
          "published_at": "2026-02-24T16:39:39Z"
        },
        {
          "tag": "6.6.4",
          "kind": "patch",
          "published_at": "2026-02-04T16:27:55Z"
        },
        {
          "tag": "6.6.3",
          "kind": "patch",
          "published_at": "2026-02-03T21:31:04Z"
        },
        {
          "tag": "6.6.2",
          "kind": "patch",
          "published_at": "2026-01-20T21:40:29Z"
        },
        {
          "tag": "6.6.1",
          "kind": "patch",
          "published_at": "2026-01-09T11:00:53Z"
        },
        {
          "tag": "6.6.0",
          "kind": "minor",
          "published_at": "2026-01-09T09:12:55Z"
        },
        {
          "tag": "6.5.7",
          "kind": "patch",
          "published_at": "2025-11-28T09:19:11Z"
        },
        {
          "tag": "6.5.6",
          "kind": "patch",
          "published_at": "2025-11-28T06:51:50Z"
        },
        {
          "tag": "6.5.5",
          "kind": "patch",
          "published_at": "2025-11-24T17:21:50Z"
        },
        {
          "tag": "v6.5.2",
          "kind": "patch",
          "published_at": "2025-10-21T22:25:07Z"
        },
        {
          "tag": "6.5.1",
          "kind": "patch",
          "published_at": "2025-10-17T17:25:36Z"
        },
        {
          "tag": "6.5.0",
          "kind": "minor",
          "published_at": "2025-10-10T13:17:15Z"
        },
        {
          "tag": "6.4.5",
          "kind": "patch",
          "published_at": "2025-10-03T14:26:15Z"
        },
        {
          "tag": "6.4.4",
          "kind": "patch",
          "published_at": "2025-09-26T16:31:39Z"
        },
        {
          "tag": "6.4.3",
          "kind": "patch",
          "published_at": "2025-09-19T19:05:39Z"
        },
        {
          "tag": "6.4.2",
          "kind": "patch",
          "published_at": "2025-09-17T09:13:37Z"
        },
        {
          "tag": "6.4.1",
          "kind": "patch",
          "published_at": "2025-09-15T14:45:28Z"
        },
        {
          "tag": "6.4.0",
          "kind": "minor",
          "published_at": "2025-09-11T12:35:21Z"
        },
        {
          "tag": "6.3.4",
          "kind": "patch",
          "published_at": "2025-09-10T12:42:42Z"
        },
        {
          "tag": "6.3.2",
          "kind": "patch",
          "published_at": "2025-09-02T16:01:06Z"
        },
        {
          "tag": "6.3.0",
          "kind": "minor",
          "published_at": "2025-08-22T12:53:39Z"
        },
        {
          "tag": "6.2.18",
          "kind": "patch",
          "published_at": "2025-08-17T21:06:08Z"
        },
        {
          "tag": "6.2.17",
          "kind": "patch",
          "published_at": "2025-08-11T14:29:48Z"
        },
        {
          "tag": "6.2.16",
          "kind": "patch",
          "published_at": "2025-08-11T12:54:12Z"
        },
        {
          "tag": "6.2.15",
          "kind": "patch",
          "published_at": "2025-08-08T06:51:59Z"
        },
        {
          "tag": "6.2.14",
          "kind": "patch",
          "published_at": "2025-07-29T09:09:17Z"
        },
        {
          "tag": "6.2.13",
          "kind": "patch",
          "published_at": "2025-07-22T18:50:44Z"
        },
        {
          "tag": "6.2.12",
          "kind": "patch",
          "published_at": "2025-07-22T15:23:21Z"
        },
        {
          "tag": "6.2.11",
          "kind": "patch",
          "published_at": "2025-07-17T12:46:41Z"
        },
        {
          "tag": "6.2.10",
          "kind": "patch",
          "published_at": "2025-07-14T20:42:00Z"
        },
        {
          "tag": "6.2.8",
          "kind": "patch",
          "published_at": "2025-07-03T13:31:59Z"
        },
        {
          "tag": "6.2.7",
          "kind": "patch",
          "published_at": "2025-06-18T15:25:52Z"
        },
        {
          "tag": "6.2.6",
          "kind": "patch",
          "published_at": "2025-06-18T12:15:20Z"
        },
        {
          "tag": "6.2.5",
          "kind": "patch",
          "published_at": "2025-06-16T19:04:38Z"
        },
        {
          "tag": "6.2.4",
          "kind": "patch",
          "published_at": "2025-06-12T18:42:11Z"
        },
        {
          "tag": "6.2.3",
          "kind": "patch",
          "published_at": "2025-06-12T15:03:28Z"
        },
        {
          "tag": "6.2.2",
          "kind": "patch",
          "published_at": "2025-06-12T04:08:29Z"
        },
        {
          "tag": "6.2.1",
          "kind": "patch",
          "published_at": "2025-06-09T15:38:53Z"
        },
        {
          "tag": "6.2.0",
          "kind": "minor",
          "published_at": "2025-06-09T13:29:56Z"
        },
        {
          "tag": "6.1.0",
          "kind": "minor",
          "published_at": "2025-06-03T13:36:09Z"
        },
        {
          "tag": "6.0.4",
          "kind": "patch",
          "published_at": "2025-05-30T21:10:07Z"
        },
        {
          "tag": "6.0.3",
          "kind": "patch",
          "published_at": "2025-05-28T18:07:17Z"
        },
        {
          "tag": "6.0.2",
          "kind": "patch",
          "published_at": "2025-05-22T15:37:38Z"
        },
        {
          "tag": "6.0.1",
          "kind": "patch",
          "published_at": "2025-05-21T20:15:49Z"
        },
        {
          "tag": "5.13.7",
          "kind": "patch",
          "published_at": "2025-05-13T21:16:15Z"
        },
        {
          "tag": "5.13.6",
          "kind": "patch",
          "published_at": "2025-05-13T18:34:37Z"
        },
        {
          "tag": "5.13.4",
          "kind": "patch",
          "published_at": "2025-05-07T19:49:58Z"
        },
        {
          "tag": "5.13.3",
          "kind": "patch",
          "published_at": "2025-05-06T09:36:14Z"
        },
        {
          "tag": "5.13.2",
          "kind": "patch",
          "published_at": "2025-05-05T19:33:46Z"
        },
        {
          "tag": "5.13.1",
          "kind": "patch",
          "published_at": "2025-05-05T14:48:23Z"
        },
        {
          "tag": "5.13.0",
          "kind": "minor",
          "published_at": "2025-04-30T16:47:03Z"
        },
        {
          "tag": "5.12.10",
          "kind": "patch",
          "published_at": "2025-04-29T21:19:43Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "e0637d0e92a7316ea013fdc2ba41fc69978ee8e1",
          "body": "…m (ENT-12073) (#2660)\n\nSoft-deleted groups remained in the database and collided with the\nunique_together constraint on (name, enterprise_customer), blocking\ncustomers from reusing a deleted group's name even though the group\nwas not visible in the admin. Groups are now hard deleted, relying on\nexi\n[…]\no clears out any legacy soft-deleted row for the same\nname/customer so pre-existing zombie rows don't block re-creation.\n\nCo-authored-by: sjasti-sonata-svg <sjasti-sonata-svg@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: hard delete EnterpriseGroup records instead of soft deleting the…",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-07-22T17:35:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9f7a843ae5d7f2cfbd890dd4ccf1f60b91cce60f",
          "body": "Updated boilerplate sections to match current conventions in\nedx/ai-devtools-internal docs/templates/.",
          "is_bot": false,
          "headline": "chore: sync AI instruction files from enterprise template",
          "author_name": "Alexander Dusenbery",
          "author_login": "iloveagent57",
          "committed_at": "2026-07-21T16:39:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a082ac9a9da28b883069ca14004921dd2671586",
          "body": null,
          "is_bot": false,
          "headline": "chore: Upgrade Python requirements (#2658)",
          "author_name": "edX requirements bot",
          "author_login": "edx-requirements-bot",
          "committed_at": "2026-07-20T22:03:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81f138099fa8f019e50f9f6bad341129a754f670",
          "body": "…tainer-name\n\ntest: parameterize the name of the test container",
          "is_bot": false,
          "headline": "Merge pull request #2657 from openedx/pwnage101/parameterize-test-con…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-07-16T19:53:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e07f0fef4b9adac5c76d3f93fed02f6821b50098",
          "body": "This supports developer environments which might contain multiple clones\nof this project.  Otherwise, running tests using the test-shell\ncontainer would break on all but one clone since they would all try to\nuse the same container but a single container can only be mounted to one\nclone.\n\nThe solution is to parameterize the name of the test container so that\nit is sensitive to the absolute path of the clone.",
          "is_bot": false,
          "headline": "test: parameterize the name of the test container",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-07-16T19:11:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cebcb293516924de35b5c74e013a08d2115f09d5",
          "body": "…ints\n\ntest: remove common constraints from requirements",
          "is_bot": false,
          "headline": "Merge pull request #2656 from openedx/pwnage101/remove-common-constra…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-07-16T19:09:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8de1f8ff621bd705528173b823810a6198e2910",
          "body": "Using common constraints from edx-lint was always redundant with using a\nsnapshot of platform requirements.  It finally came to a head recently\nbecause platform diverged from common constraints, causing\nedx-enterprise requirements to start failing on conflicting package\nversions.\n\nThe solution is to simply stop using common constraints, it was never\nneeded.",
          "is_bot": false,
          "headline": "test: remove common constraints from requirements",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-07-16T18:48:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f67c5ba91773017a9ae89a736f5dfb8cdaab0453",
          "body": "… mode checkout (#2556)\n\nCo-authored-by: Kira Miller <31229189+kiram15@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add CalculateEnterpriseDiscountedPrice pipeline step for course…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-07-16T15:43:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f9c4504e29f429505a7a8d5e45c774e24bb2d9d",
          "body": "Co-authored-by: sjasti-sonata-svg <sjasti-sonata-svg@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add toggle to enable people management (ENT-12049) (#2655)",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-07-16T14:35:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b6e4ffc3bffcc7ead13763206105950c507093b",
          "body": "…kup (#2554)\n\n* feat: add pluggable override for learner home enterprise customer lookup\n\nENT-11571\n\n* chore: quality fixes\n\n* docs: OVERRIDE_LEARNER_HOME_GET_ENTERPRISE_CUSTOMER TODO\n\n* chore: bump version\n\n* docs: Add type contract for get_enterprise_customer\n\n* chore: remove prev_fn fallback\n\n* c\n[…]\nNTERPRISE_CUSTOMER in settings\n\n* test: Remove unneeded _call\n\n* test: Organize patching mocked methods\n\n* chore: fix import issues\n\n---------\n\nCo-authored-by: Marlon Keating <mkeating@2u.com>, Claude",
          "is_bot": false,
          "headline": "feat: add pluggable override for learner home enterprise customer loo…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-07-15T14:16:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "681a2c71f9f98d8dd30613cdb597f92233e933d6",
          "body": "Bumps [actions/cache](https://github.com/actions/cache) from 4.3.0 to 6.1.0.\n- [Release notes](https://github.com/actions/cache/releases)\n- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)\n- [Commits](https://github.com/actions/cache/compare/0057852bfaa89a56745cba8c7296529d2fc3983\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/cache from 4.3.0 to 6.1.0 (#2490)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T18:39:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ab7f062e74d1fd12a3ff316556c4243bf342f187",
          "body": "Bumps [actions/setup-node](https://github.com/actions/setup-node) from 2.5.2 to 6.4.0.\n- [Release notes](https://github.com/actions/setup-node/releases)\n- [Commits](https://github.com/actions/setup-node/compare/v2.5.2...48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e)\n\n---\nupdated-dependencies:\n- dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/setup-node from 2.5.2 to 6.4.0 (#2471)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T18:39:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aab00b1a1adde2ce7171c269906264661b234016",
          "body": "Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5.6.0 to 6.3.0.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5.6.0...ece7cb06caefa5fff74198d8649806c4678c61a1)\n\n---\nupdated-dependencies:\n- d\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/setup-python from 5.6.0 to 6.3.0 (#2455)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T18:38:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d27880ea4844d0f672f265052129fa9b9ea30136",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4.3.1 to 7.0.0.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4.3.1...9c091bb21b7c1c\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/checkout from 4.3.1 to 7.0.0 (#2482)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T16:06:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a045f9ce4beab8a1354eaccac0d889d8e4b23239",
          "body": "…nrollmentStarted filter (#2553)\n\nCo-authored-by: Kira Miller <31229189+kiram15@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add EnterpriseEnrollmentViewProcessor pipeline step for CourseE…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-07-09T20:52:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ed796e7fafd486f888c015b11b12e85f4ac0537",
          "body": "Adds USE_ALGOLIA_INDEX_V2 WaffleFlag (default False) to toggles.py and\nexposes it as use_algolia_index_v2 in the enterprise_features() response.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add enterprise.use_algolia_index_v2 waffle flag",
          "author_name": "Alexander Dusenbery",
          "author_login": "iloveagent57",
          "committed_at": "2026-06-30T15:44:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f1190599cdbc5b850a2c57437f944f28cec4bdd2",
          "body": "* feat: add DiscountEligibilityStep pipeline step\n\nAdds enterprise/filters/discounts.py with a DiscountEligibilityStep\nPipelineStep implementation that marks enterprise learners as ineligible\nfor LMS-controlled course discounts, using the new\nDiscountEligibilityCheckRequested openedx-filter.\n\nENT-11\n[…]\nmove unneeded mocks\n\n* chore: update openedx-filters to 3.7.0\n\n* chore: isort fix\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>\nCo-authored-by: Marlon Keating <mkeating@2u.com>",
          "is_bot": false,
          "headline": "feat: add DiscountEligibilityStep pipeline step (#2545)",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-26T16:07:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a5790cabf9ab7e9ae19aefc095f765c5eff6b92f",
          "body": "fix: change enable_credit_and_industry_pathways default to true",
          "is_bot": false,
          "headline": "Merge pull request #2644 from ssrijaindukuri-sonata/isrija/ENT-11897-new",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-23T19:40:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "282dfe5f332dc15cc25dffa61dec0a5bd587032f",
          "body": null,
          "is_bot": false,
          "headline": "fix: change enable_credit_and_industry_pathways default to true",
          "author_name": "Srija Indukuri",
          "author_login": "ssrijaindukuri-sonata",
          "committed_at": "2026-06-23T11:09:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f23b5bdbb32441c0ed5fa11a45f483d70627ac6a",
          "body": "refactor: reorganize helper functions into model-dependent and model-independent to break an import cycle",
          "is_bot": false,
          "headline": "Merge pull request #2645 from openedx/pwnage101/ENT-11544-2",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-22T18:54:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a775c9a6d9676ad4628f2f25675fd4c6ec54e8e",
          "body": "…independent to break an import cycle\n\nENT-11544",
          "is_bot": false,
          "headline": "refactor: reorganize helper functions into model-dependent and model-…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-22T18:53:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "119af87228908a0cb029dd79babee9f9ef17379f",
          "body": "feat: add several courseware access related pipeline steps",
          "is_bot": false,
          "headline": "Merge pull request #2548 from openedx/pwnage101/ENT-11544",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-17T19:01:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5047687bd48aadba0c4049db70f34b187d3b6399",
          "body": "This commit replaces most enterprise-specific logic serving the purpose\nof conditionally blocking courseware access.\n\nEnterprise steps added:\n- EnterpriseStartDateAccessFailureStep supplies an enterprise-specific start-date error for enterprise learners.\n- ActiveEnterpriseCheckStep denies access whe\n[…]\nd:\n- DataSharingConsentRedirectStep supplies a redirect URL to collect data sharing consent when it is required.\n- DataSharingConsentCourseAccessStep denies access when consent is required.\n\nENT-11544",
          "is_bot": false,
          "headline": "feat: add courseware-access pipeline steps",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-17T18:45:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2ecc601e1f44107de22dc09a2ece60535c2f0713",
          "body": "…omer model (#2642)",
          "is_bot": false,
          "headline": "feat: add enable_credit_and_industry_pathways field to EnterpriseCust…",
          "author_name": "Srija Indukuri",
          "author_login": "ssrijaindukuri-sonata",
          "committed_at": "2026-06-16T14:04:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38219d3c692a3692ec3cf06671e97f3b3019176f",
          "body": "…-2026-06-12\n\nchore: change the cron schedule to run on friday instead of monday",
          "is_bot": false,
          "headline": "Merge pull request #2640 from openedx/chore/patch-python-requirements…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-15T22:54:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2de3b5817dc61cb824efa8866a09b008f8584193",
          "body": null,
          "is_bot": false,
          "headline": "chore: change the cron schedule to run on friday instead of monday",
          "author_name": "Kira Miller",
          "author_login": "kiram15",
          "committed_at": "2026-06-15T22:53:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15fb69dd5750c58889fda5e04fd20fc5445b7e8d",
          "body": null,
          "is_bot": false,
          "headline": "fix: downgrade notification banner log level (#2639)",
          "author_name": "Brian Citro",
          "author_login": "bcitro",
          "committed_at": "2026-06-15T16:49:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fae82b5d498ab3e8a272ee0c578928f2e10dfe41",
          "body": "Co-authored-by: Kira Miller <31229189+kiram15@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore: Upgrade Python requirements (#2636)",
          "author_name": "edX requirements bot",
          "author_login": "edx-requirements-bot",
          "committed_at": "2026-06-11T21:29:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a32f6efeb593d1758af6473045c586807a39824",
          "body": "…ed-devstack\n\ntest: refactor the seed_enterprise_devstack_data command to be more composable",
          "is_bot": false,
          "headline": "Merge pull request #2637 from openedx/pwnage101/ENT-11544-refactor-se…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-11T00:19:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "afa23d3f9ecea7e0518700b99d87d875f7d35cd2",
          "body": "…omposable\n\nThe essential logic of this old management command was migrated into a\ncentral `devstack_api.py` library, then that library used to compose two\nnew management commands:\n\n- create_enterprise_linked_learner\n- enroll_enterprise_learner\n\nIn turn, all three enterprise management commands were\n[…]\nst-ENT-11544.sh` which is the master\nprovision script for integration testing ENT-11544, but also serves as\na demonstration of the power of composing these new management commands\ntogether.\n\nENT-11544",
          "is_bot": false,
          "headline": "test: refactor the seed_enterprise_devstack_data command to be more c…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-11T00:04:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "64975913b9e7aacd76f27705131c7a33a82e2d40",
          "body": "This was motivated due to a bug in an older version of\ncodecov/codecov-action which breaks GPG signature validation, but I went\nahead and just refreshed all of them for good measure.",
          "is_bot": false,
          "headline": "chore: upgrade all github actions in CI.",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-06-10T23:45:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d1a15fbf616f94fcc9372e562528525cbcba2182",
          "body": "…mes as ISO-8601 (#2635)",
          "is_bot": false,
          "headline": "fix: format integration and SSO configuration created/modified dateti…",
          "author_name": "Brian Citro",
          "author_login": "bcitro",
          "committed_at": "2026-06-08T15:15:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67cbfdf47acd6a33deb400bbea1eb47812dc4f4d",
          "body": null,
          "is_bot": false,
          "headline": "feat: Removing the feature flag able to learner and admin tab",
          "author_name": "rgopalrao-sonata-png",
          "author_login": "rgopalrao-sonata-png",
          "committed_at": "2026-06-03T13:48:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0113e45b683a5c72efa2e17a482806159029b6d7",
          "body": "chore: pin GitHub Actions workflows to full commit SHAs",
          "is_bot": false,
          "headline": "Merge pull request #2621 from irfanuddinahmad/pin-actions-to-sha",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-05-31T19:05:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9fc0e55621ccd0f23ff32a60afd3691fe67c5f81",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' into pin-actions-to-sha",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-05-30T15:14:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68e111ca4e3e40dd1833bd495019973c818f3cec",
          "body": "Updated boilerplate sections to match current conventions in\nedx/ai-devtools-internal docs/templates/.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore: sync AI instruction files from enterprise template",
          "author_name": "Alexander Dusenbery",
          "author_login": "iloveagent57",
          "committed_at": "2026-05-26T20:12:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "68d471e1418df71be87e7ee72735668524b917c7",
          "body": "… (#2543)\n\nCo-authored-by: Kira Miller <31229189+kiram15@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add GradeEventContextEnricher pipeline step for grade analytics…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-20T16:55:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc859ee71b76c7ee37277f8c96ba61572bd9c5fd",
          "body": null,
          "is_bot": false,
          "headline": "chore: pin GitHub Actions workflows to full commit SHAs",
          "author_name": "irfanuddinahmad",
          "author_login": "irfanuddinahmad",
          "committed_at": "2026-05-19T04:42:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2216a75a359249f51a6481ee8878c9a0f1a5acc6",
          "body": "feat: Add basic logging for all enterprise filter pipeline steps",
          "is_bot": false,
          "headline": "Merge pull request #2619 from openedx/pwnage101/ENT-11830-2",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-15T16:55:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5cc15dfde87103f31e9c7008306df8a04a49f99",
          "body": "This will help tremendously for stage/prod testing.\n\nENT-11830",
          "is_bot": false,
          "headline": "feat: Add basic logging for all enterprise filter pipeline steps",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-14T23:34:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ff87613b5478a953acabd572758ebd5e5457089",
          "body": "feat: own OPEN_EDX_FILTERS_CONFIG injection",
          "is_bot": false,
          "headline": "Merge pull request #2617 from openedx/pwnage101/ENT-11830",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-14T23:08:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1d293dea6de2a3e153d7ed8bb522f7fb8a5d6e2",
          "body": "ENT-11830",
          "is_bot": false,
          "headline": "chore: update the read_only_fields pipeline to NOT fail silently.",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-14T23:07:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce2d4d202a04f5d41b6b48dfa9ad3b9ea65a752c",
          "body": "… plugin_settings\n\nENT-11830",
          "is_bot": false,
          "headline": "feat: own OPEN_EDX_FILTERS_CONFIG injection in enterprise and consent…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-14T23:07:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f44f6614bbafeb06b0d129ebf1dacc1bc710420",
          "body": "fix: dashboard filter step now obtains the request via crum instead of filter context",
          "is_bot": false,
          "headline": "Merge pull request #2618 from openedx/pwnage101/ENT-11569-2",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-14T16:45:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6cefa461e18bb8850a0973bfa796960ba22c81fe",
          "body": "…f filter context\n\nIt was always bogus to expect the request to be in the context object\nbecause it was never in there to begin with, and nothing changed to add\nit in there.  It would be weird to put the request in there anyway, so\njust use crum instead.\n\nENT-11569",
          "is_bot": false,
          "headline": "fix: dashboard filter step now obtains the request via crum instead o…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-13T23:59:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "306ca8ab665f811efa5e877891fbfcebc55e17a2",
          "body": "…file data (ENT-11811) (#2614)",
          "is_bot": false,
          "headline": "fix(admin-members): display blank name for pending invite without pro…",
          "author_name": "rgopalrao-sonata-png",
          "author_login": "rgopalrao-sonata-png",
          "committed_at": "2026-05-13T12:13:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ebd27317668a5d3ebb1815a77532787cc2c0c51",
          "body": "…ourses in admin enrollment viewset (#2608)",
          "is_bot": false,
          "headline": "feat: account for data sharing consent settings and mark unenrolled c…",
          "author_name": "Brian Citro",
          "author_login": "bcitro",
          "committed_at": "2026-05-11T19:41:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0132d9ab1e0d14becb9eec892214859b9d6c24cf",
          "body": null,
          "is_bot": false,
          "headline": "chore: Upgrade Python requirements (#2616)",
          "author_name": "edX requirements bot",
          "author_login": "edx-requirements-bot",
          "committed_at": "2026-05-11T15:20:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c347e1678c590c943804ab57f2115822c450faf1",
          "body": "* chore: Upgrade Python requirements\n\n* fix: catch new UnsupportedAlgorithm exception for cryptography 47.0.0\n\n---------\n\nCo-authored-by: Marlon Keating <mkeating@2u.com>",
          "is_bot": false,
          "headline": "chore: Upgrade Python requirements (#2607)",
          "author_name": "edX requirements bot",
          "author_login": "edx-requirements-bot",
          "committed_at": "2026-05-11T13:44:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ff6cbf31708836392ce8b9c58d6a686cff0d1b2",
          "body": "Active admins now resolve name via auth_userprofile.name (the canonical\nedX full-name field) before falling back to first_name and username, so\nthe column shows a real name instead of being blank for users whose\nauth_user.first_name is empty.\n\nPending admins previously returned name=None because the\n[…]\nhe two production-only branches are\nmarked # pragma: no cover to match the codebase's convention for code\npaths that only run when student is installed.\n\nBumps version to 8.0.9 with a changelog entry.",
          "is_bot": false,
          "headline": "fix: populate name in Invite Admin list view (ENT-11811)",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-05-07T14:17:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e26c2507fc95fdd6f532e05f41d7bf411aed2c90",
          "body": "feat: extra logging for enterprise email association pipeline step",
          "is_bot": false,
          "headline": "Merge pull request #2612 from openedx/pwnage101/ENT-11566-4",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-06T21:09:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a20f3f0cd93ecadae0806beb965fe4e95fdd109",
          "body": "ENT-11566",
          "is_bot": false,
          "headline": "feat: extra logging for enterprise email association pipeline step",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-06T21:08:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d84844fd07823559721556e091211e5ff9ec3ec7",
          "body": "…ation (#2555)\n\n* feat: add pluggable override for course home progress username obfuscation\n\nENT-11572\n\n* fix: pylint disable formatting\n\n* chore: isort fix\n\n* chore: bump version\n\n* chore: address pr comments\n\n* test: add coverage\n\n* test: bring override in line with team conventions\n\n* chore: fix pylint issues\n\n---------\n\nCo-authored-by: Marlon Keating <mkeating@2u.com>",
          "is_bot": false,
          "headline": "feat: add pluggable override for course home progress username obfusc…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-06T21:02:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "585472a7aaf3a804d0d7dfe60d9fd0df9233e66a",
          "body": "fix: gate plugin_settings on ENABLE_ENTERPRISE_INTEGRATION",
          "is_bot": false,
          "headline": "Merge pull request #2610 from openedx/pwnage101/ENT-11566-2",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-06T02:04:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c0c0b0b05e5f5eb45e27260da105b6068e4fede",
          "body": "The main behavior change:\n- Skip social auth pipeline injection when enterprise integration\n  is disabled.\n  - This fixes a broken CMS test in the edxapp which expects NO\n    enterprise steps in the social auth pipeline.\n\nOther changes rolled into this commit to simplify testing and prep for\nmaking \n[…]\nlugins()) to prevent future duplication of test settings\n  once we migrate enterprise-specific settings into this repo.\n\nENT-11566\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: gate plugin_settings on ENABLE_ENTERPRISE_INTEGRATION",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-06T01:40:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6d917c555ffc9e6a69e40f8a779877c9d70b73b0",
          "body": "feat: add TPA pipeline step and signal handler for enterprise",
          "is_bot": false,
          "headline": "Merge pull request #2549 from openedx/pwnage101/ENT-11566",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-05T21:28:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2201424404210c9292510385f2594e405ae11d64",
          "body": "John Nagro originally leveraged Keycloak to provide an identity provider\nfor testing SAML-based third party auth (TPA) in edx devstack, but it\nwas not broadly usable because it lacked scripts for keycloak\nprovisioning, LMS TPA provisioning, and other necessary scaffolding to\ntie it all together.\n\nENT-11566",
          "is_bot": false,
          "headline": "test: Enhance and formalize keycloak-powered local IdP capabilities",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-05T16:53:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa4c066028545bf200f7ed588b25e8d85e4b8d41",
          "body": "- Add enterprise_associate_by_email pipeline step, replacing the removed pipeline step from platform.\n- Add signal handler to unlink enterprise users from an IdP (signal: SAMLAccountDisconnected)\n- Inject all enterprise-specific TPA pipeline steps via plugin_settings.\n\nENT-11566\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add TPA pipeline step and social auth disconnect handler",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-05-05T16:53:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ad3528ef3e49e2b37bcbceae2883b5c0d4fc9e8d",
          "body": "Documents the operator permission expansion from the previous commit.",
          "is_bot": false,
          "headline": "chore: bump version to 8.0.4 and add changelog entry",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-05-05T13:37:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b481f82158797484375798bb89bf0501d58aaef7",
          "body": "ENT-11806: extend the MANAGE_ENTERPRISE_CUSTOMER_ADMINS_PERMISSION rule\nto also recognize the enterprise_openedx_operator system role from the\nJWT, so operators can invite and delete enterprise admins alongside the\nexisting provisioning and enterprise_admin roles.",
          "is_bot": false,
          "headline": "feat: grant enterprise_openedx_operator the manage admins permission",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-05-05T13:37:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aeb1da0197e8a242ada8259d70cb1bb942e9d175",
          "body": "* fix: remove consent_required_courses and associated code\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n* chore: version bump\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: remove consent_required_courses and associated code (#2606)",
          "author_name": "Kira Miller",
          "author_login": "kiram15",
          "committed_at": "2026-04-30T23:21:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9c131267a1e6d8533a60e7c0521bfb325cdc4257",
          "body": null,
          "is_bot": false,
          "headline": "feat: add ai pathways operator waffle flag (#2605)",
          "author_name": "Hamzah Ullah",
          "author_login": "brobro10000",
          "committed_at": "2026-04-29T16:00:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da9aa23a03d0c52ead1362bc4044fa4ef501f893",
          "body": "…d filter (#2552)\n\nCo-authored-by: Kira Miller <31229189+kiram15@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add DashboardContextEnricher pipeline step for student dashboar…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-04-27T15:22:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3ec86d10a8d6de171d83f5f9bf1636fb866d015",
          "body": "…nector\n\nfeat!: Drop management commands that depend on the snowflake connector",
          "is_bot": false,
          "headline": "Merge pull request #2476 from openedx/feanil/drop_python_snoflake_con…",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-27T13:47:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99365ea08bc594300b109c5a4007cbb99bdca10c",
          "body": null,
          "is_bot": false,
          "headline": "docs: Bump version and add CHANGELOG entry.",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-24T16:28:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "879512e8ba99406c7feb0ac2b1e90694cd531fa8",
          "body": null,
          "is_bot": false,
          "headline": "chore: Run `make upgrade`",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-24T16:11:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8fbc2004bfd3e8f80c997a74b9556be15d135c6",
          "body": null,
          "is_bot": false,
          "headline": "build: Drop the snowflake-connector-python dependency.",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-24T16:11:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19ba40a7db1191b966db95e0d0d48d0eb2a068e4",
          "body": "This work is a part of https://github.com/openedx/edx-enterprise/issues/2467\n\nBREAKING CHANGE: The monthly_impact_report and nudge_dormant_enrolled_enterprise_learners\nmanagement commands will no longer be available here. If you need these\ncommands, you can copy them to a plugin that is not required to be\ninstalled in the edx-platform",
          "is_bot": false,
          "headline": "feat!: Drop management commands that depend on the snowflake connector",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-24T16:11:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9247f0ebb6a9047c52cc8d6694629b99e417235b",
          "body": null,
          "is_bot": false,
          "headline": "fix: update social media links for email compatibility (#2602)",
          "author_name": "Hamzah Ullah",
          "author_login": "brobro10000",
          "committed_at": "2026-04-24T15:43:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "501205224e47821098c4e69e1db869a34d4aab26",
          "body": "fix: block SSRF in SAML metadata URL fetching (GHSA-64cv-vxpr-j6vc)",
          "is_bot": false,
          "headline": "Merge commit from fork",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-24T14:20:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "735668602d6da041fcdfb0db29d6eebc5120065d",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump version to 7.0.6 and update changelog",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-24T14:19:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a22ee74e1aefc2fd403b472ab4ec5ef261edb3ab",
          "body": "Adds `validate_saml_metadata_url()` and `SAMLMetadataURLError` to\nsaml_utils.py. Enforces HTTPS and blocks loopback, link-local (including\ncloud metadata endpoints like 169.254.169.254), and reserved IP addresses.\nRFC 1918 private ranges are blocked by default and can be opted out via\n`SAML_METADATA\n[…]\natform venv and does not depend on it directly.\n\nAddresses: https://github.com/openedx/edx-enterprise/security/advisories/GHSA-64cv-vxpr-j6vc\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: block SSRF in SAML metadata URL fetching (GHSA-64cv-vxpr-j6vc)",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-24T14:18:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6b422d0ff61f80f11a783adf3c02a4e4fc53fb29",
          "body": null,
          "is_bot": false,
          "headline": "fix: Rolebased access for customer admin",
          "author_name": "rgopalrao-sonata-png",
          "author_login": "rgopalrao-sonata-png",
          "committed_at": "2026-04-24T13:56:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "daa14a2588777132798d8aba2e6bdaf05a850a41",
          "body": null,
          "is_bot": false,
          "headline": "chore: Upgrade Python requirements (#2600)",
          "author_name": "edX requirements bot",
          "author_login": "edx-requirements-bot",
          "committed_at": "2026-04-20T16:19:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79fb87cf493d82a6f702a2110ad5500b55d108d4",
          "body": "fix: [SAML Views] Accept an \"enterprise_customer_uuid\" query param (instead of \"enterprise-id\")",
          "is_bot": false,
          "headline": "Merge pull request #2598 from openedx/pwnage101/ENT-11567-hotfix1",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-04-15T21:43:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9280147c4f904261e27c333f9a23b6ad534bc277",
          "body": "…nstead of \"enterprise-id\")\n\nSAML views should accept \"enterprise_customer_uuid\", not \"enterprise-id\".\n\nThere was a typo in the original docstring which claimed the correct\nparam name was \"enterprise-id\" which was over-indexed by Claude Code as\na source of truth, causing it to recommend a behavior c\n[…]\ning myself and over-indexed on it.\n\nThe original docstring typo: https://github.com/openedx/openedx-platform/blob/01dc3c84/common/djangoapps/third_party_auth/samlproviderconfig/views.py#L33\n\nENT-11567",
          "is_bot": false,
          "headline": "fix: [SAML Views] Accept an \"enterprise_customer_uuid\" query param (i…",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-04-15T21:12:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e0ed1cd8ff4ec5f21668adfb417b9d09918509a",
          "body": "…220)\n\nFollow-up to #2594. The model default for enable_academies was changed\nfrom False to True in that PR, but no corresponding migration was\ngenerated. This adds the AlterField migration that Django's\nmakemigrations produces for that change.",
          "is_bot": false,
          "headline": "feat: add migration for enable_academies default value change (ENT-11…",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-04-15T15:07:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7704577d2765dd52260928b3d8d6440687fd5aea",
          "body": null,
          "is_bot": false,
          "headline": "feat: add changelog entry",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-04-14T13:13:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05389de57acf3863ba75924023f670e1e333a4d5",
          "body": "…earch (ENT-11220)",
          "is_bot": false,
          "headline": "feat: enable academies by default for all enterprise customers with s…",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-04-14T13:13:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35a295f4faaa96238e636c7ee8b8085efda53817",
          "body": "feat: add SAML provider admin viewsets to enterprise API",
          "is_bot": false,
          "headline": "Merge pull request #2550 from openedx/pwnage101/ENT-11567",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-04-14T00:25:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f07994413d11b294328e71150c1b558f277310ce",
          "body": "- Push provider_id filtering into database via current_set().filter()\n  instead of iterating all configs in Python.\n- Scope SAMLProviderData detail lookups by entity_id to prevent\n  cross-enterprise data access by guessing IDs.\n\nENT-11567\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: use database-side filtering and enterprise-scoped detail queries",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-04-14T00:06:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2fd6aa8cb7bc327663cf081433419253729e7475",
          "body": "- Add SAMLProviderConfigViewSet and SAMLProviderDataViewSet to the\n  enterprise API with permission checks and comprehensive tests.\n- Add get_saml_identity_provider and get_identity_providers utility\n  views for enterprise SAML operations.\n- Migrate SAML utility functions (get_saml_provider_data_by_\n[…]\n get_saml_provider_configuration) from third_party_auth to enterprise,\n  with comprehensive tests using django-mock-queries MockSet.\n\nENT-11567\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add SAML provider admin API and migrate SAML utilities",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-04-08T20:58:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b9cb84090f69ffc95f6c39efc84782a4f43033fe",
          "body": "chore: drop Python 3.11 support",
          "is_bot": false,
          "headline": "Merge pull request #2561 from openedx/feanil/drop_python_3.11",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-07T14:37:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a20a0a21dd20c7234aa053a75cecb6eb1c90805",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump version to 7.0.0",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-07T14:17:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9cc3926021e7c300f79f1bc682eea0ce5d8b4346",
          "body": null,
          "is_bot": false,
          "headline": "chore: update requirements for Python 3.12",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-07T14:16:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6bd79527c56d65fd30565ccb210fc5c01ab1ab86",
          "body": "Removes Python 3.11 from CI matrix, migration check workflows, publish\nworkflow, tox envlist, and setup.py classifiers.\n\nPart of https://github.com/openedx/public-engineering/issues/499",
          "is_bot": false,
          "headline": "chore: drop Python 3.11 support",
          "author_name": "Feanil Patel",
          "author_login": "feanil",
          "committed_at": "2026-04-07T14:16:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "984cf32b7459a5d84d733b8477a5ec7e525309cd",
          "body": null,
          "is_bot": false,
          "headline": "fix: add changelog entry and update init for inactive admin user fix",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-04-07T13:09:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f8689a785ce6113423dbd6b94131e6632896a80",
          "body": "- Removed auth_user.is_active=True filter from admin listing query\n  so inactive admin users appear in the admin list\n- Added EnterpriseCustomerUser.active=True and enterprise_admin role\n  check via SystemWideEnterpriseUserRoleAssignment\n- Changed hard delete to log warning instead of returning 404 when\n  admin role assignment is missing\n- Updated tests accordingly",
          "is_bot": false,
          "headline": "fix: allow deletion of inactive admin users (ENT-11714)",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-04-07T13:09:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd0c3696d0516f4b56887307a5e2418f03d4f432",
          "body": "Co-authored-by: Kira Miller <31229189+kiram15@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add AccountSettingsReadOnlyFieldsStep pipeline step (#2544)",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-04-06T17:43:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b03a0b8b1b9d467ad349349715464be790bce6d6",
          "body": null,
          "is_bot": false,
          "headline": "chore: increment version to 6.8.4",
          "author_name": "Alexander Dusenbery",
          "author_login": "iloveagent57",
          "committed_at": "2026-03-31T13:43:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2085c62d1145935420efc241123e764dec6ba685",
          "body": "- Hard-delete EnterpriseCustomerAdmin record after removing admin role\n- Remove role-based filtering from get_existing_admin_emails()\n- Update test assertions to verify ECA record is permanently deleted",
          "is_bot": false,
          "headline": "feat: implement hard delete for enterprise customer admin (ENT-11264)",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-03-31T13:37:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a53755d4effb223d9c379d22374cb51273bc5ffc",
          "body": null,
          "is_bot": false,
          "headline": "chore: Upgrade Python requirements (#2587)",
          "author_name": "edX requirements bot",
          "author_login": "edx-requirements-bot",
          "committed_at": "2026-03-30T19:07:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "369480ca7535b5a544f0d2d7e0104259b08ac9df",
          "body": "fix: Move settings reads out of AppConfig, into consumers",
          "is_bot": false,
          "headline": "Merge pull request #2586 from openedx/pwnage101/ENT-11663-3",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-03-27T17:16:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "120a621a84a9b059252a7a797117b34e1f66eede",
          "body": "There's a chance that the `enterprise.apps` module might be imported\nbefore `lms.envs.production`, which would result in the EnterpriseConfig\nAppConfig caching outdated settings. Mitigate this by forcing consumers\nof these cached settings to just read `djang.conf.settings` directly.\n\nENT-11663",
          "is_bot": false,
          "headline": "fix: Move settings reads out of AppConfig, into consumers",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-03-27T17:00:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5df55a6de743685ff0da9003d6cbae4c51ba7b4",
          "body": null,
          "is_bot": false,
          "headline": "chore: increment init.py version to 6.8.2",
          "author_name": "Alexander Dusenbery",
          "author_login": "iloveagent57",
          "committed_at": "2026-03-27T16:34:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9443dbec72774390ebefb96ee244bfb0971e5143",
          "body": "- Add reminder task with configurable delay, cadence, and max reminders\n- Add reminder_sent_at field to PendingEnterpriseCustomerAdminUser for explicit tracking\n- Add management command send_pending_admin_reminders\n- Add Braze campaign constants for reminder emails\n- Rename pending_invite to pending\n[…]\ntasks and tests\n- Consolidate tests using ddt.data parameterization\n- Fix function signature style per edx Python guidelines\n- Bump version to 6.8.1\n\nCo-authored-by: Alex Dusenbery <adusenbery@2u.com>",
          "is_bot": false,
          "headline": "feat: add admin invite reminder emails (ENT-11581) (#2573)",
          "author_name": "sjasti-sonata-svg",
          "author_login": "sjasti-sonata-svg",
          "committed_at": "2026-03-27T15:56:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eff55b39c9c03b3456ac99c8d9a50bb2c766f497",
          "body": null,
          "is_bot": false,
          "headline": "chore: Upgrade Python requirements (#2583)",
          "author_name": "edX requirements bot",
          "author_login": "edx-requirements-bot",
          "committed_at": "2026-03-27T02:28:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53f98ce59b389369f638a0cc964bda1f78a2b4bc",
          "body": "fix: also register enterprise and consent as CMS plugins",
          "is_bot": false,
          "headline": "Merge pull request #2579 from openedx/pwnage101/ENT-11663-2",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-03-26T16:46:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aee7170b253988acbfc46811ce717e78e07061b0",
          "body": "Somehow I missed testing with CMS on openedx-platform, and as a result\nthe CMS unit tests failed due to platform code which imports\n`enterprise.models` without having the enterprise app installed.  It's\nweird because CMS doesn't actually use anything from enterprise, but\nmakes sense because CMS and LMS share the same source code.\n\nENT-11663",
          "is_bot": false,
          "headline": "fix: also register enterprise and consent as CMS plugins",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-03-26T16:46:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45f60f4a7a7320a23db2d64207e26151701d6f6c",
          "body": "fix: Update outdated & broken .coveragerc syntax",
          "is_bot": false,
          "headline": "Merge pull request #2580 from openedx/pwnage101/fix-coverage-2",
          "author_name": "Troy Sankey",
          "author_login": "pwnage101",
          "committed_at": "2026-03-26T16:44:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 187,
      "latest_release_at": "2026-07-23T12:40:35Z",
      "latest_release_tag": "8.7.1",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 42,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": false,
      "has_contributing": true,
      "health_percentage": 75,
      "has_issue_template": true,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "edx-enterprise",
          "exists": true,
          "license": "AGPL-3.0-or-later",
          "keywords": [
            "Django",
            "edx",
            "Development Status :: 3 - Alpha",
            "Framework :: Django",
            "Framework :: Django :: 5.2",
            "Intended Audience :: Developers",
            "Natural Language :: English",
            "Programming Language :: Python :: 3",
            "Programming Language :: Python :: 3.12"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/edx-enterprise/",
          "is_deprecated": false,
          "latest_version": "8.7.1",
          "repository_url": "https://github.com/openedx/edx-enterprise",
          "versions_count": 1461,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2016-10-24T16:01:54.192120Z",
          "latest_published_at": "2026-07-23T12:42:25.632489Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 71,
      "stars": 50,
      "watchers": 74,
      "fork_history": {
        "days": [
          {
            "date": "2016-11-09",
            "count": 1
          },
          {
            "date": "2016-11-21",
            "count": 1
          },
          {
            "date": "2017-03-16",
            "count": 1
          },
          {
            "date": "2017-04-04",
            "count": 1
          },
          {
            "date": "2017-04-29",
            "count": 1
          },
          {
            "date": "2017-06-22",
            "count": 1
          },
          {
            "date": "2017-10-01",
            "count": 1
          },
          {
            "date": "2017-11-08",
            "count": 1
          },
          {
            "date": "2018-05-02",
            "count": 1
          },
          {
            "date": "2018-06-29",
            "count": 1
          },
          {
            "date": "2018-08-09",
            "count": 1
          },
          {
            "date": "2018-08-27",
            "count": 1
          },
          {
            "date": "2018-09-01",
            "count": 1
          },
          {
            "date": "2018-12-12",
            "count": 1
          },
          {
            "date": "2019-01-28",
            "count": 1
          },
          {
            "date": "2019-02-25",
            "count": 1
          },
          {
            "date": "2019-03-11",
            "count": 1
          },
          {
            "date": "2019-09-26",
            "count": 1
          },
          {
            "date": "2020-05-05",
            "count": 1
          },
          {
            "date": "2020-05-21",
            "count": 1
          },
          {
            "date": "2020-05-28",
            "count": 1
          },
          {
            "date": "2020-06-09",
            "count": 1
          },
          {
            "date": "2020-09-15",
            "count": 1
          },
          {
            "date": "2020-11-23",
            "count": 1
          },
          {
            "date": "2020-12-08",
            "count": 1
          },
          {
            "date": "2021-05-26",
            "count": 1
          },
          {
            "date": "2021-06-14",
            "count": 1
          },
          {
            "date": "2021-07-04",
            "count": 1
          },
          {
            "date": "2021-12-17",
            "count": 1
          },
          {
            "date": "2022-03-01",
            "count": 1
          },
          {
            "date": "2022-04-12",
            "count": 1
          },
          {
            "date": "2022-04-27",
            "count": 1
          },
          {
            "date": "2022-09-12",
            "count": 1
          },
          {
            "date": "2023-04-29",
            "count": 2
          },
          {
            "date": "2023-06-26",
            "count": 1
          },
          {
            "date": "2023-10-20",
            "count": 1
          },
          {
            "date": "2024-01-20",
            "count": 1
          },
          {
            "date": "2024-03-20",
            "count": 1
          },
          {
            "date": "2024-05-23",
            "count": 1
          },
          {
            "date": "2024-06-09",
            "count": 1
          },
          {
            "date": "2024-06-13",
            "count": 1
          },
          {
            "date": "2024-07-02",
            "count": 1
          },
          {
            "date": "2024-08-30",
            "count": 1
          },
          {
            "date": "2024-09-03",
            "count": 1
          },
          {
            "date": "2024-11-04",
            "count": 1
          },
          {
            "date": "2024-11-20",
            "count": 1
          },
          {
            "date": "2025-03-14",
            "count": 1
          },
          {
            "date": "2025-03-21",
            "count": 1
          },
          {
            "date": "2025-04-03",
            "count": 1
          },
          {
            "date": "2025-04-18",
            "count": 1
          },
          {
            "date": "2025-05-21",
            "count": 1
          },
          {
            "date": "2025-06-11",
            "count": 1
          },
          {
            "date": "2025-08-19",
            "count": 1
          },
          {
            "date": "2025-10-03",
            "count": 1
          },
          {
            "date": "2025-10-20",
            "count": 1
          },
          {
            "date": "2025-10-23",
            "count": 1
          },
          {
            "date": "2025-11-13",
            "count": 1
          },
          {
            "date": "2025-12-16",
            "count": 1
          },
          {
            "date": "2026-01-07",
            "count": 1
          },
          {
            "date": "2026-02-03",
            "count": 1
          },
          {
            "date": "2026-02-04",
            "count": 1
          },
          {
            "date": "2026-02-26",
            "count": 1
          },
          {
            "date": "2026-03-24",
            "count": 1
          },
          {
            "date": "2026-04-03",
            "count": 1
          },
          {
            "date": "2026-04-26",
            "count": 1
          },
          {
            "date": "2026-05-08",
            "count": 1
          },
          {
            "date": "2026-05-19",
            "count": 1
          },
          {
            "date": "2026-05-21",
            "count": 1
          },
          {
            "date": "2026-06-01",
            "count": 1
          },
          {
            "date": "2026-06-12",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 71,
        "total_forks": 71
      },
      "star_history": null,
      "open_issues_and_prs": 78
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "docs/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 458598,
      "source_files_sampled": 1039,
      "oversized_source_files": 13,
      "agent_instruction_files": [
        ".github/copilot-instructions.md",
        ".ralph/AGENT.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 7063
    },
    "dependencies": {
      "manifests": [
        "package.json",
        "setup.cfg",
        "setup.py"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "cipher-base",
            "direct": false,
            "version": "1.0.4",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.1,
            "advisory_ids": [
              "GHSA-cpq7-6gpm-g9rc"
            ],
            "fixed_version": "1.0.5",
            "advisory_count": 1,
            "oldest_advisory_days": 335
          },
          {
            "name": "immutable",
            "direct": false,
            "version": "4.3.7",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-v56q-mh7h-f735",
              "GHSA-wf6x-7x77-mvgw",
              "GHSA-xvcm-6775-5m9r"
            ],
            "fixed_version": "5.1.8",
            "advisory_count": 3,
            "oldest_advisory_days": 140
          },
          {
            "name": "sha.js",
            "direct": false,
            "version": "2.4.11",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.1,
            "advisory_ids": [
              "GHSA-95m3-7q98-8xr5"
            ],
            "fixed_version": "2.4.12",
            "advisory_count": 1,
            "oldest_advisory_days": 335
          },
          {
            "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": 408
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.0.1",
            "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": 408
          },
          {
            "name": "braces",
            "direct": false,
            "version": "2.3.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-grv7-fg5c-xmjg"
            ],
            "fixed_version": "3.0.3",
            "advisory_count": 1,
            "oldest_advisory_days": 799
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "5.1.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3xgq-45jj-v275"
            ],
            "fixed_version": "7.0.5",
            "advisory_count": 1,
            "oldest_advisory_days": 622
          },
          {
            "name": "elliptic",
            "direct": false,
            "version": "6.6.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.3,
            "advisory_ids": [
              "GHSA-848j-6mx2-7j84"
            ],
            "fixed_version": null,
            "advisory_count": 1,
            "oldest_advisory_days": 195
          },
          {
            "name": "is-svg",
            "direct": false,
            "version": "2.1.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-7r28-3m3f-r2pr",
              "GHSA-r8j5-h5cx-65gg"
            ],
            "fixed_version": "4.3.0",
            "advisory_count": 2,
            "oldest_advisory_days": 1951
          },
          {
            "name": "jinja2",
            "direct": false,
            "version": "2.11.3",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.8,
            "advisory_ids": [
              "GHSA-cpwx-vrp4-4pq7",
              "GHSA-h5c8-rqwp-cp95",
              "GHSA-h75v-3vvj-5mfj",
              "GHSA-q2x7-8rv6-6q7h",
              "PYSEC-2026-1471",
              "PYSEC-2026-1473",
              "PYSEC-2026-1474",
              "PYSEC-2026-1475"
            ],
            "fixed_version": "3.1.6",
            "advisory_count": 8,
            "oldest_advisory_days": 923
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "3.7.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-2pr6-76vf-7546",
              "GHSA-52cp-r559-cp3m",
              "GHSA-8j8c-7jfh-h6hx",
              "GHSA-h67p-54hq-rp68",
              "GHSA-mh29-5h37-fv8m"
            ],
            "fixed_version": "4.3.0",
            "advisory_count": 5,
            "oldest_advisory_days": 2605
          },
          {
            "name": "json5",
            "direct": false,
            "version": "0.5.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.1,
            "advisory_ids": [
              "GHSA-9c47-m6qq-7p4h"
            ],
            "fixed_version": "2.2.2",
            "advisory_count": 1,
            "oldest_advisory_days": 1302
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.17.21",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 8.1,
            "advisory_ids": [
              "GHSA-f23m-r3pf-42rh",
              "GHSA-r5fr-rjxr-66jc",
              "GHSA-xxjr-mmjv-4gpg"
            ],
            "fixed_version": "4.18.0",
            "advisory_count": 3,
            "oldest_advisory_days": 182
          },
          {
            "name": "lxml",
            "direct": false,
            "version": "5.3.2",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-vfmq-68hx-4jfw",
              "PYSEC-2026-87"
            ],
            "fixed_version": "6.1.0",
            "advisory_count": 2,
            "oldest_advisory_days": 92
          },
          {
            "name": "lxml-html-clean",
            "direct": false,
            "version": "0.4.4",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 8.2,
            "advisory_ids": [
              "GHSA-4jhm-jv67-739f",
              "PYSEC-2026-2614"
            ],
            "fixed_version": "0.4.5",
            "advisory_count": 2,
            "oldest_advisory_days": 14
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.0.8",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-23c5-xmqv-rm74",
              "GHSA-3ppc-4f35-3m26",
              "GHSA-7r86-cg39-jmmj"
            ],
            "fixed_version": "10.2.3",
            "advisory_count": 3,
            "oldest_advisory_days": 154
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-23c5-xmqv-rm74",
              "GHSA-3ppc-4f35-3m26",
              "GHSA-7r86-cg39-jmmj"
            ],
            "fixed_version": "10.2.3",
            "advisory_count": 3,
            "oldest_advisory_days": 154
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "5.1.6",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-23c5-xmqv-rm74",
              "GHSA-3ppc-4f35-3m26",
              "GHSA-7r86-cg39-jmmj"
            ],
            "fixed_version": "10.2.3",
            "advisory_count": 3,
            "oldest_advisory_days": 154
          },
          {
            "name": "nltk",
            "direct": false,
            "version": "3.9.4",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-p4gq-832x-fm9v",
              "PYSEC-2026-2078",
              "PYSEC-2026-597"
            ],
            "fixed_version": "3.10.0",
            "advisory_count": 3,
            "oldest_advisory_days": 36
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3v7f-55p6-f55p",
              "GHSA-c2c7-rcm5-vvqj"
            ],
            "fixed_version": "4.0.4",
            "advisory_count": 2,
            "oldest_advisory_days": 119
          },
          {
            "name": "pyasn1",
            "direct": false,
            "version": "0.6.3",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-8ppf-4f7h-5ppj",
              "GHSA-hm4w-wwcw-mr6r",
              "PYSEC-2026-3455",
              "PYSEC-2026-3456",
              "PYSEC-2026-3457"
            ],
            "fixed_version": "0.6.4",
            "advisory_count": 5,
            "oldest_advisory_days": 8
          },
          {
            "name": "tmp",
            "direct": false,
            "version": "0.0.33",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-52f5-9888-hmc6",
              "GHSA-ph9p-34f9-6g65"
            ],
            "fixed_version": "0.2.6",
            "advisory_count": 2,
            "oldest_advisory_days": 350
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "9.0.1",
            "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": 91
          },
          {
            "name": "@babel/runtime",
            "direct": false,
            "version": "7.25.6",
            "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": 498
          },
          {
            "name": "@babel/runtime-corejs3",
            "direct": false,
            "version": "7.25.6",
            "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": 498
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "5.5.2",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.6,
            "advisory_ids": [
              "GHSA-2g4f-4pwh-qvx6",
              "GHSA-v88g-cgmw-v5xw"
            ],
            "fixed_version": "8.18.0",
            "advisory_count": 2,
            "oldest_advisory_days": 1623
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "6.12.6",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-2g4f-4pwh-qvx6"
            ],
            "fixed_version": "8.18.0",
            "advisory_count": 1,
            "oldest_advisory_days": 161
          },
          {
            "name": "bn.js",
            "direct": false,
            "version": "4.12.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-378v-28hj-76wf"
            ],
            "fixed_version": "5.2.3",
            "advisory_count": 1,
            "oldest_advisory_days": 153
          },
          {
            "name": "bn.js",
            "direct": false,
            "version": "5.2.1",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-378v-28hj-76wf"
            ],
            "fixed_version": "5.2.3",
            "advisory_count": 1,
            "oldest_advisory_days": 153
          },
          {
            "name": "color-string",
            "direct": false,
            "version": "0.3.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-257v-vj4p-3w2h"
            ],
            "fixed_version": "1.5.5",
            "advisory_count": 1,
            "oldest_advisory_days": 1857
          },
          {
            "name": "jquery",
            "direct": false,
            "version": "2.2.4",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.9,
            "advisory_ids": [
              "GHSA-6c3j-c64m-qhgq",
              "GHSA-gxr4-xjj5-5px2",
              "GHSA-jpcq-cgw6-v4j6",
              "GHSA-rmxg-73gg-4p98"
            ],
            "fixed_version": "4.4.0",
            "advisory_count": 4,
            "oldest_advisory_days": 3103
          },
          {
            "name": "mem",
            "direct": false,
            "version": "1.1.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.1,
            "advisory_ids": [
              "GHSA-4xcv-9jjx-gfj3"
            ],
            "fixed_version": "4.0.0",
            "advisory_count": 1,
            "oldest_advisory_days": 2574
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "3.1.10",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-952p-6rrq-rcjv"
            ],
            "fixed_version": "4.0.8",
            "advisory_count": 1,
            "oldest_advisory_days": 799
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "5.2.18",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.1,
            "advisory_ids": [
              "GHSA-566m-qj78-rww5",
              "GHSA-7fh5-64p2-3v2j",
              "GHSA-qx2v-qp2m-jg93"
            ],
            "fixed_version": "8.5.10",
            "advisory_count": 3,
            "oldest_advisory_days": 1658
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "6.0.23",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.1,
            "advisory_ids": [
              "GHSA-566m-qj78-rww5",
              "GHSA-7fh5-64p2-3v2j",
              "GHSA-qx2v-qp2m-jg93"
            ],
            "fixed_version": "8.5.10",
            "advisory_count": 3,
            "oldest_advisory_days": 1658
          },
          {
            "name": "pymongo",
            "direct": false,
            "version": "4.4.0",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 4.7,
            "advisory_ids": [
              "GHSA-m87m-mmvp-v9qm",
              "PYSEC-2026-1826"
            ],
            "fixed_version": "4.6.3",
            "advisory_count": 2,
            "oldest_advisory_days": 777
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.14.1",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-q8mj-m7cp-5q26",
              "GHSA-w7fw-mjwx-w883"
            ],
            "fixed_version": "6.15.2",
            "advisory_count": 2,
            "oldest_advisory_days": 160
          },
          {
            "name": "social-auth-app-django",
            "direct": false,
            "version": "5.4.1",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 4.8,
            "advisory_ids": [
              "GHSA-wv4w-6qv2-qqfg",
              "PYSEC-2026-1932"
            ],
            "fixed_version": "5.6.0",
            "advisory_count": 2,
            "oldest_advisory_days": 286
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "7.0.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-p9pc-299p-vxgp"
            ],
            "fixed_version": "18.1.1",
            "advisory_count": 1,
            "oldest_advisory_days": 2147
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 20,
          "critical": 3,
          "moderate": 16
        },
        "advisory_count": 86,
        "affected_count": 39,
        "assessed_count": 1041,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 50,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm",
        "pypi"
      ],
      "dependencies": [
        {
          "name": "@edx/brand",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "npm:@edx/brand-edx.org@^1.3.0"
        },
        {
          "name": "@openedx/paragon",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^21.5.7"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@openedx/paragon",
            "direct": true,
            "version": "21.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/runtime",
            "direct": false,
            "version": "7.25.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/runtime-corejs3",
            "direct": false,
            "version": "7.25.6",
            "ecosystem": "npm"
          },
          {
            "name": "@edx/brand-edx.org",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/ecma402-abstract",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/fast-memoize",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/icu-messageformat-parser",
            "direct": false,
            "version": "2.7.8",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/icu-skeleton-parser",
            "direct": false,
            "version": "1.8.2",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/intl",
            "direct": false,
            "version": "2.10.4",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/intl-displaynames",
            "direct": false,
            "version": "6.6.8",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/intl-listformat",
            "direct": false,
            "version": "7.5.7",
            "ecosystem": "npm"
          },
          {
            "name": "@formatjs/intl-localematcher",
            "direct": false,
            "version": "0.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "@fortawesome/fontawesome-common-types",
            "direct": false,
            "version": "6.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fortawesome/fontawesome-svg-core",
            "direct": false,
            "version": "6.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@fortawesome/react-fontawesome",
            "direct": false,
            "version": "0.1.19",
            "ecosystem": "npm"
          },
          {
            "name": "@popperjs/core",
            "direct": false,
            "version": "2.11.8",
            "ecosystem": "npm"
          },
          {
            "name": "@restart/context",
            "direct": false,
            "version": "2.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@restart/hooks",
            "direct": false,
            "version": "0.4.16",
            "ecosystem": "npm"
          },
          {
            "name": "@types/hoist-non-react-statics",
            "direct": false,
            "version": "3.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/invariant",
            "direct": false,
            "version": "2.2.37",
            "ecosystem": "npm"
          },
          {
            "name": "@types/prop-types",
            "direct": false,
            "version": "15.7.12",
            "ecosystem": "npm"
          },
          {
            "name": "@types/react",
            "direct": false,
            "version": "18.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/react-transition-group",
            "direct": false,
            "version": "4.4.11",
            "ecosystem": "npm"
          },
          {
            "name": "@types/warning",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "4.0.13",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "5.7.4",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-dynamic-import",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "5.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "6.12.6",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-keywords",
            "direct": false,
            "version": "3.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "align-text",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "alphanum-sort",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-escapes",
            "direct": false,
            "version": "4.3.2",
            "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-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": "anymatch",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "anymatch",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "aria-hidden",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "arr-diff",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "arr-flatten",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "arr-union",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "array-unique",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "asn1.js",
            "direct": false,
            "version": "4.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "assert",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "assert-ok",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "assign-symbols",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "async",
            "direct": false,
            "version": "2.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "async-each",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "atob",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "attr-accept",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "autoprefixer",
            "direct": false,
            "version": "6.7.7",
            "ecosystem": "npm"
          },
          {
            "name": "available-typed-arrays",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "babel-code-frame",
            "direct": false,
            "version": "6.26.0",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "base",
            "direct": false,
            "version": "0.11.2",
            "ecosystem": "npm"
          },
          {
            "name": "base64-js",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "big.js",
            "direct": false,
            "version": "5.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "binary-extensions",
            "direct": false,
            "version": "1.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "binary-extensions",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "bindings",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "bl",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "bn.js",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "bn.js",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "bootstrap",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "brorand",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-aes",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-cipher",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-des",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-rsa",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-sign",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-zlib",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist",
            "direct": false,
            "version": "1.7.7",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": false,
            "version": "4.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": false,
            "version": "5.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-xor",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "builtin-status-codes",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cache-base",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind",
            "direct": false,
            "version": "1.0.8",
            "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": "camelcase",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-api",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-db",
            "direct": false,
            "version": "1.0.30001657",
            "ecosystem": "npm"
          },
          {
            "name": "cast-array",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "center-align",
            "direct": false,
            "version": "0.1.3",
            "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": "chardet",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "child_process",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "2.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "cipher-base",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "clap",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "class-utils",
            "direct": false,
            "version": "0.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "classnames",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "cli",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "cli-cursor",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "cli-spinners",
            "direct": false,
            "version": "2.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "cli-width",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "clone",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "clone-deep",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "co",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "coa",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "code-point-at",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "collection-visit",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "color",
            "direct": false,
            "version": "0.11.4",
            "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": "color-string",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "colormin",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "colors",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "component-emitter",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "console-browserify",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "constants-browserify",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "copy-descriptor",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "core-js-pure",
            "direct": false,
            "version": "3.38.1",
            "ecosystem": "npm"
          },
          {
            "name": "core-util-is",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "create-ecdh",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "create-hash",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "create-hash",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "create-hmac",
            "direct": false,
            "version": "1.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "crypto-browserify",
            "direct": false,
            "version": "3.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "css-color-names",
            "direct": false,
            "version": "0.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "css-loader",
            "direct": false,
            "version": "0.28.11",
            "ecosystem": "npm"
          },
          {
            "name": "css-mediaquery",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "css-selector-tokenizer",
            "direct": false,
            "version": "0.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "cssesc",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cssnano",
            "direct": false,
            "version": "3.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "csso",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "csstype",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "d",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "date-now",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "2.6.9",
            "ecosystem": "npm"
          },
          {
            "name": "decamelize",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "decode-uri-component",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "defaults",
            "direct": false,
            "version": "1.0.4",
            "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": "define-property",
            "direct": false,
            "version": "0.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "define-property",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "define-property",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "defined",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "dequal",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "des.js",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "detect-node-es",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "diffie-hellman",
            "direct": false,
            "version": "5.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "dom-helpers",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "dom-serializer",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "domain-browser",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "domelementtype",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "domelementtype",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "domhandler",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "domutils",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "electron-to-chromium",
            "direct": false,
            "version": "1.5.14",
            "ecosystem": "npm"
          },
          {
            "name": "elliptic",
            "direct": false,
            "version": "6.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "email-prop-type",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "email-validator",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "emojis-list",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "enhanced-resolve",
            "direct": false,
            "version": "3.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "errno",
            "direct": false,
            "version": "0.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "error-ex",
            "direct": false,
            "version": "1.3.2",
            "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-object-atoms",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "es5-ext",
            "direct": false,
            "version": "0.10.64",
            "ecosystem": "npm"
          },
          {
            "name": "es6-iterator",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "es6-map",
            "direct": false,
            "version": "0.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "es6-set",
            "direct": false,
            "version": "0.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "es6-symbol",
            "direct": false,
            "version": "3.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "es6-weak-map",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "escope",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "esniff",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "esprima",
            "direct": false,
            "version": "2.7.3",
            "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": "esutils",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "event-emitter",
            "direct": false,
            "version": "0.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "events",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "evp_bytestokey",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "execa",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "exit",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "expand-brackets",
            "direct": false,
            "version": "2.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "ext",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "extend-shallow",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "extend-shallow",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "external-editor",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "extglob",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "extract-text-webpack-plugin",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-json-stable-stringify",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fastparse",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "figures",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "file-selector",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "file-uri-to-path",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "filter-obj",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "flatten",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "focus-lock",
            "direct": false,
            "version": "1.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "font-awesome",
            "direct": false,
            "version": "4.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "for-each",
            "direct": false,
            "version": "0.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "for-in",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "fragment-cache",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "1.2.13",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-nonce",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-stream",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-value",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "8.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "has",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "has-ansi",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "2.0.0",
            "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.2",
            "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": "has-value",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "has-value",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-values",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "has-values",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hash-base",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hash-base",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "hash.js",
            "direct": false,
            "version": "1.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hmac-drbg",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "hoist-non-react-statics",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "2.8.9",
            "ecosystem": "npm"
          },
          {
            "name": "html-comment-regex",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "htmlparser2",
            "direct": false,
            "version": "3.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "https-browserify",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hyphenate-style-name",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.4.24",
            "ecosystem": "npm"
          },
          {
            "name": "icss-replace-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "icss-utils",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ieee754",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "imask",
            "direct": false,
            "version": "7.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "immutable",
            "direct": false,
            "version": "4.3.7",
            "ecosystem": "npm"
          },
          {
            "name": "indexes-of",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "inflight",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "inquirer",
            "direct": false,
            "version": "8.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "interpret",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "intl-messageformat",
            "direct": false,
            "version": "10.5.14",
            "ecosystem": "npm"
          },
          {
            "name": "invariant",
            "direct": false,
            "version": "2.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "invert-kv",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-absolute-url",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-accessor-descriptor",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-binary-path",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-binary-path",
            "direct": false,
            "version": "2.1.0",
            "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.15.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-data-descriptor",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-descriptor",
            "direct": false,
            "version": "0.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "is-descriptor",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-extendable",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-extendable",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "1.0.0",
            "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-glob",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-interactive",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-obj",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-object",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-svg",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-typed-array",
            "direct": false,
            "version": "1.1.15",
            "ecosystem": "npm"
          },
          {
            "name": "is-unicode-supported",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-windows",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "isarray",
            "direct": false,
            "version": "0.0.1",
            "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": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "isobject",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jasmine-ajax",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "jasmine-jquery",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "jquery",
            "direct": false,
            "version": "2.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "js-base64",
            "direct": false,
            "version": "2.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "3.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jshint",
            "direct": false,
            "version": "2.13.6",
            "ecosystem": "npm"
          },
          {
            "name": "json-loader",
            "direct": false,
            "version": "0.5.7",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "lazy-cache",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "lcid",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "load-json-file",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "loader-runner",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "loader-utils",
            "direct": false,
            "version": "1.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.17.21",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.camelcase",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.memoize",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.uniq",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.uniqby",
            "direct": false,
            "version": "4.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "log-symbols",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "longest",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "loose-envify",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "4.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "mailto-link",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "map-cache",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "map-visit",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "matchmediaquery",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "math-expression-evaluator",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "md5.js",
            "direct": false,
            "version": "1.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "mem",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "memory-fs",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "3.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "miller-rabin",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-fn",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-fn",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "minimalistic-assert",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minimalistic-crypto-utils",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "5.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "mixin-deep",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp",
            "direct": false,
            "version": "0.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "mute-stream",
            "direct": false,
            "version": "0.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "nan",
            "direct": false,
            "version": "2.20.0",
            "ecosystem": "npm"
          },
          {
            "name": "nanomatch",
            "direct": false,
            "version": "1.2.13",
            "ecosystem": "npm"
          },
          {
            "name": "neo-async",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "next-tick",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-libs-browser",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-package-data",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-range",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-url",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "npm-run-path",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "num2fraction",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "number-is-nan",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-assign",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-copy",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "object-filter",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "object-inspect",
            "direct": false,
            "version": "1.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "object-keys",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-visit",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object.assign",
            "direct": false,
            "version": "4.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "object.pick",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "onetime",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "ora",
            "direct": false,
            "version": "5.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "os-browserify",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "os-locale",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "os-tmpdir",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "p-finally",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pako",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "parse-asn1",
            "direct": false,
            "version": "5.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "pascalcase",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-browserify",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-dirname",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-is-absolute",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-key",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-parse",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "path-type",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pbkdf2",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "pify",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "pify",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "popper.js",
            "direct": false,
            "version": "1.16.1",
            "ecosystem": "npm"
          },
          {
            "name": "posix-character-classes",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "possible-typed-array-names",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "5.2.18",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "6.0.23",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-calc",
            "direct": false,
            "version": "5.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-colormin",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-convert-values",
            "direct": false,
            "version": "2.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-comments",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-duplicates",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-empty",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-overridden",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-unused",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-filter-plugins",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-merge-idents",
            "direct": false,
            "version": "2.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-merge-longhand",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-merge-rules",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-message-helpers",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-minify-font-values",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-minify-gradients",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-minify-params",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-minify-selectors",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-modules-extract-imports",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-modules-local-by-default",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-modules-scope",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-modules-values",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-normalize-charset",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-normalize-url",
            "direct": false,
            "version": "3.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-ordered-values",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-reduce-idents",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-reduce-initial",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-reduce-transforms",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-selector-parser",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-svgo",
            "direct": false,
            "version": "2.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-unique-selectors",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-value-parser",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-zindex",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "prepend-http",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "process",
            "direct": false,
            "version": "0.11.10",
            "ecosystem": "npm"
          },
          {
            "name": "process-nextick-args",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "prop-types",
            "direct": false,
            "version": "15.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "prop-types-extra",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "prr",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "pseudomap",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "public-encrypt",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "q",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "query-string",
            "direct": false,
            "version": "4.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "query-string",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "querystring-es3",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "randombytes",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "randomfill",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "react",
            "direct": false,
            "version": "17.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "react-bootstrap",
            "direct": false,
            "version": "1.6.8",
            "ecosystem": "npm"
          },
          {
            "name": "react-clientside-effect",
            "direct": false,
            "version": "1.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "react-colorful",
            "direct": false,
            "version": "5.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "react-dom",
            "direct": false,
            "version": "17.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "react-dropzone",
            "direct": false,
            "version": "14.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "react-fast-compare",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "react-focus-lock",
            "direct": false,
            "version": "2.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "react-focus-on",
            "direct": false,
            "version": "3.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "react-imask",
            "direct": false,
            "version": "7.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "react-intl",
            "direct": false,
            "version": "6.6.8",
            "ecosystem": "npm"
          },
          {
            "name": "react-is",
            "direct": false,
            "version": "16.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "react-lifecycles-compat",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "react-loading-skeleton",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "react-overlays",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "react-popper",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "react-proptype-conditional-require",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "react-remove-scroll",
            "direct": false,
            "version": "2.5.10",
            "ecosystem": "npm"
          },
          {
            "name": "react-remove-scroll-bar",
            "direct": false,
            "version": "2.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "react-responsive",
            "direct": false,
            "version": "8.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "react-style-singleton",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "react-table",
            "direct": false,
            "version": "7.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "react-transition-group",
            "direct": false,
            "version": "4.4.5",
            "ecosystem": "npm"
          },
          {
            "name": "read-pkg",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "read-pkg-up",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "1.1.14",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "2.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "3.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "reduce-css-calc",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "reduce-function-call",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "regenerator-runtime",
            "direct": false,
            "version": "0.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "regex-not",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "remove-trailing-separator",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "repeat-element",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "repeat-string",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-main-filename",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.8",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-url",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "restore-cursor",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ret",
            "direct": false,
            "version": "0.1.15",
            "ecosystem": "npm"
          },
          {
            "name": "right-align",
            "direct": false,
            "version": "0.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "ripemd160",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ripemd160",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "run-async",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "rxjs",
            "direct": false,
            "version": "7.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-regex",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "sass",
            "direct": false,
            "version": "1.78.0",
            "ecosystem": "npm"
          },
          {
            "name": "sass-loader",
            "direct": false,
            "version": "7.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "sax",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "scheduler",
            "direct": false,
            "version": "0.20.2",
            "ecosystem": "npm"
          },
          {
            "name": "schema-utils",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "5.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "set-blocking",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "set-function-length",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "set-value",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "setimmediate",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "sha.js",
            "direct": false,
            "version": "2.4.11",
            "ecosystem": "npm"
          },
          {
            "name": "shallow-clone",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "shallow-equal",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-command",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-regex",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-list",
            "direct": false,
            "version": "1.0.0",
            "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": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "snapdragon",
            "direct": false,
            "version": "0.8.2",
            "ecosystem": "npm"
          },
          {
            "name": "snapdragon-node",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "snapdragon-util",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "sort-keys",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "source-list-map",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.5.7",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-resolve",
            "direct": false,
            "version": "0.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-url",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-correct",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-exceptions",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-expression-parse",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-license-ids",
            "direct": false,
            "version": "3.0.20",
            "ecosystem": "npm"
          },
          {
            "name": "split-on-first",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "split-string",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "sprintf-js",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "static-extend",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "stream-browserify",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "stream-http",
            "direct": false,
            "version": "2.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "strict-uri-encode",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "strict-uri-encode",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "1.0.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_decoder",
            "direct": false,
            "version": "0.10.31",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.1.1",
            "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-bom",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-eof",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "style-loader",
            "direct": false,
            "version": "0.18.2",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "3.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "4.5.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-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "svgo",
            "direct": false,
            "version": "0.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "tabbable",
            "direct": false,
            "version": "5.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "tapable",
            "direct": false,
            "version": "0.2.9",
            "ecosystem": "npm"
          },
          {
            "name": "through",
            "direct": false,
            "version": "2.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "timers-browserify",
            "direct": false,
            "version": "2.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "tmp",
            "direct": false,
            "version": "0.0.33",
            "ecosystem": "npm"
          },
          {
            "name": "to-arraybuffer",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "to-buffer",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "to-object-path",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "tty-browserify",
            "direct": false,
            "version": "0.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "type",
            "direct": false,
            "version": "2.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.21.3",
            "ecosystem": "npm"
          },
          {
            "name": "typed-array-buffer",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "uglify-js",
            "direct": false,
            "version": "2.8.29",
            "ecosystem": "npm"
          },
          {
            "name": "uglify-to-browserify",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "uglifyjs-webpack-plugin",
            "direct": false,
            "version": "0.4.6",
            "ecosystem": "npm"
          },
          {
            "name": "uncontrollable",
            "direct": false,
            "version": "7.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "union-value",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "uniq",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "uniqs",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "unset-value",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "upath",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "urix",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "url",
            "direct": false,
            "version": "0.11.4",
            "ecosystem": "npm"
          },
          {
            "name": "use",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "use-callback-ref",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "use-sidecar",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "util",
            "direct": false,
            "version": "0.10.4",
            "ecosystem": "npm"
          },
          {
            "name": "util",
            "direct": false,
            "version": "0.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "validate-npm-package-license",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "vendors",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "vm-browserify",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "warning",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "watchpack",
            "direct": false,
            "version": "1.7.5",
            "ecosystem": "npm"
          },
          {
            "name": "watchpack-chokidar2",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "wcwidth",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "webpack",
            "direct": false,
            "version": "3.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-sources",
            "direct": false,
            "version": "1.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "whet.extend",
            "direct": false,
            "version": "0.9.9",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "which-module",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "which-typed-array",
            "direct": false,
            "version": "1.1.19",
            "ecosystem": "npm"
          },
          {
            "name": "window-size",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "wordwrap",
            "direct": false,
            "version": "0.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "6.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "xtend",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "3.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "accessible-pygments",
            "direct": false,
            "version": "0.0.5",
            "ecosystem": "pypi"
          },
          {
            "name": "acid-xblock",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "aiohappyeyeballs",
            "direct": false,
            "version": "2.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "aiohttp",
            "direct": false,
            "version": "3.14.1",
            "ecosystem": "pypi"
          },
          {
            "name": "aiosignal",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "alabaster",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "amqp",
            "direct": false,
            "version": "5.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "analytics-python",
            "direct": false,
            "version": "1.4.post1",
            "ecosystem": "pypi"
          },
          {
            "name": "aniso8601",
            "direct": false,
            "version": "10.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "annotated-doc",
            "direct": false,
            "version": "0.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "annotated-types",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "anyio",
            "direct": false,
            "version": "4.14.1",
            "ecosystem": "pypi"
          },
          {
            "name": "appdirs",
            "direct": false,
            "version": "1.4.4",
            "ecosystem": "pypi"
          },
          {
            "name": "asgiref",
            "direct": false,
            "version": "3.11.1",
            "ecosystem": "pypi"
          },
          {
            "name": "asn1crypto",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "astroid",
            "direct": false,
            "version": "3.3.11",
            "ecosystem": "pypi"
          },
          {
            "name": "attrs",
            "direct": false,
            "version": "26.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "babel",
            "direct": false,
            "version": "2.18.0",
            "ecosystem": "pypi"
          },
          {
            "name": "backoff",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "bcrypt",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "beautifulsoup4",
            "direct": false,
            "version": "4.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "billiard",
            "direct": false,
            "version": "4.2.4",
            "ecosystem": "pypi"
          },
          {
            "name": "bleach",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "bleach",
            "direct": false,
            "version": "6.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "boto3",
            "direct": false,
            "version": "1.43.41",
            "ecosystem": "pypi"
          },
          {
            "name": "botocore",
            "direct": false,
            "version": "1.43.41",
            "ecosystem": "pypi"
          },
          {
            "name": "bracex",
            "direct": false,
            "version": "3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "bridgekeeper",
            "direct": false,
            "version": "0.9",
            "ecosystem": "pypi"
          },
          {
            "name": "build",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cachecontrol",
            "direct": false,
            "version": "0.14.4",
            "ecosystem": "pypi"
          },
          {
            "name": "cachetools",
            "direct": false,
            "version": "7.1.4",
            "ecosystem": "pypi"
          },
          {
            "name": "camel-converter",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "casbin-django-orm-adapter",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "celery",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "celery",
            "direct": false,
            "version": "5.6.3",
            "ecosystem": "pypi"
          },
          {
            "name": "certifi",
            "direct": false,
            "version": "2026.6.17",
            "ecosystem": "pypi"
          },
          {
            "name": "cffi",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "chardet",
            "direct": false,
            "version": "7.4.3",
            "ecosystem": "pypi"
          },
          {
            "name": "charset-normalizer",
            "direct": false,
            "version": "3.4.9",
            "ecosystem": "pypi"
          },
          {
            "name": "chem",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cheroot",
            "direct": false,
            "version": "11.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "cherrypy",
            "direct": false,
            "version": "18.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "click-didyoumean",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "click-log",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "click-plugins",
            "direct": false,
            "version": "1.1.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "click-repl",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "code-annotations",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "code-annotations",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "codejail-includes",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "colorama",
            "direct": false,
            "version": "0.4.6",
            "ecosystem": "pypi"
          },
          {
            "name": "coverage",
            "direct": false,
            "version": "7.15.2",
            "ecosystem": "pypi"
          },
          {
            "name": "crowdsourcehinter-xblock",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "cryptography",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "cryptography",
            "direct": false,
            "version": "49.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cssutils",
            "direct": false,
            "version": "2.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ddt",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "defusedxml",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "diff-cover",
            "direct": false,
            "version": "10.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "dill",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "distlib",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "pypi"
          },
          {
            "name": "django",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django",
            "direct": false,
            "version": "5.2.16",
            "ecosystem": "pypi"
          },
          {
            "name": "django-appconf",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-autocomplete-light",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-cache-memoize",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-cache-memoize",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "django-celery-results",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-classy-tags",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-config-models",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-config-models",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-cors-headers",
            "direct": false,
            "version": "4.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-countries",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-countries",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-crum",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-crum",
            "direct": false,
            "version": "0.7.9",
            "ecosystem": "pypi"
          },
          {
            "name": "django-fernet-fields-v2",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-fernet-fields-v2",
            "direct": false,
            "version": "0.9",
            "ecosystem": "pypi"
          },
          {
            "name": "django-filter",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-filter",
            "direct": false,
            "version": "25.2",
            "ecosystem": "pypi"
          },
          {
            "name": "django-ipware",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-ipware",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "django-js-asset",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "django-method-override",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "django-mock-queries",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-model-utils",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-model-utils",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-mptt",
            "direct": false,
            "version": "0.18.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-multi-email-field",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-multi-email-field",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-mysql",
            "direct": false,
            "version": "4.19.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-oauth-toolkit",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-oauth-toolkit",
            "direct": false,
            "version": "1.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "django-object-actions",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-object-actions",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "django-pipeline",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-push-notifications",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-ratelimit",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-sekizai",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-ses",
            "direct": false,
            "version": "4.7.2",
            "ecosystem": "pypi"
          },
          {
            "name": "django-simple-history",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-simple-history",
            "direct": false,
            "version": "3.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-statici18n",
            "direct": false,
            "version": "2.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "django-storages",
            "direct": false,
            "version": "1.14.6",
            "ecosystem": "pypi"
          },
          {
            "name": "django-user-tasks",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-waffle",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "django-waffle",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-webpack-loader",
            "direct": false,
            "version": "3.2.4",
            "ecosystem": "pypi"
          },
          {
            "name": "djangorestframework",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "djangorestframework",
            "direct": false,
            "version": "3.17.1",
            "ecosystem": "pypi"
          },
          {
            "name": "djangorestframework-xml",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "djangorestframework-xml",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "dnspython",
            "direct": false,
            "version": "2.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "doc8",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "docutils",
            "direct": false,
            "version": "0.21.2",
            "ecosystem": "pypi"
          },
          {
            "name": "done-xblock",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "drf-jwt",
            "direct": false,
            "version": "1.19.2",
            "ecosystem": "pypi"
          },
          {
            "name": "drf-spectacular",
            "direct": false,
            "version": "0.30.0",
            "ecosystem": "pypi"
          },
          {
            "name": "drf-yasg",
            "direct": false,
            "version": "1.21.15",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-ace",
            "direct": false,
            "version": "1.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-api-doc-tools",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-auth-backends",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-braze-client",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-bulk-grades",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-ccx-keys",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-celeryutils",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-codejail",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-completion",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-django-release-util",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-django-sites-extensions",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-django-utils",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "edx-django-utils",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-drf-extensions",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "edx-drf-extensions",
            "direct": false,
            "version": "10.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-enterprise",
            "direct": false,
            "version": "8.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-event-bus-kafka",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-event-bus-redis",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-i18n-tools",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-lint",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-milestones",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-opaque-keys",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "edx-opaque-keys",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-organizations",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-proctoring",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-rbac",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "edx-rbac",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-rest-api-client",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "edx-rest-api-client",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-search",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-sga",
            "direct": false,
            "version": "0.29.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-submissions",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-tincan-py35",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-toggles",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "edx-toggles",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edx-when",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "edxval",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "elasticsearch",
            "direct": false,
            "version": "7.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "encutils",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "enmerkar",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "enmerkar-underscore",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "enterprise-integrated-channels",
            "direct": false,
            "version": "0.1.62",
            "ecosystem": "pypi"
          },
          {
            "name": "event-tracking",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "factory-boy",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "factory-boy",
            "direct": false,
            "version": "3.3.3",
            "ecosystem": "pypi"
          },
          {
            "name": "faker",
            "direct": false,
            "version": "40.31.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fastavro",
            "direct": false,
            "version": "1.12.2",
            "ecosystem": "pypi"
          },
          {
            "name": "filelock",
            "direct": false,
            "version": "3.29.6",
            "ecosystem": "pypi"
          },
          {
            "name": "filelock",
            "direct": false,
            "version": "3.30.2",
            "ecosystem": "pypi"
          },
          {
            "name": "firebase-admin",
            "direct": false,
            "version": "7.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "freezegun",
            "direct": false,
            "version": "1.5.5",
            "ecosystem": "pypi"
          },
          {
            "name": "frozenlist",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fs",
            "direct": false,
            "version": "2.4.16",
            "ecosystem": "pypi"
          },
          {
            "name": "fs-s3fs",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "geoip2",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "glob2",
            "direct": false,
            "version": "0.7",
            "ecosystem": "pypi"
          },
          {
            "name": "google-api-core",
            "direct": false,
            "version": "2.31.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-auth",
            "direct": false,
            "version": "2.55.1",
            "ecosystem": "pypi"
          },
          {
            "name": "google-cloud-core",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-cloud-firestore",
            "direct": false,
            "version": "2.28.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-cloud-storage",
            "direct": false,
            "version": "3.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-crc32c",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-resumable-media",
            "direct": false,
            "version": "2.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "googleapis-common-protos",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "pypi"
          },
          {
            "name": "grpcio",
            "direct": false,
            "version": "1.82.0",
            "ecosystem": "pypi"
          },
          {
            "name": "grpcio-status",
            "direct": false,
            "version": "1.82.0",
            "ecosystem": "pypi"
          },
          {
            "name": "gunicorn",
            "direct": false,
            "version": "26.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "h11",
            "direct": false,
            "version": "0.16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "h2",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "help-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "hpack",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "html5lib",
            "direct": false,
            "version": "1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "httpcore",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "pypi"
          },
          {
            "name": "httpx",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "pypi"
          },
          {
            "name": "hyperframe",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "icalendar",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "idna",
            "direct": false,
            "version": "3.18",
            "ecosystem": "pypi"
          },
          {
            "name": "imagesize",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "importlib-metadata",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "inflection",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "iniconfig",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "invoke",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "ipaddress",
            "direct": false,
            "version": "1.0.23",
            "ecosystem": "pypi"
          },
          {
            "name": "isodate",
            "direct": false,
            "version": "0.7.2",
            "ecosystem": "pypi"
          },
          {
            "name": "isort",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jaraco-classes",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jaraco-collections",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "jaraco-context",
            "direct": false,
            "version": "6.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "jaraco-functools",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jaraco-text",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jasmine",
            "direct": false,
            "version": "3.99.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jasmine-core",
            "direct": false,
            "version": "3.99.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jinja2",
            "direct": false,
            "version": "2.11.3",
            "ecosystem": "pypi"
          },
          {
            "name": "jinja2",
            "direct": false,
            "version": "3.1.6",
            "ecosystem": "pypi"
          },
          {
            "name": "jmespath",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "joblib",
            "direct": false,
            "version": "1.5.3",
            "ecosystem": "pypi"
          },
          {
            "name": "jsondiff",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "jsondiff",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonfield",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "jsonfield",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonschema",
            "direct": false,
            "version": "4.26.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonschema-specifications",
            "direct": false,
            "version": "2025.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "jwcrypto",
            "direct": false,
            "version": "1.5.8",
            "ecosystem": "pypi"
          },
          {
            "name": "kombu",
            "direct": false,
            "version": "5.6.2",
            "ecosystem": "pypi"
          },
          {
            "name": "laboratory",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "lazy",
            "direct": false,
            "version": "2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "lti-consumer-xblock",
            "direct": false,
            "version": "11.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "lxml",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "lxml",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "pypi"
          },
          {
            "name": "lxml-html-clean",
            "direct": false,
            "version": "0.4.4",
            "ecosystem": "pypi"
          },
          {
            "name": "mailsnake",
            "direct": false,
            "version": "1.6.4",
            "ecosystem": "pypi"
          },
          {
            "name": "mako",
            "direct": false,
            "version": "1.3.12",
            "ecosystem": "pypi"
          },
          {
            "name": "markdown",
            "direct": false,
            "version": "3.10.2",
            "ecosystem": "pypi"
          },
          {
            "name": "markdown-it-py",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "markupsafe",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "maxminddb",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mccabe",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mdurl",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "meilisearch",
            "direct": false,
            "version": "0.42.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mock",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "model-bakery",
            "direct": false,
            "version": "1.24.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mongoengine",
            "direct": false,
            "version": "0.29.3",
            "ecosystem": "pypi"
          },
          {
            "name": "monotonic",
            "direct": false,
            "version": "1.6",
            "ecosystem": "pypi"
          },
          {
            "name": "more-itertools",
            "direct": false,
            "version": "11.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mpmath",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "msgpack",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "multidict",
            "direct": false,
            "version": "6.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mysqlclient",
            "direct": false,
            "version": "2.2.8",
            "ecosystem": "pypi"
          },
          {
            "name": "nh3",
            "direct": false,
            "version": "0.3.6",
            "ecosystem": "pypi"
          },
          {
            "name": "nltk",
            "direct": false,
            "version": "3.9.4",
            "ecosystem": "pypi"
          },
          {
            "name": "nodeenv",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "numpy",
            "direct": false,
            "version": "1.26.4",
            "ecosystem": "pypi"
          },
          {
            "name": "oauthlib",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "olxcleaner",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-atlas",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-atlas",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-authz",
            "direct": false,
            "version": "1.21.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-calc",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-core",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-django-pyfs",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-django-require",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-django-wiki",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-events",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-events",
            "direct": false,
            "version": "11.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-filters",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-filters",
            "direct": false,
            "version": "3.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "openedx-forum",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "pypi"
          },
          {
            "name": "optimizely-sdk",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ora2",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ordereddict",
            "direct": false,
            "version": "1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "outcome",
            "direct": false,
            "version": "1.3.0.post0",
            "ecosystem": "pypi"
          },
          {
            "name": "packaging",
            "direct": false,
            "version": "26.2",
            "ecosystem": "pypi"
          },
          {
            "name": "paramiko",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "paramiko",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "path",
            "direct": false,
            "version": "16.11.0",
            "ecosystem": "pypi"
          },
          {
            "name": "path-py",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "path-py",
            "direct": false,
            "version": "12.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pgpy",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pgpy",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "piexif",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pillow",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pillow",
            "direct": false,
            "version": "12.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pip",
            "direct": false,
            "version": "26.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pip-tools",
            "direct": false,
            "version": "7.5.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pkginfo",
            "direct": false,
            "version": "1.12.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "platformdirs",
            "direct": false,
            "version": "4.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pluggy",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "polib",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "portend",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "prompt-toolkit",
            "direct": false,
            "version": "3.0.52",
            "ecosystem": "pypi"
          },
          {
            "name": "propcache",
            "direct": false,
            "version": "0.5.2",
            "ecosystem": "pypi"
          },
          {
            "name": "proto-plus",
            "direct": false,
            "version": "1.28.0",
            "ecosystem": "pypi"
          },
          {
            "name": "protobuf",
            "direct": false,
            "version": "7.35.1",
            "ecosystem": "pypi"
          },
          {
            "name": "psutil",
            "direct": false,
            "version": "7.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "psycopg2-binary",
            "direct": false,
            "version": "2.9.12",
            "ecosystem": "pypi"
          },
          {
            "name": "pyasn1",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pyasn1-modules",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pycasbin",
            "direct": false,
            "version": "2.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pycodestyle",
            "direct": false,
            "version": "2.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pycountry",
            "direct": false,
            "version": "26.2.16",
            "ecosystem": "pypi"
          },
          {
            "name": "pycparser",
            "direct": false,
            "version": "3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pycryptodomex",
            "direct": false,
            "version": "3.23.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic",
            "direct": false,
            "version": "2.13.4",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic-core",
            "direct": false,
            "version": "2.46.4",
            "ecosystem": "pypi"
          },
          {
            "name": "pydata-sphinx-theme",
            "direct": false,
            "version": "0.16.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pydocstyle",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pygments",
            "direct": false,
            "version": "2.20.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyjwt",
            "direct": false,
            "version": "2.13.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pylatexenc",
            "direct": false,
            "version": "2.10",
            "ecosystem": "pypi"
          },
          {
            "name": "pylint",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pylint",
            "direct": false,
            "version": "3.3.9",
            "ecosystem": "pypi"
          },
          {
            "name": "pylint-celery",
            "direct": false,
            "version": "0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pylint-django",
            "direct": false,
            "version": "2.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pylint-plugin-utils",
            "direct": false,
            "version": "0.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pylti1p3",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pymemcache",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pymongo",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pynacl",
            "direct": false,
            "version": "1.6.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pynliner",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyopenssl",
            "direct": false,
            "version": "26.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyparsing",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pyproject-api",
            "direct": false,
            "version": "1.10.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pyproject-hooks",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyrsistent",
            "direct": false,
            "version": "0.20.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pysocks",
            "direct": false,
            "version": "1.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pysrt",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest",
            "direct": false,
            "version": "9.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-cov",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-django",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-dateutil",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "python-dateutil",
            "direct": false,
            "version": "2.9.0.post0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-discovery",
            "direct": false,
            "version": "1.4.4",
            "ecosystem": "pypi"
          },
          {
            "name": "python-ipware",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-slugify",
            "direct": false,
            "version": "8.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "python-swiftclient",
            "direct": false,
            "version": "4.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python3-openid",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python3-saml",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "python3-saml",
            "direct": false,
            "version": "1.16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytz",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pytz",
            "direct": false,
            "version": "2026.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pyuca",
            "direct": false,
            "version": "1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "random2",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "readme-renderer",
            "direct": false,
            "version": "45.0",
            "ecosystem": "pypi"
          },
          {
            "name": "recommender-xblock",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "redis",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "referencing",
            "direct": false,
            "version": "0.37.0",
            "ecosystem": "pypi"
          },
          {
            "name": "regex",
            "direct": false,
            "version": "2026.6.28",
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": false,
            "version": "2.34.2",
            "ecosystem": "pypi"
          },
          {
            "name": "requests-oauthlib",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "requests-toolbelt",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "responses",
            "direct": false,
            "version": "0.26.2",
            "ecosystem": "pypi"
          },
          {
            "name": "restructuredtext-lint",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "rich",
            "direct": false,
            "version": "15.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "roman-numerals",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "roman-numerals-py",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "rpds-py",
            "direct": false,
            "version": "2026.6.3",
            "ecosystem": "pypi"
          },
          {
            "name": "rules",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "rules",
            "direct": false,
            "version": "3.5",
            "ecosystem": "pypi"
          },
          {
            "name": "s3transfer",
            "direct": false,
            "version": "0.19.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sailthru-client",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "pypi"
          },
          {
            "name": "scipy",
            "direct": false,
            "version": "1.17.1",
            "ecosystem": "pypi"
          },
          {
            "name": "selenium",
            "direct": false,
            "version": "4.46.0",
            "ecosystem": "pypi"
          },
          {
            "name": "semantic-version",
            "direct": false,
            "version": "2.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "setuptools",
            "direct": false,
            "version": "83.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "shapely",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "shellingham",
            "direct": false,
            "version": "1.5.4",
            "ecosystem": "pypi"
          },
          {
            "name": "simpleeval",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "pypi"
          },
          {
            "name": "simplejson",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "six",
            "direct": false,
            "version": "1.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "slumber",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "slumber",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "sniffio",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "snowballstemmer",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "snowflake-connector-python",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "social-auth-app-django",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "social-auth-app-django",
            "direct": false,
            "version": "5.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "social-auth-core",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "sorl-thumbnail",
            "direct": false,
            "version": "13.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sortedcontainers",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "soupsieve",
            "direct": false,
            "version": "2.8.4",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinx",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "sphinx",
            "direct": false,
            "version": "8.2.3",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinx-book-theme",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-applehelp",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-devhelp",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-htmlhelp",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-jsmath",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-qthelp",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sphinxcontrib-serializinghtml",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sqlparse",
            "direct": false,
            "version": "0.5.5",
            "ecosystem": "pypi"
          },
          {
            "name": "staff-graded-xblock",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "stevedore",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "stevedore",
            "direct": false,
            "version": "5.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "super-csv",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sympy",
            "direct": false,
            "version": "1.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tempora",
            "direct": false,
            "version": "5.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "testfixtures",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "testfixtures",
            "direct": false,
            "version": "12.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "text-unidecode",
            "direct": false,
            "version": "1.3",
            "ecosystem": "pypi"
          },
          {
            "name": "tincan",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "tincan",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tinycss2",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "tomli-w",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tomlkit",
            "direct": false,
            "version": "0.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tomlkit",
            "direct": false,
            "version": "0.15.1",
            "ecosystem": "pypi"
          },
          {
            "name": "tox",
            "direct": false,
            "version": "4.56.4",
            "ecosystem": "pypi"
          },
          {
            "name": "tqdm",
            "direct": false,
            "version": "4.68.4",
            "ecosystem": "pypi"
          },
          {
            "name": "trio",
            "direct": false,
            "version": "0.33.0",
            "ecosystem": "pypi"
          },
          {
            "name": "trio-websocket",
            "direct": false,
            "version": "0.12.2",
            "ecosystem": "pypi"
          },
          {
            "name": "twine",
            "direct": false,
            "version": "1.11.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typer",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typer-slim",
            "direct": false,
            "version": "0.24.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typesense",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-extensions",
            "direct": false,
            "version": "4.16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-inspection",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "tzdata",
            "direct": false,
            "version": "2026.2",
            "ecosystem": "pypi"
          },
          {
            "name": "tzlocal",
            "direct": false,
            "version": "5.4.4",
            "ecosystem": "pypi"
          },
          {
            "name": "unicodecsv",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "unicodecsv",
            "direct": false,
            "version": "0.14.1",
            "ecosystem": "pypi"
          },
          {
            "name": "unicodeit",
            "direct": false,
            "version": "0.7.5",
            "ecosystem": "pypi"
          },
          {
            "name": "uritemplate",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "urllib3",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "vine",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "virtualenv",
            "direct": false,
            "version": "21.6.1",
            "ecosystem": "pypi"
          },
          {
            "name": "voluptuous",
            "direct": false,
            "version": "0.16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "walrus",
            "direct": false,
            "version": "0.9.8",
            "ecosystem": "pypi"
          },
          {
            "name": "wcmatch",
            "direct": false,
            "version": "10.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "wcwidth",
            "direct": false,
            "version": "0.8.2",
            "ecosystem": "pypi"
          },
          {
            "name": "webencodings",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "webob",
            "direct": false,
            "version": "1.8.10",
            "ecosystem": "pypi"
          },
          {
            "name": "websocket-client",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "wheel",
            "direct": false,
            "version": "0.47.0",
            "ecosystem": "pypi"
          },
          {
            "name": "wrapt",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "wsproto",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "pypi"
          },
          {
            "name": "xblock",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "xblock-drag-and-drop-v2",
            "direct": false,
            "version": "5.0.6",
            "ecosystem": "pypi"
          },
          {
            "name": "xblock-google-drive",
            "direct": false,
            "version": "0.8.2",
            "ecosystem": "pypi"
          },
          {
            "name": "xblock-poll",
            "direct": false,
            "version": "1.16.1",
            "ecosystem": "pypi"
          },
          {
            "name": "xblocks-contrib",
            "direct": false,
            "version": "0.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "xmlsec",
            "direct": false,
            "version": "1.3.14",
            "ecosystem": "pypi"
          },
          {
            "name": "xss-utils",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "yarl",
            "direct": false,
            "version": "1.24.2",
            "ecosystem": "pypi"
          },
          {
            "name": "zc-lockfile",
            "direct": false,
            "version": "4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "zipp",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 1091,
        "direct_count": 1,
        "indirect_count": 1090
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 69,
        "merged_prs": 1966,
        "open_issues": 9,
        "closed_ratio": 0.609,
        "closed_issues": 14,
        "closed_unmerged_prs": 576
      },
      "bus_factor": 11,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "alex-sheehan-edx",
          "commits": 357,
          "avatar_url": "https://avatars.githubusercontent.com/u/67655836?v=4"
        },
        {
          "type": "User",
          "login": "hamzawaleed01",
          "commits": 163,
          "avatar_url": "https://avatars.githubusercontent.com/u/83753341?v=4"
        },
        {
          "type": "User",
          "login": "irfanuddinahmad",
          "commits": 134,
          "avatar_url": "https://avatars.githubusercontent.com/u/34648393?v=4"
        },
        {
          "type": "User",
          "login": "pwnage101",
          "commits": 130,
          "avatar_url": "https://avatars.githubusercontent.com/u/85151?v=4"
        },
        {
          "type": "User",
          "login": "saleem-latif",
          "commits": 127,
          "avatar_url": "https://avatars.githubusercontent.com/u/7114956?v=4"
        },
        {
          "type": "User",
          "login": "muhammad-ammar",
          "commits": 124,
          "avatar_url": "https://avatars.githubusercontent.com/u/6767924?v=4"
        },
        {
          "type": "User",
          "login": "brittneyexline",
          "commits": 123,
          "avatar_url": "https://avatars.githubusercontent.com/u/524809?v=4"
        },
        {
          "type": "User",
          "login": "johnnagro",
          "commits": 100,
          "avatar_url": "https://avatars.githubusercontent.com/u/31442?v=4"
        },
        {
          "type": "User",
          "login": "sameeramin",
          "commits": 82,
          "avatar_url": "https://avatars.githubusercontent.com/u/35958006?v=4"
        },
        {
          "type": "User",
          "login": "iloveagent57",
          "commits": 80,
          "avatar_url": "https://avatars.githubusercontent.com/u/2307986?v=4"
        }
      ],
      "contributors_sampled": 99,
      "top_contributor_share": 0.12
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "add-depr-ticket-to-depr-board.yml",
        "add-remove-label-on-comment.yml",
        "ci.yml",
        "commitlint.yml",
        "lockfileversion-check.yml",
        "mysql8-migrations.yml",
        "postgresql-migrations.yml",
        "publish.yml",
        "self-assign-issue.yml",
        "upgrade-python-requirements.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "tox.ini"
      ],
      "has_editorconfig": false,
      "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": "23 out of 23 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 21 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 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 2,
            "reason": "dependency not pinned by hash detected -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 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": 10,
            "reason": "security policy file 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": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "46 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "e0637d0e92a7316ea013fdc2ba41fc69978ee8e1",
        "ran_at": "2026-07-23T12:43:52Z",
        "aggregate_score": 6.5,
        "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-23T12:42:30Z",
      "oldest_open_prs": [
        {
          "number": 756,
          "created_at": "2020-04-29T22:57:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1049,
          "created_at": "2020-11-20T07:35:31Z",
          "last_comment_at": "2023-02-28T15:00:48Z",
          "last_comment_author": "mattdrayer"
        },
        {
          "number": 1498,
          "created_at": "2022-03-15T20:41:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1545,
          "created_at": "2022-04-28T19:17:20Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1677,
          "created_at": "2022-11-18T01:23:01Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1678,
          "created_at": "2022-11-21T09:01:54Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1684,
          "created_at": "2022-12-03T01:13:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1734,
          "created_at": "2023-04-04T15:51:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1760,
          "created_at": "2023-05-24T11:26:05Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1776,
          "created_at": "2023-06-22T07:21:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1790,
          "created_at": "2023-07-05T13:52:08Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1792,
          "created_at": "2023-07-06T17:57:53Z",
          "last_comment_at": "2023-07-06T18:08:33Z",
          "last_comment_author": "alex-sheehan-edx"
        },
        {
          "number": 1797,
          "created_at": "2023-07-11T15:23:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1894,
          "created_at": "2023-10-03T16:07:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1905,
          "created_at": "2023-10-11T09:03:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1908,
          "created_at": "2023-10-11T12:23:39Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1928,
          "created_at": "2023-10-27T23:41:49Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1991,
          "created_at": "2024-01-18T20:31:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2052,
          "created_at": "2024-03-25T11:24:56Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2085,
          "created_at": "2024-04-25T07:50:24Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-22T17:35:52Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 1151,
          "created_at": "2021-02-11T08:50:50Z",
          "last_comment_at": "2021-03-03T03:18:23Z",
          "last_comment_author": "Rah1x"
        },
        {
          "number": 1570,
          "created_at": "2022-05-25T14:23:48Z",
          "last_comment_at": "2025-12-15T15:33:04Z",
          "last_comment_author": "csmith-tcs"
        },
        {
          "number": 1745,
          "created_at": "2023-05-05T12:42:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1927,
          "created_at": "2023-10-26T02:09:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2002,
          "created_at": "2024-01-28T11:21:02Z",
          "last_comment_at": "2024-01-28T11:21:31Z",
          "last_comment_author": "OmarIthawi"
        },
        {
          "number": 2291,
          "created_at": "2024-11-19T18:24:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2302,
          "created_at": "2024-12-10T20:56:32Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2333,
          "created_at": "2025-02-04T19:13:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2494,
          "created_at": "2025-12-18T16:08:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/openedx/edx-enterprise",
    "host": "github.com",
    "name": "edx-enterprise",
    "owner": "openedx"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 81,
      "inputs": {
        "security": 72,
        "vitality": 96,
        "community": 75,
        "governance": 86,
        "engineering": 72
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 96,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 93,
            "inputs": {
              "commits_last_year": 187,
              "human_commit_share": 0.96,
              "days_since_last_push": 0,
              "active_weeks_last_year": 42
            },
            "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": "42/52 weeks with commits",
                "points": 29.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 42
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "187 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 187
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 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": "8.7.1",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 4
            },
            "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 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 4
                    }
                  }
                ],
                "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": 53,
            "inputs": {
              "forks": 71,
              "stars": 50,
              "watchers": 74,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "50 stars",
                "points": 27.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 50
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "71 forks",
                "points": 15.4,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 71
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "74 watchers",
                "points": 10.4,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 74
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": true,
              "has_code_of_conduct": true,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (AGPL-3.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "AGPL-3.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": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 7.2,
                "status": "met",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "excellent",
        "name": "Sustainability & Governance",
        "value": 86,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "excellent",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 97,
            "inputs": {
              "bus_factor": 11,
              "contributors_sampled": 99,
              "top_contributor_share": 0.12
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "11 contributor(s) cover half of all commits",
                "points": 54,
                "status": "met",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 12% of commits",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 12
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "99 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 99
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 21 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "merged_prs": 1966,
              "open_issues": 9,
              "closed_issues": 14,
              "issue_closed_ratio": 0.609,
              "closed_unmerged_prs": 576
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "61% of issues closed",
                "points": 28.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 61
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "1966/2542 decided PRs merged",
                "points": 29.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1966,
                      "decided": 2542
                    }
                  }
                ],
                "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": 76,
            "inputs": {
              "followers": 757,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "openedx",
              "public_repos": 185,
              "account_age_days": 2963
            },
            "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": "757 followers of openedx",
                "points": 20.7,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 757,
                      "login": "openedx"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "185 public repos, account ~8 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 185
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 8
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "edx-enterprise"
              ],
              "ecosystems": "pypi",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "1461 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 1461
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 72,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "10 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "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": "tox.ini",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tox.ini"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "23 out of 23 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "good",
        "name": "Security",
        "value": 72,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 65,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 6.5
            },
            "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": "23 out of 23 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 21 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 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 2",
                "points": 1,
                "status": "partial",
                "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 detected",
                "points": 5,
                "status": "met",
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "46 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 1041 resolved dependencies against OSV; 50 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). 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": 1041
                }
              },
              {
                "code": "advisories_unassessed",
                "params": {
                  "count": 50
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 86,
              "affected_packages": 39,
              "assessed_packages": 1041,
              "unassessed_packages": 50,
              "affected_by_severity": "critical 3, high 20, moderate 16",
              "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": 1041,
              "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": 7
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 78,
        "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.979,
              "agent_instruction_files": [
                ".github/copilot-instructions.md",
                ".ralph/AGENT.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 7063
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".github/copilot-instructions.md, .ralph/AGENT.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".github/copilot-instructions.md, .ralph/AGENT.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": "94 of 96 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 94,
                      "sampled": 96
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [
                "Makefile",
                "docs/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.11,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.04
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, docs/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, docs/Makefile"
                    }
                  }
                ],
                "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": "tox.ini",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tox.ini"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "11 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 11,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "4 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 4,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 2",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 458598,
              "source_files_sampled": 1039,
              "oversized_source_files": 13
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "13/1039 source files over 60KB",
                "points": 54.3,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1039,
                      "oversized": 13
                    }
                  }
                ],
                "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",
    "Could not fetch npm package 'edx-enterprise' from its registry",
    "deps.dev does not index pypi:edx-enterprise@8.7.1; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T12:44:23.448396Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/openedx/edx-enterprise.svg",
  "full_name": "openedx/edx-enterprise",
  "license_state": "standard",
  "license_spdx": "AGPL-3.0"
}

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

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

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