Public record
Software health reportschema 0.26.0 · metrics 1.13.0 · 2026-07-22 13:57 UTC

Smithsonian / dpo-voyager

DPO Voyager - 3D Explorer and Tool Suite

JavaScript · TypeScriptApache-2.0★ 202 stars⑂ 45 forkssince Oct 2018View on GitHub ↗

Smithsonian/dpo-voyager holds a health index of 58 out of 100, placing it in the Moderate band. It scores highest on Vitality (94/100) and lowest on Security (28/100). It was last updated today. A single contributor accounts for most of its recent work.

58
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

58
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

188 followers336 public repossince Feb 2013

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
npmvoyagerpoints to another repo — not scored0.4.131,997124171 days ago

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

94Excellent · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
33.2/36Commit cadence — 48/52 weeks with commits
18/18Commit volume — 476 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year476
human_commit_share1
days_since_last_push0
active_weeks_last_year48
How it's scored
27/27Ships releases — 100 releases published
36/36Release recency — latest release 19 days ago
27/27Release cadence — a release every ~17 days
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count100
latest_release_tagv0.63.2
releases_from_tagsno
days_since_latest_release19
mean_days_between_releases17

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

54Moderate · 18% of overall
How it's scored
37.4/60Stars — 202 stars
13.7/25Forks — 45 forks
6.5/15Watchers — 16 watchers
Inputs used
forks45
stars202
watchers16
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (Apache-2.0)
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

61Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
7.8/22.5Commit distribution — top contributor authored 65% of commits
13.5/13.5Contributor breadth — 11 contributors
10/10OpenSSF Scorecard: Contributors — project has 9 contributing companies or organizations
Inputs used
bus_factor1
contributors_sampled11
top_contributor_share0.654
How it's scored
42.2/46.8Issue resolution — 90% of issues closed
32.8/38.3PR acceptance — 181/211 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/3 approved changesets -- score normalized to 0
Inputs used
merged_prs181
open_issues22
closed_issues203
issue_closed_ratio0.902
closed_unmerged_prs30
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
16.4/25Owner reach — 188 followers of Smithsonian
25/25Track record — 336 public repos, account ~13 yr old
Inputs used
followers188
owner_typeOrganization
is_verified
owner_loginSmithsonian
public_repos336
account_age_days4,901

Engineering Quality

Are baseline engineering and documentation practices in place?

44At risk · 20% of overall
How it's scored
0/24CI workflows
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 3 merged PRs checked by a CI test -- score normalized to 0
Inputs used
has_cino
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
0/10Topics
10/10Wiki
Inputs used
topics
has_wikiyes
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

28Critical · 16% of overall
How it's scored
6/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — no data
0/2.5CI-Tests — 0 out of 3 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/3 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 9 contributing companies or organizations
0/10Dangerous-Workflow — no data
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
7.5/7.5Maintained — 30 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — no data
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — no data
0/7.5Vulnerabilities — 38 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated14
scorecard_versionv5.5.0
checks_inconclusive4
scorecard_aggregate2.5
Excluded from scoring (no data or not applicable): branch_protection, dangerous_workflow, packaging, token_permissions. Remaining weights renormalized.
How it's scored
14/35Direct dependencies free of known advisories — 1 affected: ecstatic 0.5.8 (high 7.5)
4.9/25Indirect dependencies free of known advisories — 3 affected: lodash 1.0.2 (critical 9.1), minimatch 0.2.14 (high 7.5), minimatch 2.0.10 (high 7.5)
22.3/40No advisories left outstanding — 4 advisory-carrying package(s) unaddressed past 90 days; oldest published 3,127 days ago
Inputs used
sourceosv
advisories19
affected_packages4
assessed_packages68
unassessed_packages0
affected_by_severitycritical 1, high 3
direct_affected_packages1
Matched the npm:voyager@0.4.13 runtime dependency closure — what installing the published package pulls in — 68 packages. Reachability is not analyzed.

AI Readiness

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.

39At risk · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
13.3/40Legible commit history — 25 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.25
agent_instruction_files
agent_instruction_max_bytes
How it's scored
0/18One-command bootstrap
22/22Automated tests
0/11Lint / format config
11/11Static type checking — libs/ff-browser/tsconfig.json, libs/ff-core/tsconfig.json, libs/ff-graph/tsconfig.json, libs/ff-scene/tsconfig.json, libs/ff-three/tsconfig.json, libs/ff-ui/tsconfig.json, source/client/tsconfig.json, source/server/tsconfig.json, source/test/tsconfig.json
10/10Reproducible environment — Dockerfile, lockfile
0/10Demonstrated agent practice — no agent-authored commits among the last 100
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfilespackage-lock.json
has_dockerfileyes
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configslibs/ff-browser/tsconfig.json, libs/ff-core/tsconfig.json, libs/ff-graph/tsconfig.json, libs/ff-scene/tsconfig.json, libs/ff-three/tsconfig.json, libs/ff-ui/tsconfig.json, source/client/tsconfig.json, source/server/tsconfig.json, source/test/tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
How it's scored
27/45Type-checkable code — JavaScript with type-check config (libs/ff-browser/tsconfig.json, libs/ff-core/tsconfig.json, libs/ff-graph/tsconfig.json, libs/ff-scene/tsconfig.json, libs/ff-three/tsconfig.json, libs/ff-ui/tsconfig.json, source/client/tsconfig.json, source/server/tsconfig.json, source/test/tsconfig.json)
54.7/55Manageable file sizes — 2/328 source files over 60KB
Inputs used
primary_languageJavaScript
largest_source_bytes719,410
source_files_sampled328
oversized_source_files2
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — example
Inputs used
example_dirsexample
has_mcp_signalno
api_schema_files

Key facts

202GitHub stars
11contributors
476commits, last 12 months
0days since last push
100releases
1bus factor
22open issues
npmpackage ecosystems

Data collection warnings

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • npm package 'voyager' points at a different repository (https://github.com/wieden-kennedy/voyager); excluded from ecosystem scoring

More detail

Star and fork history 0 ★ / 45 ⇿
0Stars
45Forks
95Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

010203040504262019-072022-122026-06
Major 0Minor 54Patch 36

Each point covers 7 days.

OpenSSF Scorecard 2.5 / 10
2.5aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-22 13:57 UTC

8Binary-Artifactsbinaries present in source code
n/aBranch-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
0CI-Tests0 out of 3 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/3 approved changesets -- score normalized to 0
10Contributorsproject has 9 contributing companies or organizations
n/aDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
n/aPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
n/aToken-PermissionsNo tokens found
0Vulnerabilities38 existing vulnerabilities detected
Direct dependencies 29
RegistryPackageVersion constraintManifest
npm@photostructure/tz-lookup^11.4.0package.json
npmajv^8.6.2package.json
npmbuffer^6.0.3package.json
npmclient-zip^2.5.0package.json
npmclone-deep^4.0.1package.json
npmdayjs^1.11.19package.json
npmexpress^5.2.1package.json
npmfilenamify^4.3.0package.json
npmhandlebars^4.7.9package.json
npmhotkeys-js^3.8.7package.json
npmlit-element^2.5.1package.json
npmlit-html^1.4.1package.json
npmmoment^2.29.4package.json
npmmorgan^1.10.1package.json
npmnodemon^3.1.11package.json
npmpostcss^8.5.6package.json
npmprocess^0.11.10package.json
npmreadable-stream^3.6.0package.json
npmresolve-pathname^3.0.0package.json
npmsanitize-html^2.13.1package.json
npmsimple-dropzone^0.8.3package.json
npmstream-browserify^3.0.0package.json
npmsuncalc^1.9.0package.json
npmthree^0.182.0package.json
npmtinymce^6.8.3package.json
npmtoposort^2.0.2package.json
npmwebdav^5.10.0package.json
npmwebdav-server^2.6.2package.json
npmxml-js^1.6.11package.json
All dependencies 597

Full resolved dependency set from the GitHub dependency graph: 33 direct and 564 indirect (transitive) packages. The transitive closure is complete when the repository commits a lockfile.

RegistryPackageVersionRelation
npm@photostructure/tz-lookup11.4.0direct
npmajv6.12.6direct
npmajv8.12.0direct
npmajv8.17.1direct
npmajv8.18.0direct
npmajv8.7.1direct
npmbuffer6.0.3direct
npmclient-zip2.5.0direct
npmclone-deep4.0.1direct
npmdayjs1.11.19direct
npmexpress5.2.1direct
npmfilenamify4.3.0direct
npmhandlebars4.7.9direct
npmhotkeys-js3.8.7direct
npmlit-element2.5.1direct
npmlit-html1.4.1direct
npmmoment2.29.4direct
npmmorgan1.10.1direct
npmnodemon3.1.11direct
npmpostcss8.5.6direct
npmprocess0.11.10direct
npmreadable-stream3.6.0direct
npmresolve-pathname3.0.0direct
npmsanitize-html2.13.1direct
npmsimple-dropzone0.8.3direct
npmstream-browserify3.0.0direct
npmsuncalc1.9.0direct
npmthree0.182.0direct
npmtinymce6.8.3direct
npmtoposort2.0.2direct
npmwebdav5.10.0direct
npmwebdav-server2.6.2direct
npmxml-js1.6.11direct
npm@buttercup/fetch0.2.1indirect
npm@dimforge/rapier3d-compat0.12.0indirect
npm@discoveryjs/json-ext0.5.6indirect
npm@isaacs/cliui8.0.2indirect
npm@jest/pattern30.0.1indirect
npm@jest/schemas30.0.5indirect
npm@jest/types30.3.0indirect
npm@jridgewell/gen-mapping0.3.10indirect
npm@jridgewell/resolve-uri3.1.0indirect
npm@jridgewell/source-map0.3.8indirect
npm@jridgewell/sourcemap-codec1.5.2indirect
npm@jridgewell/trace-mapping0.3.27indirect
npm@nodable/entities2.2.0indirect
npm@parcel/watcher2.5.1indirect
npm@parcel/watcher-android-arm642.5.1indirect
npm@parcel/watcher-darwin-arm642.5.1indirect
npm@parcel/watcher-darwin-x642.5.1indirect
npm@parcel/watcher-freebsd-x642.5.1indirect
npm@parcel/watcher-linux-arm-glibc2.5.1indirect
npm@parcel/watcher-linux-arm-musl2.5.1indirect
npm@parcel/watcher-linux-arm64-glibc2.5.1indirect
npm@parcel/watcher-linux-arm64-musl2.5.1indirect
npm@parcel/watcher-linux-x64-glibc2.5.1indirect
npm@parcel/watcher-linux-x64-musl2.5.1indirect
npm@parcel/watcher-win32-arm642.5.1indirect
npm@parcel/watcher-win32-ia322.5.1indirect
npm@parcel/watcher-win32-x642.5.1indirect
npm@pkgjs/parseargs0.11.0indirect
npm@sinclair/typebox0.34.48indirect
npm@tweenjs/tween.js23.1.3indirect
npm@types/chai4.2.22indirect
npm@types/estree1.0.9indirect
npm@types/html-minifier-terser6.0.0indirect
npm@types/istanbul-lib-coverage2.0.6indirect
npm@types/istanbul-lib-report3.0.3indirect
npm@types/istanbul-reports3.0.4indirect
npm@types/json-schema7.0.15indirect
npm@types/mocha10.0.10indirect
npm@types/node14.18.63indirect
npm@types/node16.18.122indirect
npm@types/stats.js0.17.2indirect
npm@types/suncalc1.9.2indirect
npm@types/three0.182.0indirect
npm@types/webxr0.5.24indirect
npm@types/yargs17.0.35indirect
npm@types/yargs-parser21.0.3indirect
npm@ungap/structured-clone1.3.0indirect
npm@webassemblyjs/ast1.14.1indirect
npm@webassemblyjs/floating-point-hex-parser1.13.2indirect
npm@webassemblyjs/helper-api-error1.13.2indirect
npm@webassemblyjs/helper-buffer1.14.1indirect
npm@webassemblyjs/helper-numbers1.13.2indirect
npm@webassemblyjs/helper-wasm-bytecode1.13.2indirect
npm@webassemblyjs/helper-wasm-section1.14.1indirect
npm@webassemblyjs/ieee7541.13.2indirect
npm@webassemblyjs/leb1281.13.2indirect
npm@webassemblyjs/utf81.13.2indirect
npm@webassemblyjs/wasm-edit1.14.1indirect
npm@webassemblyjs/wasm-gen1.14.1indirect
npm@webassemblyjs/wasm-opt1.14.1indirect
npm@webassemblyjs/wasm-parser1.14.1indirect
npm@webassemblyjs/wast-printer1.14.1indirect
npm@webgpu/types0.1.44indirect
npm@webpack-cli/configtest1.2.0indirect
npm@webpack-cli/info1.5.0indirect
npm@webpack-cli/serve1.7.0indirect
npm@xtuc/ieee7541.2.0indirect
npm@xtuc/long4.2.2indirect
npmabab2.0.5indirect
npmabbrev1.1.1indirect
npmaccepts2.0.0indirect
npmacorn8.16.0indirect
npmacorn-import-phases1.0.4indirect
npmajv-formats2.1.1indirect
npmajv-keywords3.5.2indirect
npmajv-keywords5.1.0indirect
npmansi-regex5.0.1indirect
npmansi-regex6.2.2indirect
npmansi-sequence-parser1.1.3indirect
npmansi-styles3.2.1indirect
npmansi-styles4.3.0indirect
npmansi-styles6.2.3indirect
npmanymatch3.1.2indirect
npmanynum1.0.1indirect
npmarg4.1.3indirect
npmargparse2.0.1indirect
npmarray-find-index1.0.2indirect
npmasap2.0.6indirect
npmassertion-error1.1.0indirect
npmasync3.2.4indirect
npmbalanced-match1.0.2indirect
npmbase-641.0.0indirect
npmbase64-js1.5.1indirect
npmbaseline-browser-mapping2.10.0indirect
npmbasic-auth2.0.1indirect
npmbig.js5.2.2indirect
npmbinary-extensions2.2.0indirect
npmbody-parser2.2.2indirect
npmboolbase1.0.0indirect
npmbrace-expansion1.1.11indirect
npmbrace-expansion2.0.2indirect
npmbrace-expansion2.1.1indirect
npmbraces3.0.3indirect
npmbrowser-stdout1.3.1indirect
npmbrowserslist4.28.1indirect
npmbuffer-from1.1.2indirect
npmbyte-length1.0.2indirect
npmbytes3.1.2indirect
npmcall-bind-apply-helpers1.0.2indirect
npmcall-bound1.0.4indirect
npmcamel-case4.1.2indirect
npmcamelcase6.3.0indirect
npmcaniuse-api3.0.0indirect
npmcaniuse-lite1.0.30001777indirect
npmchai4.3.8indirect
npmchalk2.4.2indirect
npmchalk4.1.2indirect
npmcharenc0.0.2indirect
npmcheck-error1.0.3indirect
npmchokidar3.5.3indirect
npmchokidar4.0.3indirect
npmchrome-trace-event1.0.3indirect
npmci-info4.4.0indirect
npmclean-css5.2.2indirect
npmcliui7.0.4indirect
npmcliui8.0.1indirect
npmcolor-convert1.9.3indirect
npmcolor-convert2.0.1indirect
npmcolor-name1.1.3indirect
npmcolor-name1.1.4indirect
npmcolord2.9.3indirect
npmcolorette2.0.16indirect
npmcommander11.1.0indirect
npmcommander2.20.3indirect
npmcommander7.2.0indirect
npmcommander8.3.0indirect
npmconcat-map0.0.1indirect
npmconcurrently6.3.0indirect
npmcontent-disposition1.0.1indirect
npmcontent-type1.0.5indirect
npmcookie0.7.1indirect
npmcookie-signature1.2.2indirect
npmcopy-webpack-plugin14.0.0indirect
npmcreate-require1.1.1indirect
npmcross-spawn7.0.6indirect
npmcrypt0.0.2indirect
npmcss-declaration-sorter7.3.1indirect
npmcss-loader6.5.1indirect
npmcss-minimizer-webpack-plugin8.0.0indirect
npmcss-select4.1.3indirect
npmcss-select5.2.2indirect
npmcss-tree2.2.1indirect
npmcss-tree3.2.1indirect
npmcss-what5.1.0indirect
npmcss-what6.2.2indirect
npmcssesc3.0.0indirect
npmcssnano7.1.3indirect
npmcssnano-preset-default7.0.11indirect
npmcssnano-utils5.0.1indirect
npmcsso5.0.5indirect
npmdata-uri-to-buffer4.0.1indirect
npmdate-fns2.25.0indirect
npmdebug2.6.9indirect
npmdebug3.2.7indirect
npmdebug4.4.0indirect
npmdebug4.4.3indirect
npmdebuglog1.0.1indirect
npmdecamelize4.0.0indirect
npmdeep-eql4.1.3indirect
npmdeepmerge4.2.2indirect
npmdepd2.0.0indirect
npmdetect-libc1.0.3indirect
npmdezalgo1.0.3indirect
npmdiff4.0.2indirect
npmdiff7.0.0indirect
npmdom-converter0.2.0indirect
npmdom-serializer1.3.2indirect
npmdom-serializer2.0.0indirect
npmdomelementtype2.3.0indirect
npmdomhandler4.2.2indirect
npmdomhandler5.0.3indirect
npmdomutils2.8.0indirect
npmdomutils3.1.0indirect
npmdomutils3.2.2indirect
npmdot-case3.0.4indirect
npmdotenv10.0.0indirect
npmdunder-proto1.0.1indirect
npmeastasianwidth0.2.0indirect
npmee-first1.1.1indirect
npmelectron-to-chromium1.5.307indirect
npmemoji-regex8.0.0indirect
npmemoji-regex9.2.2indirect
npmemojis-list3.0.0indirect
npmencodeurl2.0.0indirect
npmenhanced-resolve5.24.0indirect
npmentities2.2.0indirect
npmentities4.5.0indirect
npmentities6.0.1indirect
npmenvinfo7.14.0indirect
npmes-define-property1.0.1indirect
npmes-errors1.3.0indirect
npmes-module-lexer2.1.0indirect
npmes-object-atoms1.1.1indirect
npmescalade3.2.0indirect
npmescape-html1.0.3indirect
npmescape-string-regexp1.0.5indirect
npmescape-string-regexp4.0.0indirect
npmeslint-scope5.1.1indirect
npmesrecurse4.3.0indirect
npmestraverse4.3.0indirect
npmestraverse5.3.0indirect
npmetag1.8.1indirect
npmevents3.3.0indirect
npmfast-deep-equal3.1.3indirect
npmfast-json-stable-stringify2.1.0indirect
npmfast-uri3.0.6indirect
npmfast-xml-builder1.2.0indirect
npmfast-xml-parser5.9.2indirect
npmfastest-levenshtein1.0.12indirect
npmfastparse1.1.2indirect
npmfdir6.5.0indirect
npmfetch-blob3.2.0indirect
npmfflate0.8.2indirect
npmfilename-reserved-regex2.0.0indirect
npmfill-range7.1.1indirect
npmfinalhandler2.1.1indirect
npmfind-up4.1.0indirect
npmfind-up5.0.0indirect
npmflat5.0.2indirect
npmforeground-child3.3.1indirect
npmformdata-polyfill4.0.10indirect
npmforwarded0.2.0indirect
npmfresh2.0.0indirect
npmfs.realpath1.0.0indirect
npmfsevents2.3.3indirect
npmfunction-bind1.1.2indirect
npmget-caller-file2.0.5indirect
npmget-func-name2.0.2indirect
npmget-intrinsic1.3.0indirect
npmget-proto1.0.1indirect
npmglob10.5.0indirect
npmglob7.2.0indirect
npmglob-parent5.1.2indirect
npmglob-parent6.0.2indirect
npmglob-to-regexp0.4.1indirect
npmgopd1.2.0indirect
npmgraceful-fs4.2.11indirect
npmhandlebars-loader1.7.3indirect
npmhas-flag3.0.0indirect
npmhas-flag4.0.0indirect
npmhas-symbols1.1.0indirect
npmhasown2.0.2indirect
npmhe1.2.0indirect
npmhosted-git-info2.8.9indirect
npmhot-patcher2.0.1indirect
npmhtml-minifier-terser6.0.2indirect
npmhtml-webpack-plugin5.6.7indirect
npmhtmlparser26.1.0indirect
npmhtmlparser28.0.2indirect
npmhttp-errors2.0.1indirect
npmiconv-lite0.6.3indirect
npmiconv-lite0.7.2indirect
npmicss-utils5.1.0indirect
npmieee7541.2.1indirect
npmignore-by-default1.0.1indirect
npmimmutable5.1.5indirect
npmimport-local3.1.0indirect
npminflight1.0.6indirect
npminherits2.0.4indirect
npminterpret2.2.0indirect
npmipaddr.js1.9.1indirect
npmis-binary-path2.1.0indirect
npmis-buffer1.1.6indirect
npmis-core-module2.16.0indirect
npmis-extglob2.1.1indirect
npmis-fullwidth-code-point3.0.0indirect
npmis-glob4.0.3indirect
npmis-number7.0.0indirect
npmis-path-inside3.0.3indirect
npmis-plain-obj2.1.0indirect
npmis-plain-object2.0.4indirect
npmis-plain-object5.0.0indirect
npmis-promise4.0.0indirect
npmis-unicode-supported0.1.0indirect
npmis-unsafe1.0.1indirect
npmisexe2.0.0indirect
npmisobject3.0.1indirect
npmjackspeak3.4.3indirect
npmjest-regex-util30.0.1indirect
npmjest-util30.3.0indirect
npmjest-worker27.5.1indirect
npmjest-worker30.3.0indirect
npmjs-yaml4.1.0indirect
npmjson-parse-even-better-errors2.3.1indirect
npmjson-schema-traverse0.4.1indirect
npmjson-schema-traverse1.0.0indirect
npmjson-stable-stringify1.0.1indirect
npmjson51.0.2indirect
npmjsonc-parser3.3.1indirect
npmjsonify0.0.0indirect
npmkind-of6.0.3indirect
npmlayerr3.0.0indirect
npmlicense-checker25.0.1indirect
npmlilconfig3.1.3indirect
npmloader-runner4.3.2indirect
npmloader-utils1.4.2indirect
npmlocate-path5.0.0indirect
npmlocate-path6.0.0indirect
npmlodash4.17.21indirect
npmlodash.memoize4.1.2indirect
npmlodash.uniq4.5.0indirect
npmlog-symbols4.1.0indirect
npmloupe2.3.6indirect
npmlower-case2.0.2indirect
npmlru-cache10.4.3indirect
npmlru-cache6.0.0indirect
npmlunr2.3.9indirect
npmmake-error1.3.6indirect
npmmarked4.3.0indirect
npmmath-intrinsics1.1.0indirect
npmmd52.3.0indirect
npmmdn-data2.0.28indirect
npmmdn-data2.27.1indirect
npmmedia-typer1.1.0indirect
npmmerge-descriptors2.0.0indirect
npmmerge-stream2.0.0indirect
npmmeshoptimizer0.22.0indirect
npmmicromatch4.0.8indirect
npmmime-db1.51.0indirect
npmmime-db1.54.0indirect
npmmime-types2.1.34indirect
npmmime-types3.0.2indirect
npmmini-css-extract-plugin2.4.4indirect
npmminimatch3.1.2indirect
npmminimatch7.4.6indirect
npmminimatch9.0.9indirect
npmminimist1.2.6indirect
npmminipass7.1.3indirect
npmmkdirp0.5.6indirect
npmmocha11.7.6indirect
npmms2.0.0indirect
npmms2.1.3indirect
npmnanoid3.3.11indirect
npmnegotiator1.0.0indirect
npmneo-async2.6.2indirect
npmnested-property4.0.0indirect
npmno-case3.0.4indirect
npmnode-addon-api7.1.1indirect
npmnode-domexception1.0.0indirect
npmnode-fetch3.3.2indirect
npmnode-releases2.0.36indirect
npmnopt1.0.10indirect
npmnopt4.0.3indirect
npmnormalize-package-data2.5.0indirect
npmnormalize-path3.0.0indirect
npmnpm-normalize-package-bin1.0.1indirect
npmnth-check2.0.1indirect
npmobject-assign4.1.1indirect
npmobject-inspect1.13.4indirect
npmon-finished2.3.0indirect
npmon-finished2.4.1indirect
npmon-headers1.1.0indirect
npmonce1.4.0indirect
npmos-homedir1.0.2indirect
npmos-tmpdir1.0.2indirect
npmosenv0.1.5indirect
npmp-limit2.3.0indirect
npmp-limit3.1.0indirect
npmp-locate4.1.0indirect
npmp-locate5.0.0indirect
npmp-try2.2.0indirect
npmpackage-json-from-dist1.0.1indirect
npmparam-case3.0.4indirect
npmparse-srcset1.0.2indirect
npmparseurl1.3.3indirect
npmpascal-case3.1.2indirect
npmpath-exists4.0.0indirect
npmpath-expression-matcher1.5.0indirect
npmpath-is-absolute1.0.1indirect
npmpath-key3.1.1indirect
npmpath-parse1.0.7indirect
npmpath-posix1.0.0indirect
npmpath-scurry1.11.1indirect
npmpath-to-regexp8.3.0indirect
npmpathval1.1.1indirect
npmpicocolors1.1.1indirect
npmpicomatch2.3.1indirect
npmpicomatch4.0.3indirect
npmpkg-dir4.2.0indirect
npmpostcss-calc10.1.1indirect
npmpostcss-colormin7.0.6indirect
npmpostcss-convert-values7.0.9indirect
npmpostcss-discard-comments7.0.6indirect
npmpostcss-discard-duplicates7.0.2indirect
npmpostcss-discard-empty7.0.1indirect
npmpostcss-discard-overridden7.0.1indirect
npmpostcss-merge-longhand7.0.5indirect
npmpostcss-merge-rules7.0.8indirect
npmpostcss-minify-font-values7.0.1indirect
npmpostcss-minify-gradients7.0.1indirect
npmpostcss-minify-params7.0.6indirect
npmpostcss-minify-selectors7.0.6indirect
npmpostcss-modules-extract-imports3.0.0indirect
npmpostcss-modules-local-by-default4.0.0indirect
npmpostcss-modules-scope3.0.0indirect
npmpostcss-modules-values4.0.0indirect
npmpostcss-normalize-charset7.0.1indirect
npmpostcss-normalize-display-values7.0.1indirect
npmpostcss-normalize-positions7.0.1indirect
npmpostcss-normalize-repeat-style7.0.1indirect
npmpostcss-normalize-string7.0.1indirect
npmpostcss-normalize-timing-functions7.0.1indirect
npmpostcss-normalize-unicode7.0.6indirect
npmpostcss-normalize-url7.0.1indirect
npmpostcss-normalize-whitespace7.0.1indirect
npmpostcss-ordered-values7.0.2indirect
npmpostcss-reduce-initial7.0.6indirect
npmpostcss-reduce-transforms7.0.1indirect
npmpostcss-selector-parser6.1.2indirect
npmpostcss-selector-parser7.1.1indirect
npmpostcss-svgo7.1.1indirect
npmpostcss-unique-selectors7.0.5indirect
npmpostcss-value-parser4.2.0indirect
npmpretty-error4.0.0indirect
npmproxy-addr2.0.7indirect
npmpstree.remy1.1.8indirect
npmpunycode2.3.1indirect
npmqs6.14.1indirect
npmquerystringify2.2.0indirect
npmrandombytes2.1.0indirect
npmrange-parser1.2.1indirect
npmraw-body3.0.2indirect
npmread-installed4.0.3indirect
npmread-package-json2.1.2indirect
npmreaddir-scoped-modules1.1.0indirect
npmreaddirp3.6.0indirect
npmreaddirp4.1.2indirect
npmrechoir0.7.1indirect
npmrelateurl0.2.7indirect
npmrenderkid3.0.0indirect
npmrequire-directory2.1.1indirect
npmrequire-from-string2.0.2indirect
npmrequires-port1.0.0indirect
npmresolve1.22.9indirect
npmresolve-cwd3.0.0indirect
npmresolve-from5.0.0indirect
npmrouter2.2.0indirect
npmrxjs6.6.7indirect
npmsafe-buffer5.1.2indirect
npmsafe-buffer5.2.1indirect
npmsafer-buffer2.1.2indirect
npmsass1.98.0indirect
npmsass-loader16.0.5indirect
npmsax1.5.0indirect
npmschema-utils3.1.1indirect
npmschema-utils4.2.0indirect
npmschema-utils4.3.2indirect
npmschema-utils4.3.3indirect
npmsemver5.7.2indirect
npmsemver7.5.3indirect
npmsemver7.5.4indirect
npmsend1.2.1indirect
npmserialize-javascript6.0.2indirect
npmserialize-javascript7.0.4indirect
npmserve-static2.2.1indirect
npmsetprototypeof1.2.0indirect
npmshallow-clone3.0.1indirect
npmshebang-command2.0.0indirect
npmshebang-regex3.0.0indirect
npmshiki0.14.7indirect
npmside-channel1.1.0indirect
npmside-channel-list1.0.0indirect
npmside-channel-map1.0.1indirect
npmside-channel-weakmap1.0.2indirect
npmsignal-exit4.1.0indirect
npmsimple-update-notifier2.0.0indirect
npmslide1.1.6indirect
npmsource-map0.6.1indirect
npmsource-map0.7.4indirect
npmsource-map-js1.2.1indirect
npmsource-map-loader3.0.2indirect
npmsource-map-support0.5.20indirect
npmspawn-command0.0.2-1indirect
npmspdx-compare1.0.0indirect
npmspdx-correct3.1.1indirect
npmspdx-exceptions2.3.0indirect
npmspdx-expression-parse3.0.1indirect
npmspdx-license-ids3.0.10indirect
npmspdx-ranges2.1.1indirect
npmspdx-satisfies4.0.1indirect
npmstatuses2.0.2indirect
npmstring-width4.2.3indirect
npmstring-width5.1.2indirect
npmstring_decoder1.3.0indirect
npmstrip-ansi6.0.1indirect
npmstrip-ansi7.2.0indirect
npmstrip-json-comments3.1.1indirect
npmstrip-outer1.0.1indirect
npmstrnum2.4.1indirect
npmstylehacks7.0.8indirect
npmsupports-color5.5.0indirect
npmsupports-color7.2.0indirect
npmsupports-color8.1.1indirect
npmsupports-preserve-symlinks-flag1.0.0indirect
npmsvgo4.0.1indirect
npmtapable2.3.3indirect
npmterser5.43.1indirect
npmterser-webpack-plugin5.6.1indirect
npmtinyglobby0.2.15indirect
npmto-regex-range5.0.1indirect
npmtoidentifier1.0.1indirect
npmtouch3.1.0indirect
npmtree-kill1.2.2indirect
npmtreeify1.1.0indirect
npmtrim-repeated1.0.0indirect
npmts-loader9.5.2indirect
npmts-node9.1.1indirect
npmtslib1.14.1indirect
npmtslib2.3.1indirect
npmtype-detect4.0.8indirect
npmtype-is2.0.1indirect
npmtypedoc0.23.28indirect
npmtypescript4.2.4indirect
npmtypescript4.9.5indirect
npmtypescript-json-schema0.50.1indirect
npmuglify-js3.14.5indirect
npmundefsafe2.0.5indirect
npmunpipe1.0.0indirect
npmupdate-browserslist-db1.2.3indirect
npmuri-js4.4.1indirect
npmurl-join5.0.0indirect
npmurl-parse1.5.10indirect
npmutil-deprecate1.0.2indirect
npmutil-extend1.0.3indirect
npmutila0.4.0indirect
npmvalidate-npm-package-license3.0.4indirect
npmvary1.1.2indirect
npmvscode-oniguruma1.7.0indirect
npmvscode-textmate8.0.0indirect
npmwatchpack2.5.1indirect
npmweb-streams-polyfill3.3.3indirect
npmwebpack5.107.2indirect
npmwebpack-cli4.10.0indirect
npmwebpack-merge5.8.0indirect
npmwebpack-sources3.5.0indirect
npmwhich2.0.2indirect
npmwildcard2.0.0indirect
npmwordwrap1.0.0indirect
npmworkerpool9.3.4indirect
npmwrap-ansi7.0.0indirect
npmwrap-ansi8.1.0indirect
npmwrappy1.0.2indirect
npmxml-js-builder1.0.3indirect
npmxml-naming0.1.0indirect
npmy18n5.0.8indirect
npmyallist4.0.0indirect
npmyargs16.2.0indirect
npmyargs17.7.2indirect
npmyargs-parser20.2.9indirect
npmyargs-parser21.1.1indirect
npmyargs-unparser2.0.0indirect
npmyn3.1.1indirect
npmyocto-queue0.1.0indirect
npmzip-js-esm1.1.1indirect
Dependency advisories 4

Installing npm:voyager@0.4.13 pulls in 68 packages, direct and transitive: 4 carry known advisories, of which 1 are direct dependencies.

PackageVersionRelationSeverityAdvisoriesFixed in
lodash1.0.2indirectcritical54.18.0
ecstatic0.5.8directhigh44.1.3
minimatch0.2.14indirecthigh510.2.3
minimatch2.0.10indirecthigh510.2.3

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 40060,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "CSS": 2195,
        "GLSL": 9335,
        "SCSS": 89782,
        "Shell": 505,
        "Dockerfile": 1266,
        "Handlebars": 1775,
        "JavaScript": 4439308,
        "TypeScript": 1960021
      },
      "pushed_at": "2026-07-22T12:18:04Z",
      "created_at": "2018-10-04T08:35:49Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-02T17:54:19Z",
      "description": "DPO Voyager - 3D Explorer and Tool Suite",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "master",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript",
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://www.si.edu/",
      "name": "Smithsonian Institution (org)",
      "type": "Organization",
      "login": "Smithsonian",
      "company": null,
      "location": "Washington, DC",
      "followers": 188,
      "avatar_url": "https://avatars.githubusercontent.com/u/3631392?v=4",
      "created_at": "2013-02-18T23:42:00Z",
      "is_verified": null,
      "public_repos": 336,
      "account_age_days": 4901
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.63.2",
          "kind": "patch",
          "published_at": "2026-07-02T17:57:24Z"
        },
        {
          "tag": "v0.63.1",
          "kind": "patch",
          "published_at": "2026-06-30T17:37:03Z"
        },
        {
          "tag": "v0.63.0",
          "kind": "minor",
          "published_at": "2026-06-26T16:07:26Z"
        },
        {
          "tag": "v0.62.0",
          "kind": "minor",
          "published_at": "2026-05-29T12:41:38Z"
        },
        {
          "tag": "v0.61.1",
          "kind": "patch",
          "published_at": "2026-05-12T21:28:10Z"
        },
        {
          "tag": "v0.61.0",
          "kind": "minor",
          "published_at": "2026-05-01T17:32:46Z"
        },
        {
          "tag": "v0.60.1",
          "kind": "patch",
          "published_at": "2026-03-26T19:53:37Z"
        },
        {
          "tag": "v0.60.0",
          "kind": "minor",
          "published_at": "2026-03-26T17:52:03Z"
        },
        {
          "tag": "v0.59.0",
          "kind": "minor",
          "published_at": "2026-02-27T17:58:03Z"
        },
        {
          "tag": "v0.58.0",
          "kind": "minor",
          "published_at": "2026-01-30T15:29:49Z"
        },
        {
          "tag": "v0.57.1",
          "kind": "patch",
          "published_at": "2025-12-09T15:30:47Z"
        },
        {
          "tag": "v0.57.0",
          "kind": "minor",
          "published_at": "2025-12-04T19:20:09Z"
        },
        {
          "tag": "v0.56.2",
          "kind": "patch",
          "published_at": "2025-11-17T13:25:55Z"
        },
        {
          "tag": "v0.56.1",
          "kind": "patch",
          "published_at": "2025-09-26T20:05:51Z"
        },
        {
          "tag": "v0.56.0",
          "kind": "minor",
          "published_at": "2025-09-26T17:15:40Z"
        },
        {
          "tag": "v0.55.0",
          "kind": "minor",
          "published_at": "2025-08-27T13:25:51Z"
        },
        {
          "tag": "v0.54.1",
          "kind": "patch",
          "published_at": "2025-08-07T14:05:56Z"
        },
        {
          "tag": "v0.54.0",
          "kind": "minor",
          "published_at": "2025-07-31T17:40:55Z"
        },
        {
          "tag": "v0.53.0",
          "kind": "minor",
          "published_at": "2025-07-03T17:09:00Z"
        },
        {
          "tag": "v0.52.0",
          "kind": "minor",
          "published_at": "2025-05-29T19:42:20Z"
        },
        {
          "tag": "v0.51.0",
          "kind": "minor",
          "published_at": "2025-04-25T14:43:19Z"
        },
        {
          "tag": "v0.50.0",
          "kind": "minor",
          "published_at": "2025-03-28T17:20:48Z"
        },
        {
          "tag": "v0.49.0",
          "kind": "minor",
          "published_at": "2025-02-28T12:49:54Z"
        },
        {
          "tag": "v0.48.0",
          "kind": "minor",
          "published_at": "2025-01-31T19:09:35Z"
        },
        {
          "tag": "v0.47.0",
          "kind": "minor",
          "published_at": "2024-12-20T17:18:04Z"
        },
        {
          "tag": "v0.46.1",
          "kind": "patch",
          "published_at": "2024-11-26T20:11:34Z"
        },
        {
          "tag": "v0.46.0",
          "kind": "minor",
          "published_at": "2024-11-26T17:57:08Z"
        },
        {
          "tag": "v0.45.0",
          "kind": "minor",
          "published_at": "2024-09-27T17:55:54Z"
        },
        {
          "tag": "v0.44.0",
          "kind": "minor",
          "published_at": "2024-08-29T18:00:04Z"
        },
        {
          "tag": "v0.43.1",
          "kind": "patch",
          "published_at": "2024-08-22T18:31:32Z"
        },
        {
          "tag": "v0.43.0",
          "kind": "minor",
          "published_at": "2024-07-26T13:57:18Z"
        },
        {
          "tag": "v0.42.1",
          "kind": "patch",
          "published_at": "2024-07-03T15:28:40Z"
        },
        {
          "tag": "v0.42.0",
          "kind": "minor",
          "published_at": "2024-06-27T18:49:17Z"
        },
        {
          "tag": "v0.41.0",
          "kind": "minor",
          "published_at": "2024-05-22T20:05:36Z"
        },
        {
          "tag": "v0.40.1",
          "kind": "patch",
          "published_at": "2024-04-25T18:25:25Z"
        },
        {
          "tag": "v0.39.0",
          "kind": "minor",
          "published_at": "2024-03-28T18:59:24Z"
        },
        {
          "tag": "v0.38.0",
          "kind": "minor",
          "published_at": "2024-02-29T20:05:30Z"
        },
        {
          "tag": "v0.37.0",
          "kind": "minor",
          "published_at": "2024-01-25T20:07:38Z"
        },
        {
          "tag": "v0.36.0",
          "kind": "minor",
          "published_at": "2023-12-15T13:45:39Z"
        },
        {
          "tag": "v0.35.1",
          "kind": "patch",
          "published_at": "2023-12-04T21:21:39Z"
        },
        {
          "tag": "v0.35.0",
          "kind": "minor",
          "published_at": "2023-11-30T18:46:30Z"
        },
        {
          "tag": "v0.34.1",
          "kind": "patch",
          "published_at": "2023-11-17T19:48:51Z"
        },
        {
          "tag": "v0.34.0",
          "kind": "minor",
          "published_at": "2023-11-01T17:28:43Z"
        },
        {
          "tag": "v0.33.0",
          "kind": "minor",
          "published_at": "2023-10-02T18:30:51Z"
        },
        {
          "tag": "v0.32.0",
          "kind": "minor",
          "published_at": "2023-09-01T18:39:52Z"
        },
        {
          "tag": "v0.31.0",
          "kind": "minor",
          "published_at": "2023-07-28T16:20:53Z"
        },
        {
          "tag": "v0.30.2",
          "kind": "patch",
          "published_at": "2023-07-06T17:23:00Z"
        },
        {
          "tag": "v0.30.1",
          "kind": "patch",
          "published_at": "2023-06-29T21:20:44Z"
        },
        {
          "tag": "v0.29.1",
          "kind": "patch",
          "published_at": "2023-06-13T12:20:28Z"
        },
        {
          "tag": "v0.29.0",
          "kind": "minor",
          "published_at": "2023-06-01T20:06:06Z"
        },
        {
          "tag": "v0.28.0",
          "kind": "minor",
          "published_at": "2023-04-27T18:38:28Z"
        },
        {
          "tag": "v0.27.0",
          "kind": "minor",
          "published_at": "2023-03-31T14:46:06Z"
        },
        {
          "tag": "v0.26.1",
          "kind": "patch",
          "published_at": "2023-03-01T12:26:44Z"
        },
        {
          "tag": "v0.26.0",
          "kind": "minor",
          "published_at": "2023-02-23T17:00:54Z"
        },
        {
          "tag": "v0.25.0",
          "kind": "minor",
          "published_at": "2023-02-02T17:31:29Z"
        },
        {
          "tag": "v0.24.0",
          "kind": "minor",
          "published_at": "2022-12-16T19:48:57Z"
        },
        {
          "tag": "v0.23.0",
          "kind": "minor",
          "published_at": "2022-11-17T17:20:12Z"
        },
        {
          "tag": "v0.22.1",
          "kind": "patch",
          "published_at": "2022-10-14T19:57:06Z"
        },
        {
          "tag": "v0.22.0",
          "kind": "minor",
          "published_at": "2022-09-30T15:32:53Z"
        },
        {
          "tag": "v0.21.1",
          "kind": "patch",
          "published_at": "2022-08-25T16:35:54Z"
        },
        {
          "tag": "v0.21.0",
          "kind": "minor",
          "published_at": "2022-08-25T15:38:46Z"
        },
        {
          "tag": "v0.20.0",
          "kind": "minor",
          "published_at": "2022-07-28T15:37:37Z"
        },
        {
          "tag": "v0.19.0",
          "kind": "minor",
          "published_at": "2022-07-01T13:41:36Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2022-05-27T13:12:03Z"
        },
        {
          "tag": "v0.17.5",
          "kind": "patch",
          "published_at": "2022-05-10T16:28:24Z"
        },
        {
          "tag": "v0.17.4",
          "kind": "patch",
          "published_at": "2022-05-05T14:14:33Z"
        },
        {
          "tag": "v0.17.3",
          "kind": "patch",
          "published_at": "2022-05-03T19:01:57Z"
        },
        {
          "tag": "v0.17.2",
          "kind": "patch",
          "published_at": "2022-05-02T21:19:30Z"
        },
        {
          "tag": "v0.17.1",
          "kind": "patch",
          "published_at": "2022-05-02T20:33:59Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2022-05-02T18:50:32Z"
        },
        {
          "tag": "v0.16.1",
          "kind": "patch",
          "published_at": "2022-04-08T13:32:53Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2022-03-23T17:05:13Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2022-02-02T15:40:39Z"
        },
        {
          "tag": "v0.14.2",
          "kind": "patch",
          "published_at": "2021-12-02T15:34:44Z"
        },
        {
          "tag": "v0.14.1",
          "kind": "patch",
          "published_at": "2021-09-30T13:50:52Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2021-09-16T15:23:47Z"
        },
        {
          "tag": "v0.13.2",
          "kind": "patch",
          "published_at": "2021-08-12T18:54:43Z"
        },
        {
          "tag": "v0.13.1",
          "kind": "patch",
          "published_at": "2021-07-09T16:12:24Z"
        },
        {
          "tag": "v0.13.0",
          "kind": "minor",
          "published_at": "2021-06-17T16:59:00Z"
        },
        {
          "tag": "v0.12.3",
          "kind": "patch",
          "published_at": "2021-05-14T16:16:06Z"
        },
        {
          "tag": "0.12.2",
          "kind": "patch",
          "published_at": "2021-04-19T13:28:32Z"
        },
        {
          "tag": "v0.12.1",
          "kind": "patch",
          "published_at": "2021-04-16T16:29:52Z"
        },
        {
          "tag": "v0.12.0",
          "kind": "minor",
          "published_at": "2021-04-05T12:46:19Z"
        },
        {
          "tag": "v0.11.1",
          "kind": "patch",
          "published_at": "2021-02-04T18:53:21Z"
        },
        {
          "tag": "0.11.0",
          "kind": "minor",
          "published_at": "2021-01-21T19:11:50Z"
        },
        {
          "tag": "v0.10.1",
          "kind": "patch",
          "published_at": "2020-12-11T15:47:03Z"
        },
        {
          "tag": "v0.10.0.3",
          "kind": "other",
          "published_at": "2020-11-20T14:02:50Z"
        },
        {
          "tag": "v0.10.0.2",
          "kind": "other",
          "published_at": "2020-11-18T15:15:02Z"
        },
        {
          "tag": "v0.10.0.1",
          "kind": "other",
          "published_at": "2020-11-12T20:56:40Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2020-11-12T16:45:53Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2020-06-26T13:20:11Z"
        },
        {
          "tag": "v0.8.1.2",
          "kind": "other",
          "published_at": "2020-05-11T14:11:35Z"
        },
        {
          "tag": "v0.8.1.1",
          "kind": "other",
          "published_at": "2020-03-11T13:01:52Z"
        },
        {
          "tag": "v0.8.1",
          "kind": "patch",
          "published_at": "2020-03-11T12:59:26Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2020-02-11T19:46:30Z"
        },
        {
          "tag": "v0.7.5",
          "kind": "patch",
          "published_at": "2019-12-17T12:21:47Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2019-10-25T10:46:15Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2019-07-22T14:01:50Z"
        },
        {
          "tag": "v0.6.4",
          "kind": "patch",
          "published_at": "2019-06-24T20:10:17Z"
        },
        {
          "tag": "v0.6.3",
          "kind": "patch",
          "published_at": "2019-05-19T18:45:48Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "268e2b1a02ed87a0342fee35a5a39fd74e073808",
          "body": "Dev bugfix",
          "is_bot": false,
          "headline": "Merge pull request #480 from Smithsonian/dev-bugfix",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-07-02T17:54:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5373dc9655a525e5f97fba7fde856708adcdde1e",
          "body": null,
          "is_bot": false,
          "headline": "version increment",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-07-02T16:45:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81203b369a6494f77def9ac297348b4645e627ca",
          "body": null,
          "is_bot": false,
          "headline": "Tour creation bug fix",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-07-02T14:30:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4319ace1f62873a3a79fce836fcbf9006f134f84",
          "body": null,
          "is_bot": false,
          "headline": "Null animation bug fix",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-07-02T12:12:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "077fdc7e113416910368eecc7de93e88c477f784",
          "body": null,
          "is_bot": false,
          "headline": "Make animation targets per action to avoid belnding",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-07-01T16:19:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02dfffcb01507c28a6acfb091e0a0660b3bcac18",
          "body": "Dev bugfix",
          "is_bot": false,
          "headline": "Merge pull request #479 from Smithsonian/dev-bugfix",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-30T17:36:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d8214f725c32181a9340d47be06622769f6574d",
          "body": null,
          "is_bot": false,
          "headline": "Bug fix for annotation triggers firing when leaving tour",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-30T15:11:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d3c07c8071094b149fddefba4d13667e43afb2e",
          "body": null,
          "is_bot": false,
          "headline": "Bug fix for non-robust tour trigger definitions",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-30T13:46:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9f58789a244023cb77eea6d6f122a9510706e2f",
          "body": "Rc 63",
          "is_bot": false,
          "headline": "Merge pull request #477 from Smithsonian/rc-63",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-26T15:59:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9baa58cf08a73f69807daaeba5cb6d77c1e57a9e",
          "body": null,
          "is_bot": false,
          "headline": "Docs & version update",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-26T15:57:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84c50f5771bd05c5080321c78fe1675237d31db9",
          "body": null,
          "is_bot": false,
          "headline": "Bug fixes",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-25T22:18:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4dd6a503221ae8b6acce4c485ec39d74abf565ab",
          "body": null,
          "is_bot": false,
          "headline": "Cache anno visibility after onLoad events",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-25T19:41:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bfced71e15a4737372e3cc234acecfcb134245f6",
          "body": null,
          "is_bot": false,
          "headline": "Allowed tour actions tweak",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-25T19:37:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "183f47c1cb4cb7cf94dda43096c80b0567e52af5",
          "body": null,
          "is_bot": false,
          "headline": "Bug fixes from team testing. Disabled saving on annotation visibility.",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-25T19:13:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77efdab612cd3c44abd68bf50ded6d72135e14d8",
          "body": null,
          "is_bot": false,
          "headline": "Audio bug fix",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-25T15:18:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86bb6f3c0d77db853e076f2bd35bd779d2f5b3ea",
          "body": null,
          "is_bot": false,
          "headline": "Action reset fixes",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-25T14:01:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e56c04a1691240df940cb0f9979080f02218305c",
          "body": null,
          "is_bot": false,
          "headline": "Added anno visibility toggle. Bug fixes.",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-25T12:07:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "80f81ec46d616dbf8913cb7fccbb5a3b7f963d0c",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'dev-animation' into rc-63",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-24T19:18:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47e3a2e97886404aef8a2c8b1ba11602a40a19f3",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'dep-update' into rc-63",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-24T19:18:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c23e99146296a4b1cc83144b05d71354641d122b",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'dev-bugfix' into rc-63",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-24T19:18:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e960d2dbcb2caaa29869d1286979419d7231b2aa",
          "body": null,
          "is_bot": false,
          "headline": "Documentation update",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-24T18:22:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cda570c654fe115536d4a3820e4b0bf90eee1742",
          "body": null,
          "is_bot": false,
          "headline": "Hide/Show annotation actions",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-24T18:16:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c06231a69bcb30f21fe832ade4167ccdee427a92",
          "body": null,
          "is_bot": false,
          "headline": "Documentation update",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-24T15:15:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bfa95c4e13cf8d315ebf4b5df9b5c65ae04e6800",
          "body": "…and animation clamp option.",
          "is_bot": false,
          "headline": "Hierarchy and derivative loading bug fix. OnBegin and OnEnd triggers …",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-23T16:23:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b1ff02cc5f1aa098a13342d8a4656b1d2942fe5",
          "body": null,
          "is_bot": false,
          "headline": "Dependency updates",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-18T16:45:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6f7d58cf96b178f0aa778465c5f31de42789a68",
          "body": null,
          "is_bot": false,
          "headline": "Add audio sync to animation. Schema update. Bug fixes.",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-17T21:36:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3c080aa8d8c3bbb44365e2aed2046c4243cd439",
          "body": null,
          "is_bot": false,
          "headline": "Add initial audio trigger support",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-16T17:51:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ffb40889952e6a8db09cc78d6b9d18909f2b12e3",
          "body": null,
          "is_bot": false,
          "headline": "Reset animation states when entering or exiting a tour",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-12T16:05:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "219d18281cad1c43413fd4c67089c48a7fd1436d",
          "body": null,
          "is_bot": false,
          "headline": "Bug fix for article focus in tours and scrolling in right pane",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-12T14:54:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4123495932ae66ab1c7c1ac41acc94f473a1effe",
          "body": null,
          "is_bot": false,
          "headline": "WIP Tour step action trigger",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-11T15:48:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9df3bd848f7d7be58b0edcad21b44de6c0fc364c",
          "body": null,
          "is_bot": false,
          "headline": "Updated fix for sceneview callbacks (#470)",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-09T15:26:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f086e150d2d83e29ee4535da36a4ebcd0c4e90bd",
          "body": null,
          "is_bot": false,
          "headline": "Fix for sceneview callbacks when changing scenes (#470)",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-09T14:28:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2cde58e1013c54be0af050a813bf2a5958e141e",
          "body": "A component (or a model/light's transform) may already be gone when this\nruns during node teardown on a document swap",
          "is_bot": false,
          "headline": "Handle missing component in updateComponentTarget",
          "author_name": "Sebastien DUMETZ",
          "author_login": "sdumetz",
          "committed_at": "2026-06-08T06:56:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5642c2aa1962b44f69c2061867e721860b1c68b",
          "body": null,
          "is_bot": false,
          "headline": "Slicer and measurement fixed for post-animated meshes",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-06-04T15:36:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c981c6e3ab4cbf03961d4ed7716ac5c3bc3d5a4",
          "body": "Rc 62",
          "is_bot": false,
          "headline": "Merge pull request #468 from Smithsonian/rc-62",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-05-29T12:36:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5de8c7cf72b025d28027482d37eb0a67d6967a1a",
          "body": "Remove \"Reverse\" animation type and allow negative animation speed instead",
          "is_bot": false,
          "headline": "Merge pull request #467 from Holusion/allowNegativeSpeed",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-05-28T11:47:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af1aedc55b168fb796365ac6099532576bbc7a0d",
          "body": null,
          "is_bot": false,
          "headline": "Remove Reverse animation and allow  negative speed",
          "author_name": "Inao0",
          "author_login": "Inao0",
          "committed_at": "2026-05-28T10:03:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "21769d7d576f521190532ed4ab46f25905a56c87",
          "body": null,
          "is_bot": false,
          "headline": "version increment",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-05-27T18:21:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c710d0a214be6fe0db0e8cc414766c34e8e01902",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'dev-animation' into rc-62",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-05-27T17:40:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "236ab458f99de3a78b57f26e8937ce6d8fb31ace",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'dev-bugfix' into rc-62",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-05-27T17:40:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49f96e69e39e72cf8bbf06f86ab1a4dfd4a51ce2",
          "body": "… speed param and 'reverse' style added",
          "is_bot": false,
          "headline": "onLoad animation synched on scene load, multi-material model bug fix,…",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-05-27T15:57:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3324d6c03dc2e63f21c4e96cc73bc5769a74d4c0",
          "body": "…m:ndejardin425/dpo-voyager into ndejardin425-fix/article-image-upload-undefined-folder",
          "is_bot": false,
          "headline": "Merge branch 'fix/article-image-upload-undefined-folder' of github.co…",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-05-14T14:02:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56022cd16aadf27109ef2f09c3b862e256d8be5c",
          "body": null,
          "is_bot": false,
          "headline": "Fix for draco default url redirect bug",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-05-12T21:07:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68441f96f962530b10a53aa232b6486baad96392",
          "body": "…t in asset tree\n\ngetAssetByPath(\"articles/\") can return undefined when the asset tree has not\nfinished loading, causing uploadFile to crash reading folder.info. Make folder\noptional in uploadFile and pass the full relative path directly so the upload\nno longer depends on the folder entry being present in _assetsByPath.",
          "is_bot": false,
          "headline": "Fix crash when uploading images to articles if articles folder not ye…",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-05-12T12:55:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "029a5b271ef837b6bb1b1e0f5d41f1ccb8765499",
          "body": "…ed files",
          "is_bot": false,
          "headline": "Add transfer pulse animation to provide feedback for large/slow dropp…",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-05-04T15:38:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b429db1e77e8ad96663f877e25d5f418a23fb0d",
          "body": null,
          "is_bot": false,
          "headline": "Fix for tour spin when prompt active",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-05-04T15:37:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a2eb60474944709268b8662e9620ba2d22858dd1",
          "body": null,
          "is_bot": false,
          "headline": "Accessibility scrolling bug fixes",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-05-01T17:25:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd475b8c5ed992f00f53bbc59f749fd53d19b912",
          "body": "Rc 61",
          "is_bot": false,
          "headline": "Merge pull request #461 from Smithsonian/rc-61",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-05-01T15:03:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3a43d1a214952795b2e4c96e72663bdb4550521",
          "body": null,
          "is_bot": false,
          "headline": "Fix missing content bug for new tags",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-05-01T13:37:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d04f1963bf428d4c1e7ba69084087dd8d7b0e76c",
          "body": "… accessibility issues (#458)",
          "is_bot": false,
          "headline": "Catch and stop propagation of arrow key events at high level to avoid…",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-04-30T19:29:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0adb7c33598bb77685233e7d42ca68a0a657eb74",
          "body": null,
          "is_bot": false,
          "headline": "Only trigger annotation views if annotations are visible",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-04-30T19:28:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1bcbb56de4e475699d05a38f5f3a40d1c661b55",
          "body": null,
          "is_bot": false,
          "headline": "Stop WebXR smearing introduced by browser bug (#460)",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-04-30T19:28:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d3144df39106a23ff583f1f715364cb91815f44",
          "body": null,
          "is_bot": false,
          "headline": "Version increment",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-04-29T14:45:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4feb88b529e2bcf02ce6edc1056fa163be53ea3",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'dep-update' into rc-61",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-04-29T14:36:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84ff4d6b7122895de074401dc697355ce032446a",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'dev-bugfix' into rc-61",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-04-29T14:35:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4f741ea93dba2464cfc5a249694b3a63dd8f807",
          "body": null,
          "is_bot": false,
          "headline": "Improved support for animations on multi-mesh model files.",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-04-24T19:48:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd62faed555a888aef2d589b71ab40561fb54c98",
          "body": "…decomposing matrix collapse issues and maintain option for scale-based visibility(#426)",
          "is_bot": false,
          "headline": "On change, convert zero scale values to a very small number to avoid …",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-04-20T17:02:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf398a1ae2dae1278add5266256fdc5fccc30c33",
          "body": null,
          "is_bot": false,
          "headline": "Three.js update to 182, vulnerability update",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-04-17T16:18:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ff2e50c0ef7710a295486a4ea6aac584c35ccf3",
          "body": null,
          "is_bot": false,
          "headline": "Dynamic styling for extended annotations (#428)",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-04-16T17:30:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23ff11949ab7c7db93ac6b054f22bc8230e1aec3",
          "body": "Replaces PropertyTags prop-drilling with the event-driven pattern used\nfor other option-style properties. CVViewer pushes the current tagCloud\nas schema.options onto every tag-semantic input property on tagCloud\nupdates and when new components join the graph. PropertyTags listens on\n'change' as well\n[…]\nves the tagCloud plumbing from PropertyView/PropertyTags/SettingsTree\nand getTagCloud/outs.tagCloud subscription from TaskView. The Tags preset\nnow ships with options: [] so setOptions does not throw.",
          "is_bot": false,
          "headline": "Distribute tag cloud as schema.options via CVViewer",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-04-10T10:30:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e0bc761cd8775f1391076bd711b70ff36f82a745",
          "body": "Re-add imports for AnnotationList and LineEdit that were accidentally\nremoved, fixing the annotation list not rendering.",
          "is_bot": false,
          "headline": "Restore missing side-effect imports in AnnotationsTaskView",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-04-07T08:03:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "214190a08edf46d81da359e5a42fc464058b3692",
          "body": "…ling\n\nPropertyTags no longer navigates the component graph internally. Instead,\ntagCloud is passed as a prop through PropertyView from the TaskViews,\nwhich already have access to the system via CVTask.getTagCloud().",
          "is_bot": false,
          "headline": "Move tagCloud resolution from PropertyTags to TaskViews via prop dril…",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-04-07T08:03:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84c4e34a2a394dcfa32b2fb4665c87460b421ee7",
          "body": null,
          "is_bot": false,
          "headline": "Merge github/feature/annotation-tags-ui",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-03-31T07:41:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d1774aef7db5a31afdd1bd6851273ac2fe9ad826",
          "body": "Resolved conflicts in language files (DE/NL) by keeping our custom\ntag UI strings (Remove tag, Select..., Add a tag...) alongside\nSmithsonian's new keys (Select, Step, Tour, of).",
          "is_bot": false,
          "headline": "Merge smithsonian/master (v0.60.1) into feature/annotation-tags-ui",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-03-31T07:38:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6cfd72b51802ecb4b093819643ea4848647133d4",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' into feature/annotation-tags-ui",
          "author_name": "Nicolas Dejardin",
          "author_login": "ndejardin425",
          "committed_at": "2026-03-30T09:34:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1515e4546514021f47e7e170016fe2c00fd591d6",
          "body": "…agCloud\n\n- CLight.ins.tags and activeTags: types.String → types.Tags\n- CVViewer.ins.activeTags, sortedTags: types.String → types.Tags\n- CVViewer.outs.tagCloud: types.String → types.Tags\n- CVViewer subscribes to its own tagCloud output to re-trigger\n  activeTags and annotationsVisible on tag cloud changes",
          "is_bot": false,
          "headline": "Use types.Tags for CLight and CVViewer tag properties, subscribe to t…",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-03-30T09:29:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f790ab8b9b80d139ad08314a22bb1a96d80a742",
          "body": "Dev bugfix",
          "is_bot": false,
          "headline": "Merge pull request #453 from Smithsonian/dev-bugfix",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-26T19:53:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6634d72d77b1646cf3698b167ba28209f2891c8",
          "body": null,
          "is_bot": false,
          "headline": "version increment",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-26T19:51:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6eb04eaabf2dcc5fbbebce534cc6736930996f6",
          "body": null,
          "is_bot": false,
          "headline": "css overflow fix",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-26T18:58:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8088791e5302f3173f0d7a98f800f5c914b774c7",
          "body": "Rc 60",
          "is_bot": false,
          "headline": "Merge pull request #452 from Smithsonian/rc-60",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-26T17:46:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ce0d6903afa6fe7b3cc5b6659a126639c7b000c",
          "body": null,
          "is_bot": false,
          "headline": "Radio tags bug fix",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-26T16:59:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c74a4b0c9004901ce81852f1b13c68ded2542bea",
          "body": null,
          "is_bot": false,
          "headline": "version increment",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-25T16:52:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd119c0325fd26eee67c02902697a319106a0fbb",
          "body": null,
          "is_bot": false,
          "headline": "Added web server disclaimer",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-25T16:29:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "558b4a63f856004af2f62a9cde91c1828eb91e03",
          "body": null,
          "is_bot": false,
          "headline": "Dependency updates",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-25T16:03:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93ce8ca5fb7dace514e96c774ecf3ab54f62d9c2",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'dev-bugfix' into rc-60",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-25T15:42:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3a07f48b0047efd5e0bd424c96153bbd0a69a1f",
          "body": null,
          "is_bot": false,
          "headline": "Handle snapshot properties added to annotation views after init",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-25T15:30:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d25d9968df1ebda76cfbe24811bf40948f808f6",
          "body": "…t graph\n\nPropertyTags now navigates property → component → system → CVDocumentProvider\nto find the tagCloud, instead of receiving it as a prop. This allows PropertyView\nto automatically render tag fields (semantic: \"tags\") without external wiring.\n\n- Add Tags type to propertyTypes.ts (schema + fact\n[…]\n components\n- Add tags branch in PropertyView (semantic === \"tags\")\n- Remove tagCloud prop threading from all TaskViews and SettingsTree\n- Fix max-height constraint on sv-property-view for tag widgets",
          "is_bot": false,
          "headline": "Make PropertyTags self-sufficient by resolving tagCloud from componen…",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-03-25T13:47:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6ca6804ccc9cdb74a2a382eb15644dd05c58e633",
          "body": null,
          "is_bot": false,
          "headline": "Merge API consistency fix",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-25T12:43:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96702aa5672816a2c4a01c4a670d73394ea6962f",
          "body": null,
          "is_bot": false,
          "headline": "Annotation view tweaks",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-25T12:32:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6a440de151280f01edea8c33a7ef1d8f9921a74",
          "body": "… runs regardless of whether the same annotation has being set again",
          "is_bot": false,
          "headline": "Move view animation logic outside the annotation expanded block so it…",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-03-25T10:12:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf0e672b92fc220f8c1bfa4fe8355096a9e87afe",
          "body": "…otation",
          "is_bot": false,
          "headline": "Update docs: setActiveAnnotation now animates camera, remove focusAnn…",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-03-25T10:12:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a6d293a86ce77ab8246e415f9a0b4eb08aa6968",
          "body": null,
          "is_bot": false,
          "headline": "Remove enableAnnotations (moved to separate branch)",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-03-25T10:12:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9edde87d539d9f6cf9ace71fc0f5d2e267cd5016",
          "body": "All side-effects of activating an annotation (camera tween to saved view,\nauto-rotation stop) are now handled in the `set activeAnnotation` setter,\nensuring consistent behavior regardless of activation path (click, keyboard, API).\n\nRemoves `focusAnnotation` from CVViewer and MainView, which was added to work\naround the missing behavior on the `setActiveAnnotation` API path.",
          "is_bot": false,
          "headline": "Consolidate annotation activation behavior into CVAnnotationView",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-03-25T10:12:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "387b1ac0e60ac496ebe86e1fed0a359d7744719d",
          "body": null,
          "is_bot": false,
          "headline": "Stop autorotation on focus",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-03-25T10:12:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7de0fcb0d1f0c726b19c3610847b6c4b343b36e",
          "body": null,
          "is_bot": false,
          "headline": "Add focusAnnotation and enableAnnotations to Main View",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-03-25T10:12:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "856d29f969c979eee666f868d423481e233d5288",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'Dynamic3D-Project-feature/time_tours' into rc-60",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-24T13:43:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4156f9131bb3f4b98c55d993e69735a945882f87",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'Dynamic3D-Project-weblate' into rc-60",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-24T13:23:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3cb2a56ab482e52859720fc34700e3a45ece3ba3",
          "body": null,
          "is_bot": false,
          "headline": "Use built-in Date class instead of Luxon DateTime.",
          "author_name": "Carsten Schnober",
          "author_login": "carschno",
          "committed_at": "2026-03-19T14:34:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcfbdc8b745cf9934092615c4f0890c6581ca41a",
          "body": null,
          "is_bot": false,
          "headline": "(De-)serialize CVSunlight.datetime in snapshots.",
          "author_name": "Carsten Schnober",
          "author_login": "carschno",
          "committed_at": "2026-03-19T14:34:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6dbe18a036aae35df01d5da37e76ce751c785d53",
          "body": null,
          "is_bot": false,
          "headline": "updates for vulnerabilities",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-19T13:17:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f5a23075620e5930e5a08a480c027611a38c750",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'Dynamic3D-Project-fix/sun_position' into rc-60",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-18T14:24:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "933eccb10420dd4d8d004275c22808d8604239c4",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'ndejardin425-feature/enable-ui-features' into rc-60",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-18T13:45:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "116a3bd3615dd130e2be2bce3032ddb9140c997d",
          "body": null,
          "is_bot": false,
          "headline": "(De-)serialize datetime with UTC offset.",
          "author_name": "Carsten Schnober",
          "author_login": "carschno",
          "committed_at": "2026-03-18T09:43:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7b018074a888ea46c5c94460c591bf87824bbb5",
          "body": "- Rename enableAnnotations/Reader/Tours/Tools/Measurement to\n  setAnnotationsEnabled/setReaderEnabled/setToursEnabled/setToolsEnabled/setMeasurementEnabled\n- Simplify all toggle* functions to read current state and delegate\n  to their corresponding set*Enabled counterpart\n- Update API docs and toggles example accordingly",
          "is_bot": false,
          "headline": "Rename enable* to set*Enabled and refactor toggle* to delegate",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-03-18T09:27:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1499ad196904fe1415ac7c9242b63608db89e532",
          "body": null,
          "is_bot": false,
          "headline": "Remove commented-out references to tzlookup.",
          "author_name": "Carsten Schnober",
          "author_login": "carschno",
          "committed_at": "2026-03-17T16:47:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "895878b3fc84625187c9455b27acf087089f711d",
          "body": null,
          "is_bot": false,
          "headline": "Fix for env map enable bug",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-17T16:33:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0351d1c96cf05e362c0bd986299168bdcc8a4563",
          "body": "…position",
          "is_bot": false,
          "headline": "Merge commit 'c046ab051669f8111e17aa6341be1ae4eb49de2e' into fix/sun_…",
          "author_name": "Carsten Schnober",
          "author_login": "carschno",
          "committed_at": "2026-03-17T16:32:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d7a17b52ae3bc612d8a7499d06c48663ee29084",
          "body": "This reverts commit 887e81e074c29a0a41d99dd072006d1d65e5a122.",
          "is_bot": false,
          "headline": "Revert \"Move tzlookup into subclass to be used in Story only.\"",
          "author_name": "Carsten Schnober",
          "author_login": "carschno",
          "committed_at": "2026-03-17T16:31:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b3e8331a8e4f25ed00985ac556d72aa83e11eca0",
          "body": "- Replace ff-line-edit with sv-property-tags in ArticlesTaskView, ToursTaskView\n- Use sv-property-tags in SettingsTaskView for model and light tag fields,\n  detected via property path ending in \".Tags\"\n- Deduplicate getTagCloud() into TaskView base class; subscribe to\n  viewer.outs.tagCloud so all t\n[…]\ng chip: rounded pill label with close button visually outside\n  (border-radius: 10px, hover icon highlight from commit 685874e)\n- Rename \"New tag...\" placeholder to \"Add a tag...\" across all 7 locales",
          "is_bot": false,
          "headline": "Extend tag input widget to all tag fields in story UI",
          "author_name": "Nicolas Dejardin",
          "author_login": null,
          "committed_at": "2026-03-17T10:01:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c046ab051669f8111e17aa6341be1ae4eb49de2e",
          "body": null,
          "is_bot": false,
          "headline": "Include TimeManager file",
          "author_name": "Jamie Cope",
          "author_login": "gjcope",
          "committed_at": "2026-03-13T19:00:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 476,
      "latest_release_at": "2026-07-02T17:57:24Z",
      "latest_release_tag": "v0.63.2",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 48,
      "days_since_latest_release": 19,
      "mean_days_between_releases": 17
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 37,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "voyager",
          "exists": true,
          "license": "BSD-3-Clause",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": false,
          "registry_url": "https://www.npmjs.com/package/voyager",
          "is_deprecated": false,
          "latest_version": "0.4.13",
          "repository_url": "https://github.com/wieden-kennedy/voyager",
          "versions_count": 12,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1997,
          "first_published_at": "2013-10-18T22:11:38.720000Z",
          "latest_published_at": "2015-02-18T23:53:00.539000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4171
        }
      ]
    },
    "popularity": {
      "forks": 45,
      "stars": 202,
      "watchers": 16,
      "fork_history": {
        "days": [
          {
            "date": "2019-07-02",
            "count": 1
          },
          {
            "date": "2019-09-27",
            "count": 1
          },
          {
            "date": "2019-12-05",
            "count": 2
          },
          {
            "date": "2020-02-26",
            "count": 2
          },
          {
            "date": "2020-02-27",
            "count": 1
          },
          {
            "date": "2020-02-28",
            "count": 1
          },
          {
            "date": "2020-02-29",
            "count": 1
          },
          {
            "date": "2020-03-02",
            "count": 1
          },
          {
            "date": "2020-05-08",
            "count": 1
          },
          {
            "date": "2020-05-22",
            "count": 1
          },
          {
            "date": "2021-02-05",
            "count": 1
          },
          {
            "date": "2021-10-29",
            "count": 1
          },
          {
            "date": "2022-03-06",
            "count": 1
          },
          {
            "date": "2022-04-05",
            "count": 1
          },
          {
            "date": "2022-05-31",
            "count": 1
          },
          {
            "date": "2022-09-27",
            "count": 1
          },
          {
            "date": "2022-12-16",
            "count": 1
          },
          {
            "date": "2023-05-17",
            "count": 1
          },
          {
            "date": "2023-07-05",
            "count": 1
          },
          {
            "date": "2023-07-26",
            "count": 1
          },
          {
            "date": "2024-01-03",
            "count": 1
          },
          {
            "date": "2024-01-05",
            "count": 1
          },
          {
            "date": "2024-05-08",
            "count": 1
          },
          {
            "date": "2024-05-10",
            "count": 1
          },
          {
            "date": "2024-11-19",
            "count": 1
          },
          {
            "date": "2024-11-20",
            "count": 1
          },
          {
            "date": "2025-03-14",
            "count": 1
          },
          {
            "date": "2025-03-19",
            "count": 1
          },
          {
            "date": "2025-04-04",
            "count": 1
          },
          {
            "date": "2025-06-29",
            "count": 1
          },
          {
            "date": "2025-08-07",
            "count": 1
          },
          {
            "date": "2025-09-19",
            "count": 1
          },
          {
            "date": "2025-10-28",
            "count": 1
          },
          {
            "date": "2026-02-02",
            "count": 1
          },
          {
            "date": "2026-03-06",
            "count": 1
          },
          {
            "date": "2026-04-11",
            "count": 1
          },
          {
            "date": "2026-04-27",
            "count": 1
          },
          {
            "date": "2026-06-06",
            "count": 1
          },
          {
            "date": "2026-06-12",
            "count": 1
          },
          {
            "date": "2026-06-21",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 42,
        "total_forks": 45
      },
      "star_history": null,
      "open_issues_and_prs": 39
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "example"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "libs/ff-browser/tsconfig.json",
        "libs/ff-core/tsconfig.json",
        "libs/ff-graph/tsconfig.json",
        "libs/ff-scene/tsconfig.json",
        "libs/ff-three/tsconfig.json",
        "libs/ff-ui/tsconfig.json",
        "source/client/tsconfig.json",
        "source/server/tsconfig.json",
        "source/test/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 719410,
      "source_files_sampled": 328,
      "oversized_source_files": 2,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "lodash",
            "direct": false,
            "version": "1.0.2",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.1,
            "advisory_ids": [
              "GHSA-35jh-r3h4-6jhm",
              "GHSA-4xc9-xhrj-v574",
              "GHSA-f23m-r3pf-42rh",
              "GHSA-fvqr-27wr-82fm",
              "GHSA-jf85-cpcp-j695"
            ],
            "fixed_version": "4.18.0",
            "advisory_count": 5,
            "oldest_advisory_days": 2917
          },
          {
            "name": "ecstatic",
            "direct": true,
            "version": "0.5.8",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-9q64-mpxx-87fg",
              "GHSA-jc84-3g44-wf2q",
              "GHSA-pm9p-9926-w68m",
              "GHSA-vwjc-q9px-r9vq"
            ],
            "fixed_version": "4.1.3",
            "advisory_count": 4,
            "oldest_advisory_days": 3127
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "0.2.14",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-23c5-xmqv-rm74",
              "GHSA-3ppc-4f35-3m26",
              "GHSA-7r86-cg39-jmmj",
              "GHSA-f8q6-p94x-37v3",
              "GHSA-hxm2-r34f-qmc5"
            ],
            "fixed_version": "10.2.3",
            "advisory_count": 5,
            "oldest_advisory_days": 2843
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "2.0.10",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-23c5-xmqv-rm74",
              "GHSA-3ppc-4f35-3m26",
              "GHSA-7r86-cg39-jmmj",
              "GHSA-f8q6-p94x-37v3",
              "GHSA-hxm2-r34f-qmc5"
            ],
            "fixed_version": "10.2.3",
            "advisory_count": 5,
            "oldest_advisory_days": 2843
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 3,
          "critical": 1
        },
        "advisory_count": 19,
        "affected_count": 4,
        "assessed_count": 68,
        "malicious_count": 0,
        "assessed_package": "npm:voyager@0.4.13",
        "unassessed_count": 0,
        "direct_affected_count": 1
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@photostructure/tz-lookup",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.4.0"
        },
        {
          "name": "ajv",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.6.2"
        },
        {
          "name": "buffer",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.0.3"
        },
        {
          "name": "client-zip",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.5.0"
        },
        {
          "name": "clone-deep",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.1"
        },
        {
          "name": "dayjs",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.11.19"
        },
        {
          "name": "express",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.2.1"
        },
        {
          "name": "filenamify",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.0"
        },
        {
          "name": "handlebars",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.7.9"
        },
        {
          "name": "hotkeys-js",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.8.7"
        },
        {
          "name": "lit-element",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.5.1"
        },
        {
          "name": "lit-html",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.4.1"
        },
        {
          "name": "moment",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.29.4"
        },
        {
          "name": "morgan",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.10.1"
        },
        {
          "name": "nodemon",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.1.11"
        },
        {
          "name": "postcss",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.5.6"
        },
        {
          "name": "process",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.11.10"
        },
        {
          "name": "readable-stream",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.6.0"
        },
        {
          "name": "resolve-pathname",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.0"
        },
        {
          "name": "sanitize-html",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.13.1"
        },
        {
          "name": "simple-dropzone",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.8.3"
        },
        {
          "name": "stream-browserify",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.0"
        },
        {
          "name": "suncalc",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.9.0"
        },
        {
          "name": "three",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.182.0"
        },
        {
          "name": "tinymce",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.8.3"
        },
        {
          "name": "toposort",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.2"
        },
        {
          "name": "webdav",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.10.0"
        },
        {
          "name": "webdav-server",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.6.2"
        },
        {
          "name": "xml-js",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.6.11"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@photostructure/tz-lookup",
            "direct": true,
            "version": "11.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "6.12.6",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "8.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "8.17.1",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "8.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "8.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": true,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "client-zip",
            "direct": true,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "clone-deep",
            "direct": true,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "dayjs",
            "direct": true,
            "version": "1.11.19",
            "ecosystem": "npm"
          },
          {
            "name": "express",
            "direct": true,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "filenamify",
            "direct": true,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "handlebars",
            "direct": true,
            "version": "4.7.9",
            "ecosystem": "npm"
          },
          {
            "name": "hotkeys-js",
            "direct": true,
            "version": "3.8.7",
            "ecosystem": "npm"
          },
          {
            "name": "lit-element",
            "direct": true,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "lit-html",
            "direct": true,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "moment",
            "direct": true,
            "version": "2.29.4",
            "ecosystem": "npm"
          },
          {
            "name": "morgan",
            "direct": true,
            "version": "1.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "nodemon",
            "direct": true,
            "version": "3.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": true,
            "version": "8.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "process",
            "direct": true,
            "version": "0.11.10",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": true,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-pathname",
            "direct": true,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "sanitize-html",
            "direct": true,
            "version": "2.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "simple-dropzone",
            "direct": true,
            "version": "0.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "stream-browserify",
            "direct": true,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "suncalc",
            "direct": true,
            "version": "1.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "three",
            "direct": true,
            "version": "0.182.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinymce",
            "direct": true,
            "version": "6.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "toposort",
            "direct": true,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "webdav",
            "direct": true,
            "version": "5.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "webdav-server",
            "direct": true,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "xml-js",
            "direct": true,
            "version": "1.6.11",
            "ecosystem": "npm"
          },
          {
            "name": "@buttercup/fetch",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@dimforge/rapier3d-compat",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@discoveryjs/json-ext",
            "direct": false,
            "version": "0.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@isaacs/cliui",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/pattern",
            "direct": false,
            "version": "30.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/schemas",
            "direct": false,
            "version": "30.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/types",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.3.10",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/resolve-uri",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/source-map",
            "direct": false,
            "version": "0.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.27",
            "ecosystem": "npm"
          },
          {
            "name": "@nodable/entities",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-android-arm64",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-darwin-arm64",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-darwin-x64",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-freebsd-x64",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-arm-glibc",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-arm-musl",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-arm64-glibc",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-arm64-musl",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-x64-glibc",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-linux-x64-musl",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-win32-arm64",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-win32-ia32",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@parcel/watcher-win32-x64",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@pkgjs/parseargs",
            "direct": false,
            "version": "0.11.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sinclair/typebox",
            "direct": false,
            "version": "0.34.48",
            "ecosystem": "npm"
          },
          {
            "name": "@tweenjs/tween.js",
            "direct": false,
            "version": "23.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/chai",
            "direct": false,
            "version": "4.2.22",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/html-minifier-terser",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/istanbul-lib-coverage",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/istanbul-lib-report",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/istanbul-reports",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/json-schema",
            "direct": false,
            "version": "7.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "@types/mocha",
            "direct": false,
            "version": "10.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "14.18.63",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "16.18.122",
            "ecosystem": "npm"
          },
          {
            "name": "@types/stats.js",
            "direct": false,
            "version": "0.17.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/suncalc",
            "direct": false,
            "version": "1.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/three",
            "direct": false,
            "version": "0.182.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/webxr",
            "direct": false,
            "version": "0.5.24",
            "ecosystem": "npm"
          },
          {
            "name": "@types/yargs",
            "direct": false,
            "version": "17.0.35",
            "ecosystem": "npm"
          },
          {
            "name": "@types/yargs-parser",
            "direct": false,
            "version": "21.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@ungap/structured-clone",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/ast",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/floating-point-hex-parser",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-api-error",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-buffer",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-numbers",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-wasm-bytecode",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-wasm-section",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/ieee754",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/leb128",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/utf8",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-edit",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-gen",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-opt",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-parser",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wast-printer",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webgpu/types",
            "direct": false,
            "version": "0.1.44",
            "ecosystem": "npm"
          },
          {
            "name": "@webpack-cli/configtest",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@webpack-cli/info",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@webpack-cli/serve",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@xtuc/ieee754",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@xtuc/long",
            "direct": false,
            "version": "4.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "abab",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "abbrev",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "accepts",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-import-phases",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-formats",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-keywords",
            "direct": false,
            "version": "3.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-keywords",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-sequence-parser",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "6.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "anymatch",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "anynum",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "arg",
            "direct": false,
            "version": "4.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "array-find-index",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "asap",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "assertion-error",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "async",
            "direct": false,
            "version": "3.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "base-64",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "base64-js",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "baseline-browser-mapping",
            "direct": false,
            "version": "2.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "basic-auth",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "big.js",
            "direct": false,
            "version": "5.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "binary-extensions",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "body-parser",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "boolbase",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "browser-stdout",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist",
            "direct": false,
            "version": "4.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-from",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "byte-length",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "bytes",
            "direct": false,
            "version": "3.1.2",
            "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": "camel-case",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-api",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-lite",
            "direct": false,
            "version": "1.0.30001777",
            "ecosystem": "npm"
          },
          {
            "name": "chai",
            "direct": false,
            "version": "4.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "charenc",
            "direct": false,
            "version": "0.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "check-error",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "3.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "chrome-trace-event",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "ci-info",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "clean-css",
            "direct": false,
            "version": "5.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "7.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "8.0.1",
            "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": "colord",
            "direct": false,
            "version": "2.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "colorette",
            "direct": false,
            "version": "2.0.16",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "11.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "2.20.3",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "8.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "concurrently",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "content-disposition",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "content-type",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "cookie",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "cookie-signature",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "copy-webpack-plugin",
            "direct": false,
            "version": "14.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "create-require",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "crypt",
            "direct": false,
            "version": "0.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "css-declaration-sorter",
            "direct": false,
            "version": "7.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "css-loader",
            "direct": false,
            "version": "6.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "css-minimizer-webpack-plugin",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "css-select",
            "direct": false,
            "version": "4.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "css-select",
            "direct": false,
            "version": "5.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "css-tree",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "css-tree",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "css-what",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "css-what",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "cssesc",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cssnano",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "cssnano-preset-default",
            "direct": false,
            "version": "7.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "cssnano-utils",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "csso",
            "direct": false,
            "version": "5.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "data-uri-to-buffer",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "date-fns",
            "direct": false,
            "version": "2.25.0",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "2.6.9",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "3.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "debuglog",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "decamelize",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "deep-eql",
            "direct": false,
            "version": "4.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "deepmerge",
            "direct": false,
            "version": "4.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "depd",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "detect-libc",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "dezalgo",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dom-converter",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "dom-serializer",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "dom-serializer",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "domelementtype",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "domhandler",
            "direct": false,
            "version": "4.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "domhandler",
            "direct": false,
            "version": "5.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "domutils",
            "direct": false,
            "version": "2.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "domutils",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "domutils",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "dot-case",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "dotenv",
            "direct": false,
            "version": "10.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "eastasianwidth",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "ee-first",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "electron-to-chromium",
            "direct": false,
            "version": "1.5.307",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "9.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "emojis-list",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "encodeurl",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "enhanced-resolve",
            "direct": false,
            "version": "5.24.0",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "envinfo",
            "direct": false,
            "version": "7.14.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-module-lexer",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-html",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-scope",
            "direct": false,
            "version": "5.1.1",
            "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": "etag",
            "direct": false,
            "version": "1.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "events",
            "direct": false,
            "version": "3.3.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": "fast-uri",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "fast-xml-builder",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-xml-parser",
            "direct": false,
            "version": "5.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "fastest-levenshtein",
            "direct": false,
            "version": "1.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "fastparse",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "fdir",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "fetch-blob",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "fflate",
            "direct": false,
            "version": "0.8.2",
            "ecosystem": "npm"
          },
          {
            "name": "filename-reserved-regex",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "finalhandler",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "flat",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "foreground-child",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "formdata-polyfill",
            "direct": false,
            "version": "4.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "forwarded",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "fresh",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "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": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "get-func-name",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "10.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "glob-to-regexp",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "handlebars-loader",
            "direct": false,
            "version": "1.7.3",
            "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-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "he",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "2.8.9",
            "ecosystem": "npm"
          },
          {
            "name": "hot-patcher",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "html-minifier-terser",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "html-webpack-plugin",
            "direct": false,
            "version": "5.6.7",
            "ecosystem": "npm"
          },
          {
            "name": "htmlparser2",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "htmlparser2",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "http-errors",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "icss-utils",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ieee754",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ignore-by-default",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "immutable",
            "direct": false,
            "version": "5.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "import-local",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "inflight",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "interpret",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "ipaddr.js",
            "direct": false,
            "version": "1.9.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-core-module",
            "direct": false,
            "version": "2.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-path-inside",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-obj",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-object",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-object",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-promise",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-unicode-supported",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-unsafe",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isobject",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jackspeak",
            "direct": false,
            "version": "3.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "jest-regex-util",
            "direct": false,
            "version": "30.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jest-util",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-worker",
            "direct": false,
            "version": "27.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "jest-worker",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-even-better-errors",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-stable-stringify",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "jsonc-parser",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "jsonify",
            "direct": false,
            "version": "0.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "layerr",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "license-checker",
            "direct": false,
            "version": "25.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "lilconfig",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "loader-runner",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "loader-utils",
            "direct": false,
            "version": "1.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.17.21",
            "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": "log-symbols",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "loupe",
            "direct": false,
            "version": "2.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "lower-case",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "10.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lunr",
            "direct": false,
            "version": "2.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "make-error",
            "direct": false,
            "version": "1.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "marked",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "md5",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "mdn-data",
            "direct": false,
            "version": "2.0.28",
            "ecosystem": "npm"
          },
          {
            "name": "mdn-data",
            "direct": false,
            "version": "2.27.1",
            "ecosystem": "npm"
          },
          {
            "name": "media-typer",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "merge-descriptors",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "merge-stream",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "meshoptimizer",
            "direct": false,
            "version": "0.22.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.51.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-types",
            "direct": false,
            "version": "2.1.34",
            "ecosystem": "npm"
          },
          {
            "name": "mime-types",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "mini-css-extract-plugin",
            "direct": false,
            "version": "2.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "7.4.6",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "9.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp",
            "direct": false,
            "version": "0.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "mocha",
            "direct": false,
            "version": "11.7.6",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.11",
            "ecosystem": "npm"
          },
          {
            "name": "negotiator",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "neo-async",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "nested-property",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "no-case",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "node-addon-api",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "node-domexception",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-fetch",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "node-releases",
            "direct": false,
            "version": "2.0.36",
            "ecosystem": "npm"
          },
          {
            "name": "nopt",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "nopt",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-package-data",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-normalize-package-bin",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "nth-check",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-assign",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-inspect",
            "direct": false,
            "version": "1.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "on-finished",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "on-finished",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "on-headers",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "os-homedir",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "os-tmpdir",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "osenv",
            "direct": false,
            "version": "0.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "package-json-from-dist",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "param-case",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "parse-srcset",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "parseurl",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "pascal-case",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-expression-matcher",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-is-absolute",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-key",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-parse",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "path-posix",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-scurry",
            "direct": false,
            "version": "1.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-to-regexp",
            "direct": false,
            "version": "8.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "pathval",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-dir",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-calc",
            "direct": false,
            "version": "10.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-colormin",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-convert-values",
            "direct": false,
            "version": "7.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-comments",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-duplicates",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-empty",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-overridden",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-merge-longhand",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-merge-rules",
            "direct": false,
            "version": "7.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-minify-font-values",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-minify-gradients",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-minify-params",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-minify-selectors",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-modules-extract-imports",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-modules-local-by-default",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-modules-scope",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-modules-values",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-normalize-charset",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-normalize-display-values",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-normalize-positions",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-normalize-repeat-style",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-normalize-string",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-normalize-timing-functions",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-normalize-unicode",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-normalize-url",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-normalize-whitespace",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-ordered-values",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-reduce-initial",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-reduce-transforms",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-selector-parser",
            "direct": false,
            "version": "6.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-selector-parser",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-svgo",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-unique-selectors",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-value-parser",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "pretty-error",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "proxy-addr",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "pstree.remy",
            "direct": false,
            "version": "1.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "querystringify",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "randombytes",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "range-parser",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "raw-body",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "read-installed",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "read-package-json",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "readdir-scoped-modules",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "rechoir",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "relateurl",
            "direct": false,
            "version": "0.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "renderkid",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-from-string",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "requires-port",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.9",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-cwd",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "router",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "rxjs",
            "direct": false,
            "version": "6.6.7",
            "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": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "sass",
            "direct": false,
            "version": "1.98.0",
            "ecosystem": "npm"
          },
          {
            "name": "sass-loader",
            "direct": false,
            "version": "16.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "sax",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "schema-utils",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "schema-utils",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "schema-utils",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "schema-utils",
            "direct": false,
            "version": "4.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "5.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "send",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "serialize-javascript",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "serialize-javascript",
            "direct": false,
            "version": "7.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "serve-static",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "setprototypeof",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "shallow-clone",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-command",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-regex",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shiki",
            "direct": false,
            "version": "0.14.7",
            "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": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "simple-update-notifier",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "slide",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.7.4",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-loader",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-support",
            "direct": false,
            "version": "0.5.20",
            "ecosystem": "npm"
          },
          {
            "name": "spawn-command",
            "direct": false,
            "version": "0.0.2-1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-compare",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-correct",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-exceptions",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-expression-parse",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-license-ids",
            "direct": false,
            "version": "3.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-ranges",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-satisfies",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "statuses",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-outer",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strnum",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "stylehacks",
            "direct": false,
            "version": "7.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "8.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "svgo",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tapable",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "terser",
            "direct": false,
            "version": "5.43.1",
            "ecosystem": "npm"
          },
          {
            "name": "terser-webpack-plugin",
            "direct": false,
            "version": "5.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.15",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "toidentifier",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "touch",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tree-kill",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "treeify",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "trim-repeated",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-loader",
            "direct": false,
            "version": "9.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "ts-node",
            "direct": false,
            "version": "9.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "type-detect",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "type-is",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "typedoc",
            "direct": false,
            "version": "0.23.28",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "4.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "4.9.5",
            "ecosystem": "npm"
          },
          {
            "name": "typescript-json-schema",
            "direct": false,
            "version": "0.50.1",
            "ecosystem": "npm"
          },
          {
            "name": "uglify-js",
            "direct": false,
            "version": "3.14.5",
            "ecosystem": "npm"
          },
          {
            "name": "undefsafe",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "unpipe",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "update-browserslist-db",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "url-join",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "url-parse",
            "direct": false,
            "version": "1.5.10",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "util-extend",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "utila",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "validate-npm-package-license",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "vary",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "vscode-oniguruma",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "vscode-textmate",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "watchpack",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "web-streams-polyfill",
            "direct": false,
            "version": "3.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "webpack",
            "direct": false,
            "version": "5.107.2",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-cli",
            "direct": false,
            "version": "4.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-merge",
            "direct": false,
            "version": "5.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-sources",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "wildcard",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wordwrap",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "workerpool",
            "direct": false,
            "version": "9.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "8.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "xml-js-builder",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "xml-naming",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "16.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "17.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "20.2.9",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "21.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-unparser",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yn",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "zip-js-esm",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 597,
        "direct_count": 33,
        "indirect_count": 564
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 17,
        "merged_prs": 181,
        "open_issues": 22,
        "closed_ratio": 0.902,
        "closed_issues": 203,
        "closed_unmerged_prs": 30
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "gjcope",
          "commits": 1142,
          "avatar_url": "https://avatars.githubusercontent.com/u/22783547?v=4"
        },
        {
          "type": "User",
          "login": "framefactory",
          "commits": 241,
          "avatar_url": "https://avatars.githubusercontent.com/u/550450?v=4"
        },
        {
          "type": "User",
          "login": "carschno",
          "commits": 178,
          "avatar_url": "https://avatars.githubusercontent.com/u/4696228?v=4"
        },
        {
          "type": "User",
          "login": "sdumetz",
          "commits": 137,
          "avatar_url": "https://avatars.githubusercontent.com/u/4112885?v=4"
        },
        {
          "type": "User",
          "login": "Inao0",
          "commits": 34,
          "avatar_url": "https://avatars.githubusercontent.com/u/37711386?v=4"
        },
        {
          "type": "User",
          "login": "kgschoueri",
          "commits": 7,
          "avatar_url": "https://avatars.githubusercontent.com/u/107149450?v=4"
        },
        {
          "type": "User",
          "login": "jbylsma",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/352798?v=4"
        },
        {
          "type": "User",
          "login": "csparker247",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/1434526?v=4"
        },
        {
          "type": "User",
          "login": "fuzheado",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/187007?v=4"
        },
        {
          "type": "User",
          "login": "ghalusa",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/1112193?v=4"
        }
      ],
      "contributors_sampled": 11,
      "top_contributor_share": 0.654
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 8,
            "reason": "binaries present in source code",
            "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": 0,
            "reason": "0 out of 3 merged PRs checked by a CI test -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/3 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 9 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "38 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "268e2b1a02ed87a0342fee35a5a39fd74e073808",
        "ran_at": "2026-07-22T13:57:08Z",
        "aggregate_score": 2.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-02T17:54:06Z",
      "oldest_open_prs": [
        {
          "number": 266,
          "created_at": "2024-04-15T14:08:55Z",
          "last_comment_at": "2024-09-05T10:08:13Z",
          "last_comment_author": "sdumetz"
        },
        {
          "number": 316,
          "created_at": "2024-10-23T10:06:14Z",
          "last_comment_at": "2025-11-19T17:44:00Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 327,
          "created_at": "2024-11-15T11:51:06Z",
          "last_comment_at": "2024-11-25T09:30:36Z",
          "last_comment_author": "sdumetz"
        },
        {
          "number": 358,
          "created_at": "2025-05-15T11:33:18Z",
          "last_comment_at": "2025-07-28T19:54:08Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 377,
          "created_at": "2025-09-04T13:05:36Z",
          "last_comment_at": "2025-09-15T09:45:43Z",
          "last_comment_author": "sdumetz"
        },
        {
          "number": 378,
          "created_at": "2025-09-10T10:10:39Z",
          "last_comment_at": "2025-09-10T13:36:58Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 382,
          "created_at": "2025-09-12T10:05:42Z",
          "last_comment_at": "2025-09-24T12:10:40Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 403,
          "created_at": "2025-12-12T09:08:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 408,
          "created_at": "2025-12-30T13:29:34Z",
          "last_comment_at": "2026-01-06T13:19:28Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 427,
          "created_at": "2026-02-09T15:48:42Z",
          "last_comment_at": "2026-04-27T14:09:31Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 447,
          "created_at": "2026-03-12T09:38:36Z",
          "last_comment_at": "2026-07-14T13:56:40Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 451,
          "created_at": "2026-03-25T15:03:44Z",
          "last_comment_at": "2026-03-25T15:57:46Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 465,
          "created_at": "2026-05-13T13:25:34Z",
          "last_comment_at": "2026-07-16T18:43:26Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 476,
          "created_at": "2026-06-26T14:30:36Z",
          "last_comment_at": "2026-07-20T12:53:00Z",
          "last_comment_author": "carschno"
        },
        {
          "number": 478,
          "created_at": "2026-06-27T16:28:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 483,
          "created_at": "2026-07-09T15:58:07Z",
          "last_comment_at": "2026-07-16T16:45:55Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 484,
          "created_at": "2026-07-10T15:26:13Z",
          "last_comment_at": "2026-07-13T12:49:55Z",
          "last_comment_author": "gjcope"
        }
      ],
      "last_merged_pr_at": "2026-07-22T12:18:04Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": [
        {
          "number": 41,
          "created_at": "2021-01-22T15:37:05Z",
          "last_comment_at": "2026-04-10T14:42:37Z",
          "last_comment_author": "Inao0"
        },
        {
          "number": 42,
          "created_at": "2021-01-22T15:40:07Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 95,
          "created_at": "2021-09-14T18:08:11Z",
          "last_comment_at": "2026-06-12T16:52:39Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 118,
          "created_at": "2022-01-28T17:34:42Z",
          "last_comment_at": "2022-02-17T15:46:34Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 189,
          "created_at": "2023-02-22T17:09:45Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 205,
          "created_at": "2023-04-17T07:06:39Z",
          "last_comment_at": "2025-09-08T15:19:43Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 206,
          "created_at": "2023-04-21T15:53:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 209,
          "created_at": "2023-04-26T16:04:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 255,
          "created_at": "2024-02-28T09:10:19Z",
          "last_comment_at": "2024-02-29T15:58:40Z",
          "last_comment_author": "sdumetz"
        },
        {
          "number": 265,
          "created_at": "2024-04-10T19:22:49Z",
          "last_comment_at": "2024-04-15T12:48:34Z",
          "last_comment_author": "sdumetz"
        },
        {
          "number": 335,
          "created_at": "2024-12-12T15:23:34Z",
          "last_comment_at": "2024-12-12T19:28:12Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 341,
          "created_at": "2025-01-23T16:37:23Z",
          "last_comment_at": "2025-01-24T13:29:33Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 365,
          "created_at": "2025-07-18T14:17:11Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 379,
          "created_at": "2025-09-10T10:29:41Z",
          "last_comment_at": "2026-04-23T14:53:24Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 400,
          "created_at": "2025-12-04T19:48:49Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 410,
          "created_at": "2026-01-02T12:39:36Z",
          "last_comment_at": "2026-01-06T16:40:18Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 439,
          "created_at": "2026-03-02T16:30:19Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 454,
          "created_at": "2026-03-30T14:45:50Z",
          "last_comment_at": "2026-03-30T15:12:08Z",
          "last_comment_author": "carschno"
        },
        {
          "number": 466,
          "created_at": "2026-05-21T21:29:22Z",
          "last_comment_at": "2026-05-26T16:42:28Z",
          "last_comment_author": "gjcope"
        },
        {
          "number": 474,
          "created_at": "2026-06-12T13:15:04Z",
          "last_comment_at": "2026-06-15T15:07:38Z",
          "last_comment_author": "sdumetz"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/Smithsonian/dpo-voyager",
    "host": "github.com",
    "name": "dpo-voyager",
    "owner": "Smithsonian"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 58,
      "inputs": {
        "security": 28,
        "vitality": 94,
        "community": 54,
        "governance": 61,
        "engineering": 44
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 94,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 97,
            "inputs": {
              "commits_last_year": 476,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 48
            },
            "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": "48/52 weeks with commits",
                "points": 33.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 48
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "476 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 476
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 18 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": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v0.63.2",
              "releases_from_tags": false,
              "days_since_latest_release": 19,
              "mean_days_between_releases": 17
            },
            "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 19 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 19
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~17 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 17
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "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": 19,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 19 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 19
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 54,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "forks": 45,
              "stars": 202,
              "watchers": 16,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "202 stars",
                "points": 37.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 202
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "45 forks",
                "points": 13.7,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 45
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "16 watchers",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 16
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 61,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 11,
              "top_contributor_share": 0.654
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 65% of commits",
                "points": 7.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 65
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "11 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 9 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "merged_prs": 181,
              "open_issues": 22,
              "closed_issues": 203,
              "issue_closed_ratio": 0.902,
              "closed_unmerged_prs": 30
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "90% of issues closed",
                "points": 42.2,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 90
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "181/211 decided PRs merged",
                "points": 32.8,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 181,
                      "decided": 211
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/3 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "followers": 188,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "Smithsonian",
              "public_repos": 336,
              "account_age_days": 4901
            },
            "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": "188 followers of Smithsonian",
                "points": 16.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 188,
                      "login": "Smithsonian"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "336 public repos, account ~13 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 336
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 13
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "at_risk",
        "name": "Engineering Quality",
        "value": 44,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "critical",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 24,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "0 out of 3 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 28,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Dangerous-Workflow, Packaging, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "dangerous_workflow",
                    "packaging",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 25,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 14,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 4,
              "scorecard_aggregate": 2.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 6,
                "status": "partial",
                "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": "0 out of 3 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/3 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 9 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "38 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "at_risk",
            "name": "Dependency advisories",
            "note": "Matched the npm:voyager@0.4.13 runtime dependency closure — what installing the published package pulls in — 68 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:voyager@0.4.13",
                  "assessed": 68
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 41,
            "inputs": {
              "source": "osv",
              "advisories": 19,
              "affected_packages": 4,
              "assessed_packages": 68,
              "unassessed_packages": 0,
              "affected_by_severity": "critical 1, high 3",
              "direct_affected_packages": 1
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "1 affected: ecstatic 0.5.8 (high 7.5)",
                "points": 14,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "ecstatic 0.5.8 (high 7.5)"
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "3 affected: lodash 1.0.2 (critical 9.1), minimatch 0.2.14 (high 7.5), minimatch 2.0.10 (high 7.5)",
                "points": 4.9,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 3,
                      "packages": "lodash 1.0.2 (critical 9.1), minimatch 0.2.14 (high 7.5), minimatch 2.0.10 (high 7.5)"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "4 advisory-carrying package(s) unaddressed past 90 days; oldest published 3127 days ago",
                "points": 22.3,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 4,
                      "oldest": 3127
                    }
                  }
                ],
                "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": 68,
              "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": 10
            },
            "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": "at_risk",
        "name": "AI Readiness",
        "value": 39,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "critical",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.25,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "25 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 13.3,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 25,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 43,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "libs/ff-browser/tsconfig.json",
                "libs/ff-core/tsconfig.json",
                "libs/ff-graph/tsconfig.json",
                "libs/ff-scene/tsconfig.json",
                "libs/ff-three/tsconfig.json",
                "libs/ff-ui/tsconfig.json",
                "source/client/tsconfig.json",
                "source/server/tsconfig.json",
                "source/test/tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "libs/ff-browser/tsconfig.json, libs/ff-core/tsconfig.json, libs/ff-graph/tsconfig.json, libs/ff-scene/tsconfig.json, libs/ff-three/tsconfig.json, libs/ff-ui/tsconfig.json, source/client/tsconfig.json, source/server/tsconfig.json, source/test/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "libs/ff-browser/tsconfig.json, libs/ff-core/tsconfig.json, libs/ff-graph/tsconfig.json, libs/ff-scene/tsconfig.json, libs/ff-three/tsconfig.json, libs/ff-ui/tsconfig.json, source/client/tsconfig.json, source/server/tsconfig.json, source/test/tsconfig.json"
                    }
                  }
                ],
                "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": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 719410,
              "source_files_sampled": 328,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript with type-check config (libs/ff-browser/tsconfig.json, libs/ff-core/tsconfig.json, libs/ff-graph/tsconfig.json, libs/ff-scene/tsconfig.json, libs/ff-three/tsconfig.json, libs/ff-ui/tsconfig.json, source/client/tsconfig.json, source/server/tsconfig.json, source/test/tsconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "libs/ff-browser/tsconfig.json, libs/ff-core/tsconfig.json, libs/ff-graph/tsconfig.json, libs/ff-scene/tsconfig.json, libs/ff-three/tsconfig.json, libs/ff-ui/tsconfig.json, source/client/tsconfig.json, source/server/tsconfig.json, source/test/tsconfig.json",
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/328 source files over 60KB",
                "points": 54.7,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 328,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "example"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "example",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "example"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "npm package 'voyager' points at a different repository (https://github.com/wieden-kennedy/voyager); excluded from ecosystem scoring"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T13:57:31.577412Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/Smithsonian/dpo-voyager.svg",
  "full_name": "Smithsonian/dpo-voyager",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.26.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsnpm.