Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-25 23:10 UTC

spinabot / brigade

Brigade — Your personal intelligence, built enterprise-grade

TypeScriptMIT★ 239 stars⑂ 19 forkssince Jun 2026View on GitHub ↗

spinabot/brigade holds a health index of 67 out of 100, placing it in the Moderate band. It scores highest on Engineering Quality (81/100) and lowest on Security (55/100). It was last updated 5 days ago. A single contributor accounts for most of its recent work.

67
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.

67
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

spinabotOrganization
4 followers1 public reposince Jun 2026

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

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publishTags
npm@spinabot/brigade1.29.49,677585 days agoaiagentagentsai-agentclituillmclaudeopenaigeminiollamawhatsappgatewaybrigade

Metrics by category

Vitality

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

77Good · 22% of overall
How it's scored
36/36Push recency — last push 5 days ago
8.3/36Commit cadence — 12/52 weeks with commits
18/18Commit volume — 500 commits in the last year
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Inputs used
commits_last_year500
human_commit_share0.85
days_since_last_push5
active_weeks_last_year12

Release discipline

100Excellent
How it's scored
27/27Ships releases — 56 releases published
36/36Release recency — latest release 5 days ago
27/27Release cadence — a release every ~1.1 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count56
latest_release_tagbrigade-v1.29.4
releases_from_tagsno
days_since_latest_release5
mean_days_between_releases1.1
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

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

63Moderate · 18% of overall
How it's scored
38.6/60Stars — 239 stars
10.5/25Forks — 19 forks
0/15Watchers — 2 watchers
Inputs used
forks19
stars239
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
18/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
6.3/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductno
has_pull_request_templateyes
How it's scored
53.1/80Monthly downloads — 9,677 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packages@spinabot/brigade
dependents
ecosystemsnpm
total_downloads
monthly_downloads9,677
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

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

56Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0.6/22.5Commit distribution — top contributor authored 97% of commits
4.1/13.5Contributor breadth — 3 contributors
10/10OpenSSF Scorecard: Contributors — project has 3 contributing companies or organizations -- score normalized to 10
Inputs used
bus_factor1
contributors_sampled3
top_contributor_share0.973
How it's scored
46.8/46.8Issue resolution — 100% of issues closed
31.7/38.3PR acceptance — 63/76 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/23 approved changesets -- score normalized to 0
Inputs used
merged_prs63
open_issues0
closed_issues2
issue_closed_ratio1
closed_unmerged_prs13
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
5/25Owner reach — 4 followers of spinabot
2.4/25Track record — 1 public repos, account ~0 yr old
Inputs used
followers4
owner_typeOrganization
is_verified
owner_loginspinabot
public_repos1
account_age_days43
How it's scored
25/25Published & resolvable — 1 package(s) on npm
35/35Publish recency — latest publish 5 days ago
20/20Version history — 58 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packages@spinabot/brigade
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Engineering Quality

Are baseline engineering and documentation practices in place?

81Good · 20% of overall
How it's scored
24/24CI workflows — 7 workflow(s)
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 7 out of 7 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentation

100Excellent
How it's scored
30/30README
25/25Documentation directory
15/15Documentation / homepage site — https://www.brigade.spinabot.com
10/10Repository description
10/10Topics — 20 topics
10/10Wiki
Inputs used
topicsagent-runtime, ai, ai-crew, autonomous-agents, brigade, chatgpt, clawdbot, codex, crustacean, hermes, hermes-agent, llm, moltbot, molty, multi-agent, openclaw, self-improving-ai, brigade-agent, pride-of-agents, spinabot
has_wikiyes
homepagehttps://www.brigade.spinabot.com
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

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

55Moderate · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 7 out of 7 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/23 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 3 contributing companies or organizations -- score normalized to 10
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
1.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
3.5/5SAST — SAST tool detected but not run on all commits
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
1.5/7.5Vulnerabilities — 8 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5
Excluded from scoring (no data or not applicable): signed_releases. Remaining weights renormalized.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
7.3/25Indirect dependencies free of known advisories — 3 affected: brace-expansion 1.1.16 (high 7.5), brace-expansion 2.1.2 (high 7.5), uuid 8.3.2 (high 7.5)
33.7/40No advisories left outstanding — 1 advisory-carrying package(s) unaddressed past 90 days; oldest published 94 days ago
Inputs used
sourceosv
advisories3
affected_packages3
assessed_packages535
unassessed_packages0
affected_by_severityhigh 3
direct_affected_packages0
Matched the npm:@spinabot/brigade@1.29.4 runtime dependency closure — what installing the published package pulls in — 535 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.

64Moderate · 0% of overall
How it's scored
45/45Agent instructions — AGENTS.md, templates/workspace/AGENTS.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 85 of 85 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share1
agent_instruction_filesAGENTS.md, templates/workspace/AGENTS.md
agent_instruction_max_bytes13,148
How it's scored
0/18One-command bootstrap
22/22Automated tests
0/11Lint / format config
11/11Static type checking — convex/tsconfig.json, tsconfig.json
10/10Reproducible environment — lockfile
0/10Demonstrated agent practice — no agent-authored commits among the last 100
5/8Automated maintenance — dependency automation configured, none observed in the sampled commits
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Inputs used
has_nixno
has_testsyes
lockfilespackage-lock.json
has_dockerfileno
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configsconvex/tsconfig.json, tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
How it's scored
45/45Type-checkable code — TypeScript (statically typed)
54.2/55Manageable file sizes — 17/1,204 source files over 60KB
Inputs used
primary_languageTypeScript
largest_source_bytes2,475,157
source_files_sampled1,204
oversized_source_files17
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
20/20MCP server
0/40Runnable examples
Inputs used
example_dirs
has_mcp_signalyes
api_schema_files

Key facts

239GitHub stars
3contributors
500commits, last 12 months
5days since last push
56releases
1bus factor
0open issues
npmpackage ecosystems

Data collection warnings

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

More detail

Star and fork history 0 ★ / 19 ⇿
0Stars
19Forks
56Releases

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.

0481216201932026-062026-072026-07
Major 0Minor 0Patch 0
OpenSSF Scorecard 5.0 / 10
5.0aggregate

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-25 23:10 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests7 out of 7 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/23 approved changesets -- score normalized to 0
10Contributorsproject has 3 contributing companies or organizations -- score normalized to 10
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
3Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 3
7SASTSAST tool detected but not run on all commits
10Security-Policysecurity policy file detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
2Vulnerabilities8 existing vulnerabilities detected
Direct dependencies 44
RegistryPackageVersion constraintManifest
npm@cantoo/pdf-lib^2.7.1package.json
npm@composio/core^0.10.0package.json
npm@earendil-works/pi-agent-core0.79.9package.json
npm@earendil-works/pi-ai0.79.9package.json
npm@earendil-works/pi-coding-agent0.79.9package.json
npm@earendil-works/pi-tui0.79.9package.json
npm@grammyjs/runner^2.0.3package.json
npm@grammyjs/transformer-throttler^1.2.1package.json
npm@grammyjs/types^3.21.0package.json
npm@mozilla/readability^0.6.0package.json
npm@pdf-lib/fontkit^1.1.1package.json
npm@slack/socket-mode^2.0.7package.json
npm@slack/web-api^7.17.0package.json
npm@whiskeysockets/baileys7.0.0-rc13package.json
npmcfonts^3.3.1package.json
npmchalk^5.3.0package.json
npmcli-highlight^2.1.11package.json
npmcommander^12.1.0package.json
npmconvex^1.40.0package.json
npmcroner^10.0.1package.json
npmdiscord.js^14.26.4package.json
npmdocx^9.7.1package.json
npmexceljs^4.4.0package.json
npmfflate^0.8.3package.json
npmgrammy^1.42.0package.json
npmhttps-proxy-agent^7.0.6package.json
npmjimp^1.6.1package.json
npmjiti^2.6.1package.json
npmjson5^2.2.3package.json
npmlinkedom^0.18.12package.json
npmminimatch^10.2.5package.json
npmplaywright-core^1.59.0package.json
npmpptxgenjs^4.0.1package.json
npmprompts^2.4.2package.json
npmproper-lockfile^4.1.2package.json
npmqrcode-terminal^0.12.0package.json
npmsocks-proxy-agent^10.1.0package.json
npmtar^7.5.15package.json
npmundici^7.25.0package.json
npmunpdf^1.6.2package.json
npmws^8.21.0package.json
npm@anthropic-ai/claude-code^2.1.0package.json
npmyaml^2.9.0package.json
npmzod^3.23.8package.json
All dependencies 558

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

RegistryPackageVersionRelation
npm@anthropic-ai/claude-code2.1.201direct
npm@cantoo/pdf-lib2.7.1direct
npm@composio/core0.10.0direct
npm@earendil-works/pi-agent-core0.79.9direct
npm@earendil-works/pi-ai0.79.9direct
npm@earendil-works/pi-coding-agent0.79.9direct
npm@earendil-works/pi-tui0.79.9direct
npm@grammyjs/runner2.0.3direct
npm@grammyjs/transformer-throttler1.2.1direct
npm@grammyjs/types3.28.0direct
npm@mozilla/readability0.6.0direct
npm@pdf-lib/fontkit1.1.1direct
npm@slack/socket-mode2.0.7direct
npm@slack/web-api7.17.0direct
npm@whiskeysockets/baileys7.0.0-rc13direct
npmcfonts3.3.1direct
npmchalk4.1.2direct
npmchalk5.6.2direct
npmcli-highlight2.1.11direct
npmcommander12.1.0direct
npmconvex1.41.0direct
npmcroner10.0.1direct
npmdiscord.js14.26.4direct
npmdocx9.7.1direct
npmexceljs4.4.0direct
npmfflate0.8.3direct
npmgrammy1.44.0direct
npmhttps-proxy-agent5.0.1direct
npmhttps-proxy-agent7.0.6direct
npmjimp1.6.1direct
npmjiti2.7.0direct
npmjson52.2.3direct
npmlinkedom0.18.12direct
npmminimatch10.2.5direct
npmminimatch3.1.5direct
npmminimatch5.1.9direct
npmplaywright-core1.60.0direct
npmpptxgenjs4.0.1direct
npmprompts2.4.2direct
npmproper-lockfile4.1.2direct
npmqrcode-terminal0.12.0direct
npmsocks-proxy-agent10.1.0direct
npmtar7.5.16direct
npmundici6.27.0direct
npmundici7.28.0direct
npmundici8.5.0direct
npmunpdf1.6.2direct
npmws8.21.0direct
npmyaml2.9.0direct
npmzod3.25.76direct
npm@anthropic-ai/claude-code-darwin-arm642.1.201indirect
npm@anthropic-ai/claude-code-darwin-x642.1.201indirect
npm@anthropic-ai/claude-code-linux-arm642.1.201indirect
npm@anthropic-ai/claude-code-linux-arm64-musl2.1.201indirect
npm@anthropic-ai/claude-code-linux-x642.1.201indirect
npm@anthropic-ai/claude-code-linux-x64-musl2.1.201indirect
npm@anthropic-ai/claude-code-win32-arm642.1.201indirect
npm@anthropic-ai/claude-code-win32-x642.1.201indirect
npm@anthropic-ai/sdk0.91.1indirect
npm@aws-crypto/sha256-browser5.2.0indirect
npm@aws-crypto/sha256-js5.2.0indirect
npm@aws-crypto/supports-web-crypto5.2.0indirect
npm@aws-crypto/util5.2.0indirect
npm@aws-sdk/client-bedrock-runtime3.1048.0indirect
npm@aws-sdk/core3.974.26indirect
npm@aws-sdk/credential-provider-env3.972.52indirect
npm@aws-sdk/credential-provider-http3.972.54indirect
npm@aws-sdk/credential-provider-ini3.972.59indirect
npm@aws-sdk/credential-provider-login3.972.58indirect
npm@aws-sdk/credential-provider-node3.972.61indirect
npm@aws-sdk/credential-provider-process3.972.52indirect
npm@aws-sdk/credential-provider-sso3.972.58indirect
npm@aws-sdk/credential-provider-web-identity3.972.58indirect
npm@aws-sdk/eventstream-handler-node3.972.25indirect
npm@aws-sdk/middleware-eventstream3.972.21indirect
npm@aws-sdk/middleware-websocket3.972.34indirect
npm@aws-sdk/nested-clients3.997.26indirect
npm@aws-sdk/signature-v4-multi-region3.996.38indirect
npm@aws-sdk/token-providers3.1048.0indirect
npm@aws-sdk/token-providers3.1078.0indirect
npm@aws-sdk/types3.973.15indirect
npm@aws-sdk/util-locate-window3.965.8indirect
npm@aws-sdk/xml-builder3.972.33indirect
npm@aws/lambda-invoke-store0.2.4indirect
npm@babel/runtime7.29.7indirect
npm@borewit/text-codec0.2.2indirect
npm@cacheable/memory2.0.9indirect
npm@cacheable/node-cache1.7.6indirect
npm@cacheable/utils2.4.1indirect
npm@composio/client0.1.0-alpha.72indirect
npm@composio/json-schema-to-zod0.1.20indirect
npm@discordjs/builders1.14.1indirect
npm@discordjs/collection1.5.3indirect
npm@discordjs/collection2.1.1indirect
npm@discordjs/formatters0.6.2indirect
npm@discordjs/rest2.6.1indirect
npm@discordjs/util1.2.0indirect
npm@discordjs/ws1.2.3indirect
npm@esbuild/aix-ppc640.27.0indirect
npm@esbuild/aix-ppc640.28.1indirect
npm@esbuild/android-arm0.27.0indirect
npm@esbuild/android-arm0.28.1indirect
npm@esbuild/android-arm640.27.0indirect
npm@esbuild/android-arm640.28.1indirect
npm@esbuild/android-x640.27.0indirect
npm@esbuild/android-x640.28.1indirect
npm@esbuild/darwin-arm640.27.0indirect
npm@esbuild/darwin-arm640.28.1indirect
npm@esbuild/darwin-x640.27.0indirect
npm@esbuild/darwin-x640.28.1indirect
npm@esbuild/freebsd-arm640.27.0indirect
npm@esbuild/freebsd-arm640.28.1indirect
npm@esbuild/freebsd-x640.27.0indirect
npm@esbuild/freebsd-x640.28.1indirect
npm@esbuild/linux-arm0.27.0indirect
npm@esbuild/linux-arm0.28.1indirect
npm@esbuild/linux-arm640.27.0indirect
npm@esbuild/linux-arm640.28.1indirect
npm@esbuild/linux-ia320.27.0indirect
npm@esbuild/linux-ia320.28.1indirect
npm@esbuild/linux-loong640.27.0indirect
npm@esbuild/linux-loong640.28.1indirect
npm@esbuild/linux-mips64el0.27.0indirect
npm@esbuild/linux-mips64el0.28.1indirect
npm@esbuild/linux-ppc640.27.0indirect
npm@esbuild/linux-ppc640.28.1indirect
npm@esbuild/linux-riscv640.27.0indirect
npm@esbuild/linux-riscv640.28.1indirect
npm@esbuild/linux-s390x0.27.0indirect
npm@esbuild/linux-s390x0.28.1indirect
npm@esbuild/linux-x640.27.0indirect
npm@esbuild/linux-x640.28.1indirect
npm@esbuild/netbsd-arm640.27.0indirect
npm@esbuild/netbsd-arm640.28.1indirect
npm@esbuild/netbsd-x640.27.0indirect
npm@esbuild/netbsd-x640.28.1indirect
npm@esbuild/openbsd-arm640.27.0indirect
npm@esbuild/openbsd-arm640.28.1indirect
npm@esbuild/openbsd-x640.27.0indirect
npm@esbuild/openbsd-x640.28.1indirect
npm@esbuild/openharmony-arm640.27.0indirect
npm@esbuild/openharmony-arm640.28.1indirect
npm@esbuild/sunos-x640.27.0indirect
npm@esbuild/sunos-x640.28.1indirect
npm@esbuild/win32-arm640.27.0indirect
npm@esbuild/win32-arm640.28.1indirect
npm@esbuild/win32-ia320.27.0indirect
npm@esbuild/win32-ia320.28.1indirect
npm@esbuild/win32-x640.27.0indirect
npm@esbuild/win32-x640.28.1indirect
npm@fast-csv/format4.3.5indirect
npm@fast-csv/parse4.3.6indirect
npm@google/genai1.52.0indirect
npm@hapi/boom9.1.4indirect
npm@hapi/hoek9.3.0indirect
npm@isaacs/fs-minipass4.0.1indirect
npm@jimp/core1.6.1indirect
npm@jimp/diff1.6.1indirect
npm@jimp/file-ops1.6.1indirect
npm@jimp/js-bmp1.6.1indirect
npm@jimp/js-gif1.6.1indirect
npm@jimp/js-jpeg1.6.1indirect
npm@jimp/js-png1.6.1indirect
npm@jimp/js-tiff1.6.1indirect
npm@jimp/plugin-blit1.6.1indirect
npm@jimp/plugin-blur1.6.1indirect
npm@jimp/plugin-circle1.6.1indirect
npm@jimp/plugin-color1.6.1indirect
npm@jimp/plugin-contain1.6.1indirect
npm@jimp/plugin-cover1.6.1indirect
npm@jimp/plugin-crop1.6.1indirect
npm@jimp/plugin-displace1.6.1indirect
npm@jimp/plugin-dither1.6.1indirect
npm@jimp/plugin-fisheye1.6.1indirect
npm@jimp/plugin-flip1.6.1indirect
npm@jimp/plugin-hash1.6.1indirect
npm@jimp/plugin-mask1.6.1indirect
npm@jimp/plugin-print1.6.1indirect
npm@jimp/plugin-quantize1.6.1indirect
npm@jimp/plugin-resize1.6.1indirect
npm@jimp/plugin-rotate1.6.1indirect
npm@jimp/plugin-threshold1.6.1indirect
npm@jimp/types1.6.1indirect
npm@jimp/utils1.6.1indirect
npm@keyv/bigmap1.3.1indirect
npm@keyv/serialize1.1.1indirect
npm@mariozechner/clipboard0.3.9indirect
npm@mariozechner/clipboard-darwin-arm640.3.9indirect
npm@mariozechner/clipboard-darwin-universal0.3.9indirect
npm@mariozechner/clipboard-darwin-x640.3.9indirect
npm@mariozechner/clipboard-linux-arm64-gnu0.3.9indirect
npm@mariozechner/clipboard-linux-arm64-musl0.3.9indirect
npm@mariozechner/clipboard-linux-riscv64-gnu0.3.9indirect
npm@mariozechner/clipboard-linux-x64-gnu0.3.9indirect
npm@mariozechner/clipboard-linux-x64-musl0.3.9indirect
npm@mariozechner/clipboard-win32-arm64-msvc0.3.9indirect
npm@mariozechner/clipboard-win32-x64-msvc0.3.9indirect
npm@mistralai/mistralai2.2.6indirect
npm@opentelemetry/api1.9.0indirect
npm@opentelemetry/semantic-conventions1.41.1indirect
npm@pdf-lib/standard-fonts1.0.0indirect
npm@pdf-lib/upng1.0.1indirect
npm@pinojs/redact0.4.0indirect
npm@protobufjs/aspromise1.1.2indirect
npm@protobufjs/base641.1.2indirect
npm@protobufjs/codegen2.0.5indirect
npm@protobufjs/eventemitter1.1.1indirect
npm@protobufjs/fetch1.1.1indirect
npm@protobufjs/float1.0.2indirect
npm@protobufjs/path1.1.2indirect
npm@protobufjs/pool1.1.0indirect
npm@protobufjs/utf81.1.1indirect
npm@sapphire/async-queue1.5.5indirect
npm@sapphire/shapeshift4.0.0indirect
npm@sapphire/snowflake3.5.3indirect
npm@sapphire/snowflake3.5.5indirect
npm@silvia-odwyer/photon-node0.3.4indirect
npm@slack/logger4.0.1indirect
npm@slack/types2.21.1indirect
npm@smithy/core3.29.0indirect
npm@smithy/credential-provider-imds4.4.5indirect
npm@smithy/fetch-http-handler5.6.2indirect
npm@smithy/is-array-buffer2.2.0indirect
npm@smithy/node-http-handler4.7.3indirect
npm@smithy/node-http-handler4.9.2indirect
npm@smithy/signature-v45.6.1indirect
npm@smithy/types4.15.1indirect
npm@smithy/util-buffer-from2.2.0indirect
npm@smithy/util-utf82.3.0indirect
npm@tokenizer/inflate0.4.1indirect
npm@tokenizer/token0.3.0indirect
npm@types/json-schema7.0.15indirect
npm@types/node14.18.63indirect
npm@types/node16.9.1indirect
npm@types/node22.19.17indirect
npm@types/node25.9.4indirect
npm@types/prompts2.4.9indirect
npm@types/proper-lockfile4.1.4indirect
npm@types/qrcode-terminal0.12.2indirect
npm@types/retry0.12.0indirect
npm@types/tar6.1.13indirect
npm@types/ws8.18.1indirect
npm@vladfrangu/async_event_emitter2.4.7indirect
npmabort-controller3.0.0indirect
npmagent-base6.0.2indirect
npmagent-base7.1.4indirect
npmagent-base9.0.0indirect
npmansi-regex5.0.1indirect
npmansi-styles4.3.0indirect
npmany-base1.1.0indirect
npmany-promise1.3.0indirect
npmarchiver5.3.2indirect
npmarchiver-utils2.1.0indirect
npmarchiver-utils3.0.4indirect
npmasync3.2.6indirect
npmasync-mutex0.5.0indirect
npmasynckit0.4.0indirect
npmatomic-sleep1.0.0indirect
npmawait-to-js3.0.0indirect
npmaxios1.18.1indirect
npmbalanced-match1.0.2indirect
npmbalanced-match4.0.4indirect
npmbase64-js1.5.1indirect
npmbig-integer1.6.52indirect
npmbignumber.js9.3.1indirect
npmbinary0.3.0indirect
npmbl4.1.0indirect
npmbluebird3.4.7indirect
npmbmp-ts1.0.9indirect
npmboolbase1.0.0indirect
npmbottleneck2.19.5indirect
npmbowser2.14.1indirect
npmbrace-expansion1.1.15indirect
npmbrace-expansion2.1.1indirect
npmbrace-expansion5.0.6indirect
npmbuffer5.7.1indirect
npmbuffer-crc320.2.13indirect
npmbuffer-equal-constant-time1.0.1indirect
npmbuffer-indexof-polyfill1.0.2indirect
npmbuffers0.1.1indirect
npmcacheable2.3.5indirect
npmcall-bind-apply-helpers1.0.2indirect
npmchainsaw0.1.0indirect
npmchownr3.0.0indirect
npmcliui7.0.4indirect
npmcolor4.2.3indirect
npmcolor-convert2.0.1indirect
npmcolor-name1.1.4indirect
npmcolor-string1.9.1indirect
npmcombined-stream1.0.8indirect
npmcompress-commons4.1.2indirect
npmconcat-map0.0.1indirect
npmcontent-type1.0.5indirect
npmcore-util-is1.0.3indirect
npmcrc-321.2.2indirect
npmcrc32-stream4.0.3indirect
npmcross-spawn7.0.6indirect
npmcrypto-js4.2.0indirect
npmcss-select5.2.2indirect
npmcss-what6.2.2indirect
npmcssom0.5.0indirect
npmcurve25519-js0.0.4indirect
npmdata-uri-to-buffer4.0.1indirect
npmdayjs1.11.21indirect
npmdebug4.4.3indirect
npmdefine-property1.0.0indirect
npmdelayed-stream1.0.0indirect
npmdiff8.0.4indirect
npmdiscord-api-types0.38.49indirect
npmdom-serializer2.0.0indirect
npmdomelementtype2.3.0indirect
npmdomhandler5.0.3indirect
npmdomutils3.2.2indirect
npmdunder-proto1.0.1indirect
npmduplexer20.1.4indirect
npmecdsa-sig-formatter1.0.11indirect
npmemoji-regex8.0.0indirect
npmend-of-stream1.4.5indirect
npmentities4.5.0indirect
npmentities7.0.1indirect
npmes-define-property1.0.1indirect
npmes-errors1.3.0indirect
npmes-object-atoms1.1.2indirect
npmes-set-tostringtag2.1.0indirect
npmesbuild0.27.0indirect
npmesbuild0.28.1indirect
npmescalade3.2.0indirect
npmevent-target-shim5.0.1indirect
npmeventemitter34.0.7indirect
npmeventemitter35.0.4indirect
npmexif-parser0.1.12indirect
npmextend3.0.2indirect
npmfast-csv4.3.6indirect
npmfast-deep-equal3.1.3indirect
npmfetch-blob3.2.0indirect
npmfile-type21.3.4indirect
npmfollow-redirects1.16.0indirect
npmform-data4.0.6indirect
npmformdata-polyfill4.0.10indirect
npmfs-constants1.0.0indirect
npmfs.realpath1.0.0indirect
npmfsevents2.3.3indirect
npmfstream1.0.12indirect
npmfunction-bind1.1.2indirect
npmgaxios7.1.5indirect
npmgcp-metadata8.1.2indirect
npmget-caller-file2.0.5indirect
npmget-east-asian-width1.6.0indirect
npmget-intrinsic1.3.0indirect
npmget-proto1.0.1indirect
npmgifwrap0.10.1indirect
npmglob13.0.6indirect
npmglob7.2.3indirect
npmgoogle-auth-library10.9.0indirect
npmgoogle-logging-utils1.1.3indirect
npmgopd1.2.0indirect
npmgraceful-fs4.2.11indirect
npmhas-flag4.0.0indirect
npmhas-symbols1.1.0indirect
npmhas-tostringtag1.0.2indirect
npmhash.js1.1.7indirect
npmhashery1.5.1indirect
npmhasown2.0.4indirect
npmhighlight.js10.7.3indirect
npmhookified1.15.1indirect
npmhookified2.2.0indirect
npmhosted-git-info9.0.3indirect
npmhtml-entities2.6.0indirect
npmhtml-escaper3.0.3indirect
npmhtmlparser210.1.0indirect
npmhttp-proxy-agent7.0.2indirect
npmhttps1.0.0indirect
npmieee7541.2.1indirect
npmignore7.0.5indirect
npmimage-q4.0.0indirect
npmimage-size1.2.1indirect
npmimmediate3.0.6indirect
npminflight1.0.6indirect
npminherits2.0.4indirect
npmip-address10.2.0indirect
npmis-accessor-descriptor1.0.1indirect
npmis-arrayish0.3.4indirect
npmis-buffer1.1.6indirect
npmis-data-descriptor1.0.1indirect
npmis-descriptor1.0.3indirect
npmis-electron2.2.2indirect
npmis-fullwidth-code-point3.0.0indirect
npmis-number3.0.0indirect
npmis-stream2.0.1indirect
npmisarray1.0.0indirect
npmisexe2.0.0indirect
npmjpeg-js0.4.4indirect
npmjson-bigint1.0.0indirect
npmjson-schema-to-ts3.1.1indirect
npmjszip3.10.1indirect
npmjwa2.0.1indirect
npmjws4.0.1indirect
npmkeyv5.6.0indirect
npmkind-of3.2.2indirect
npmkleur3.0.3indirect
npmlazystream1.0.1indirect
npmlibsignal6.0.0indirect
npmlie3.3.0indirect
npmlistenercount1.0.1indirect
npmlodash4.18.1indirect
npmlodash.defaults4.2.0indirect
npmlodash.difference4.5.0indirect
npmlodash.escaperegexp4.1.2indirect
npmlodash.flatten4.4.0indirect
npmlodash.groupby4.6.0indirect
npmlodash.isboolean3.0.3indirect
npmlodash.isequal4.5.0indirect
npmlodash.isfunction3.0.9indirect
npmlodash.isnil4.0.0indirect
npmlodash.isplainobject4.0.6indirect
npmlodash.isundefined3.0.1indirect
npmlodash.snakecase4.1.1indirect
npmlodash.union4.6.0indirect
npmlodash.uniq4.5.0indirect
npmlong5.3.2indirect
npmlru-cache11.4.0indirect
npmlru-cache11.5.1indirect
npmmagic-bytes.js1.13.0indirect
npmmarked18.0.5indirect
npmmath-intrinsics1.1.0indirect
npmmedia-typer1.1.0indirect
npmmime3.0.0indirect
npmmime-db1.52.0indirect
npmmime-types2.1.35indirect
npmminimalistic-assert1.0.1indirect
npmminimist1.2.8indirect
npmminipass4.2.8indirect
npmminipass7.1.3indirect
npmminizlib3.1.0indirect
npmmkdirp0.5.6indirect
npmms2.1.3indirect
npmmusic-metadata11.12.3indirect
npmmz2.7.0indirect
npmnanoid5.1.16indirect
npmnode-domexception1.0.0indirect
npmnode-fetch2.7.0indirect
npmnode-fetch3.3.2indirect
npmnode-html-better-parser1.5.8indirect
npmnormalize-path3.0.0indirect
npmnth-check2.1.1indirect
npmobject-assign4.1.1indirect
npmomggif1.0.10indirect
npmon-exit-leak-free2.1.2indirect
npmonce1.4.0indirect
npmopenai6.26.0indirect
npmp-finally1.0.0indirect
npmp-queue6.6.2indirect
npmp-queue9.3.0indirect
npmp-retry4.6.2indirect
npmp-timeout3.2.0indirect
npmp-timeout7.0.1indirect
npmpako1.0.11indirect
npmparse-bmfont-ascii1.0.6indirect
npmparse-bmfont-binary1.0.6indirect
npmparse-bmfont-xml1.1.6indirect
npmparse55.1.1indirect
npmparse56.0.1indirect
npmparse5-htmlparser2-tree-adapter6.0.1indirect
npmpartial-json0.1.7indirect
npmpath-is-absolute1.0.1indirect
npmpath-key3.1.1indirect
npmpath-scurry2.0.2indirect
npmpino9.14.0indirect
npmpino-abstract-transport2.0.0indirect
npmpino-std-serializers7.1.0indirect
npmpixelmatch5.3.0indirect
npmpngjs6.0.0indirect
npmpngjs7.0.0indirect
npmprettier3.8.3indirect
npmprocess-nextick-args2.0.1indirect
npmprocess-warning5.0.0indirect
npmprotobufjs7.6.4indirect
npmproxy-from-env2.1.0indirect
npmpusher-js8.5.0indirect
npmqified0.10.1indirect
npmqueue6.0.2indirect
npmquick-format-unescaped4.0.4indirect
npmreadable-stream2.3.8indirect
npmreadable-stream3.6.2indirect
npmreaddir-glob1.1.3indirect
npmreal-require0.2.0indirect
npmrequire-directory2.1.1indirect
npmretry0.12.0indirect
npmretry0.13.1indirect
npmrimraf2.7.1indirect
npmsafe-buffer5.1.2indirect
npmsafe-stable-stringify2.5.0indirect
npmsax1.6.0indirect
npmsaxes5.0.1indirect
npmsemver7.8.0indirect
npmsemver7.8.5indirect
npmsetimmediate1.0.5indirect
npmshebang-command2.0.0indirect
npmshebang-regex3.0.0indirect
npmsignal-exit3.0.7indirect
npmsimple-swizzle0.2.4indirect
npmsimple-xml-to-json1.2.7indirect
npmsisteransi1.0.5indirect
npmsmart-buffer4.2.0indirect
npmsocks2.8.9indirect
npmsonic-boom4.2.1indirect
npmsplit24.2.0indirect
npmstring-width4.2.3indirect
npmstring_decoder1.1.1indirect
npmstrip-ansi6.0.1indirect
npmstrtok310.3.5indirect
npmsupports-color7.2.0indirect
npmsupports-color8.1.1indirect
npmtar-stream2.2.0indirect
npmthenify3.3.1indirect
npmthenify-all1.6.0indirect
npmthread-stream3.1.0indirect
npmtinycolor21.6.0indirect
npmtmp0.2.7indirect
npmtoken-types6.1.2indirect
npmtr460.0.3indirect
npmtraverse0.3.9indirect
npmts-algebra2.0.0indirect
npmts-mixer6.0.4indirect
npmtslib2.8.1indirect
npmtsx4.22.4indirect
npmtweetnacl1.0.3indirect
npmtypebox1.1.38indirect
npmtypescript5.9.3indirect
npmuhyphen0.2.0indirect
npmuint8array-extras1.5.0indirect
npmundici-types6.21.0indirect
npmundici-types7.24.6indirect
npmunzipper0.10.14indirect
npmutif24.1.0indirect
npmutil-deprecate1.0.2indirect
npmuuid11.1.1indirect
npmweb-streams-polyfill3.3.3indirect
npmwebidl-conversions3.0.1indirect
npmwhatsapp-rust-bridge0.5.4indirect
npmwhatwg-url5.0.0indirect
npmwhich2.0.2indirect
npmwin-guid0.2.1indirect
npmwindow-size1.1.1indirect
npmwrap-ansi7.0.0indirect
npmwrappy1.0.2indirect
npmxml1.0.1indirect
npmxml-js1.6.11indirect
npmxml-parse-from-string1.0.1indirect
npmxml2js0.5.0indirect
npmxmlbuilder11.0.1indirect
npmxmlchars2.2.0indirect
npmy18n5.0.8indirect
npmyallist5.0.0indirect
npmyargs16.2.0indirect
npmyargs-parser20.2.9indirect
npmzip-stream4.1.1indirect
npmzod-to-json-schema3.25.2indirect
Dependency advisories 3

Installing npm:@spinabot/brigade@1.29.4 pulls in 535 packages, direct and transitive: 3 carry known advisories, of which 0 are direct dependencies.

PackageVersionRelationSeverityAdvisoriesFixed in
brace-expansion1.1.16indirecthigh15.0.8
brace-expansion2.1.2indirecthigh15.0.8
uuid8.3.2indirecthigh113.0.1

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": [
        "agent-runtime",
        "ai",
        "ai-crew",
        "autonomous-agents",
        "brigade",
        "chatgpt",
        "clawdbot",
        "codex",
        "crustacean",
        "hermes",
        "hermes-agent",
        "llm",
        "moltbot",
        "molty",
        "multi-agent",
        "openclaw",
        "self-improving-ai",
        "brigade-agent",
        "pride-of-agents",
        "spinabot"
      ],
      "is_fork": false,
      "size_kb": 29724,
      "has_wiki": true,
      "homepage": "https://www.brigade.spinabot.com",
      "languages": {
        "Shell": 15244,
        "Python": 31302,
        "JavaScript": 75775,
        "PowerShell": 30438,
        "TypeScript": 14512427
      },
      "pushed_at": "2026-07-19T23:13:59Z",
      "created_at": "2026-06-19T15:18:17Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-25T17:19:46Z",
      "description": "Brigade — Your personal intelligence, built enterprise-grade",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://www.spinabot.com/",
      "name": null,
      "type": "Organization",
      "login": "spinabot",
      "company": null,
      "location": null,
      "followers": 4,
      "avatar_url": "https://avatars.githubusercontent.com/u/293232482?v=4",
      "created_at": "2026-06-12T22:17:15Z",
      "is_verified": null,
      "public_repos": 1,
      "account_age_days": 43
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "brigade-v1.29.4",
          "kind": "other",
          "published_at": "2026-07-19T23:14:00Z"
        },
        {
          "tag": "brigade-v1.29.3",
          "kind": "other",
          "published_at": "2026-07-19T22:05:29Z"
        },
        {
          "tag": "brigade-v1.29.2",
          "kind": "other",
          "published_at": "2026-07-19T21:32:42Z"
        },
        {
          "tag": "brigade-v1.29.1",
          "kind": "other",
          "published_at": "2026-07-12T07:54:05Z"
        },
        {
          "tag": "brigade-v1.29.0",
          "kind": "other",
          "published_at": "2026-07-12T07:31:21Z"
        },
        {
          "tag": "brigade-v1.28.0",
          "kind": "other",
          "published_at": "2026-07-10T08:36:24Z"
        },
        {
          "tag": "brigade-v1.27.1",
          "kind": "other",
          "published_at": "2026-07-10T06:30:39Z"
        },
        {
          "tag": "brigade-v1.27.0",
          "kind": "other",
          "published_at": "2026-07-10T06:12:18Z"
        },
        {
          "tag": "brigade-v1.26.1",
          "kind": "other",
          "published_at": "2026-07-10T05:44:31Z"
        },
        {
          "tag": "brigade-v1.26.0",
          "kind": "other",
          "published_at": "2026-07-10T05:27:12Z"
        },
        {
          "tag": "brigade-v1.25.3",
          "kind": "other",
          "published_at": "2026-07-07T05:14:12Z"
        },
        {
          "tag": "brigade-v1.25.2",
          "kind": "other",
          "published_at": "2026-07-07T04:58:32Z"
        },
        {
          "tag": "brigade-v1.25.1",
          "kind": "other",
          "published_at": "2026-07-07T04:23:57Z"
        },
        {
          "tag": "brigade-v1.25.0",
          "kind": "other",
          "published_at": "2026-07-05T21:29:09Z"
        },
        {
          "tag": "brigade-v1.24.2",
          "kind": "other",
          "published_at": "2026-07-05T05:50:25Z"
        },
        {
          "tag": "brigade-v1.24.1",
          "kind": "other",
          "published_at": "2026-07-05T04:48:11Z"
        },
        {
          "tag": "brigade-v1.24.0",
          "kind": "other",
          "published_at": "2026-07-05T04:32:46Z"
        },
        {
          "tag": "brigade-v1.23.0",
          "kind": "other",
          "published_at": "2026-07-04T03:20:04Z"
        },
        {
          "tag": "brigade-v1.22.1",
          "kind": "other",
          "published_at": "2026-07-03T01:27:03Z"
        },
        {
          "tag": "brigade-v1.22.0",
          "kind": "other",
          "published_at": "2026-07-02T23:23:13Z"
        },
        {
          "tag": "brigade-v1.21.0",
          "kind": "other",
          "published_at": "2026-07-02T23:10:22Z"
        },
        {
          "tag": "brigade-v1.20.0",
          "kind": "other",
          "published_at": "2026-07-02T17:48:25Z"
        },
        {
          "tag": "brigade-v1.19.4",
          "kind": "other",
          "published_at": "2026-07-02T03:23:43Z"
        },
        {
          "tag": "brigade-v1.19.3",
          "kind": "other",
          "published_at": "2026-07-02T02:28:50Z"
        },
        {
          "tag": "brigade-v1.19.2",
          "kind": "other",
          "published_at": "2026-06-30T17:13:13Z"
        },
        {
          "tag": "brigade-v1.19.1",
          "kind": "other",
          "published_at": "2026-06-29T22:38:57Z"
        },
        {
          "tag": "brigade-v1.19.0",
          "kind": "other",
          "published_at": "2026-06-29T22:11:43Z"
        },
        {
          "tag": "brigade-v1.18.0",
          "kind": "other",
          "published_at": "2026-06-29T20:15:31Z"
        },
        {
          "tag": "brigade-v1.17.1",
          "kind": "other",
          "published_at": "2026-06-28T18:06:01Z"
        },
        {
          "tag": "brigade-v1.17.0",
          "kind": "other",
          "published_at": "2026-06-28T16:19:44Z"
        },
        {
          "tag": "brigade-v1.16.0",
          "kind": "other",
          "published_at": "2026-06-27T20:43:03Z"
        },
        {
          "tag": "brigade-v1.15.0",
          "kind": "other",
          "published_at": "2026-06-27T19:47:04Z"
        },
        {
          "tag": "brigade-v1.14.0",
          "kind": "other",
          "published_at": "2026-06-26T17:21:56Z"
        },
        {
          "tag": "brigade-v1.13.0",
          "kind": "other",
          "published_at": "2026-06-26T15:20:19Z"
        },
        {
          "tag": "brigade-v1.12.0",
          "kind": "other",
          "published_at": "2026-06-26T13:09:56Z"
        },
        {
          "tag": "brigade-v1.11.2",
          "kind": "other",
          "published_at": "2026-06-25T23:00:22Z"
        },
        {
          "tag": "brigade-v1.11.1",
          "kind": "other",
          "published_at": "2026-06-25T22:44:26Z"
        },
        {
          "tag": "brigade-v1.11.0",
          "kind": "other",
          "published_at": "2026-06-25T22:22:55Z"
        },
        {
          "tag": "brigade-v1.10.0",
          "kind": "other",
          "published_at": "2026-06-25T22:04:50Z"
        },
        {
          "tag": "brigade-v1.9.0",
          "kind": "other",
          "published_at": "2026-06-25T18:41:53Z"
        },
        {
          "tag": "brigade-v1.8.0",
          "kind": "other",
          "published_at": "2026-06-25T14:46:46Z"
        },
        {
          "tag": "brigade-v1.7.0",
          "kind": "other",
          "published_at": "2026-06-25T05:38:04Z"
        },
        {
          "tag": "brigade-v1.6.1",
          "kind": "other",
          "published_at": "2026-06-24T18:10:20Z"
        },
        {
          "tag": "brigade-v1.6.0",
          "kind": "other",
          "published_at": "2026-06-24T16:46:17Z"
        },
        {
          "tag": "brigade-v1.5.0",
          "kind": "other",
          "published_at": "2026-06-24T13:39:08Z"
        },
        {
          "tag": "brigade-v1.4.0",
          "kind": "other",
          "published_at": "2026-06-23T16:33:50Z"
        },
        {
          "tag": "brigade-v1.3.2",
          "kind": "other",
          "published_at": "2026-06-23T02:14:32Z"
        },
        {
          "tag": "brigade-v1.3.1",
          "kind": "other",
          "published_at": "2026-06-23T01:34:38Z"
        },
        {
          "tag": "brigade-v1.3.0",
          "kind": "other",
          "published_at": "2026-06-22T18:02:32Z"
        },
        {
          "tag": "brigade-v1.2.2",
          "kind": "other",
          "published_at": "2026-06-21T08:10:49Z"
        },
        {
          "tag": "brigade-v1.2.1",
          "kind": "other",
          "published_at": "2026-06-21T07:56:29Z"
        },
        {
          "tag": "brigade-v1.2.0",
          "kind": "other",
          "published_at": "2026-06-21T07:43:46Z"
        },
        {
          "tag": "brigade-v1.1.0",
          "kind": "other",
          "published_at": "2026-06-21T07:20:51Z"
        },
        {
          "tag": "brigade-v1.0.2",
          "kind": "other",
          "published_at": "2026-06-21T06:28:20Z"
        },
        {
          "tag": "brigade-v1.0.1",
          "kind": "other",
          "published_at": "2026-06-21T06:12:37Z"
        },
        {
          "tag": "brigade-v1.0.0",
          "kind": "other",
          "published_at": "2026-06-21T05:19:43Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "01f2e43fcd7aa3df44822fa3917d033f37d8bd53",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.29.4 (#90)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T23:13:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5b9f13a78b27130bf9a1cc70b4caa50ddd0b633",
          "body": "…curl script\n\n- shields npm/dt renders EMPTY for scoped packages; use badgen's npm/dt, which\n  supports scoped all-time totals with NO date in the URL — so it auto-updates\n  forever and never needs manual editing.\n- Lead the hero + Install with the curl|sh installer (handles Node, no sudo);\n  add an EACCES note next to the raw `npm i -g`.",
          "is_bot": false,
          "headline": "docs(readme): dynamic scoped downloads badge + lead install with the …",
          "author_name": "Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-19T23:04:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "241c643f7b5373be76f70f89b80117e261141934",
          "body": "… TUI spam)\n\nIn convex mode the strict-zero guard watches ~/.brigade and reports every write.\nSeveral subsystems still resolved state-dir paths unconditionally and wrote\nunder it, flooding the TUI:\n\n- claude-cli: the spawned `claude` binary writes its login/sessions/projects to\n  CLAUDE_CONFIG_DIR e\n[…]\nournal churn stops being flagged.\n- Route strict-zero violations to the `brigade doctor` counter instead of\n  console.error into the interactive TUI; opt into live logging with\n  BRIGADE_STRICT_LOG=1.",
          "is_bot": false,
          "headline": "fix(convex): keep ~/.brigade file-free in convex mode (no strict-zero…",
          "author_name": "Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-19T23:02:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ead590a73e3edbfb00ac5db56e895465169e8aa6",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release brigade 1.29.3 (#89)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T22:05:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea9cdb1042687f955c15b280bfbac7fca6af5e5c",
          "body": "…m in onboard before proceeding\n\nA self-hosted (global-install) Convex onboard crashed right after the\nencryption-key step with a confusing exit. Two bugs:\n\n1. `brigade convex dev` booted the backend but left it with ZERO functions\n   deployed. convex-dev.mjs auto-pushes via convex-push.mjs, but con\n[…]\n early with actionable deploy guidance (local vs\n   cloud) instead of crashing mid-wizard. Three-state check (deployed /\n   not-deployed / unknown) so a live cloud deployment can't be false-negatived.",
          "is_bot": false,
          "headline": "fix(convex): deploy functions on `brigade convex dev`, and verify the…",
          "author_name": "Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-19T22:02:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3df92d201791820dfbbfe4e7775069d132437db0",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.29.2 (#88)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T21:32:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3268e35bdde889ffc4f73fe659c201b2f39f7c1a",
          "body": "…ocal Convex DB (#87)\n\nClear state CONTENTS while preserving -- name-agnostically -- whatever top-level entry holds the running node (process.execPath) or the installed package, so it holds for the Unix `runtime` dir and the Windows `node` dir alike, plus the local `convex/` store. Route `store reset --purge-local` through the same primitive. Stop a running gateway before the onboard wizard wipes (factory-reset \"gateway must be stopped first\" contract; otherwise EPERM-aborts on Windows).",
          "is_bot": false,
          "headline": "fix(storage): factory-reset must not uninstall the CLI or erase the l…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-19T21:31:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92942304ba429954f7def87ede6fd7fd35d62f78",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release brigade 1.29.1 (#84)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-12T07:53:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27cc83e05df6d188513f74a20858ad2735b9d6ba",
          "body": "Two low-severity items from the attachment audits, now that 1.29.0 is out.\n\n  • The clipboard worker's Save-ClipImage returned from its catch WITHOUT\n    disposing the GDI+ Bitmap when Save() threw (a bad path, a full disk, a locked\n    clipboard) — leaking a native handle on every failed save, in a\n[…]\nds TIMESTAMP, TARGETS, MULTIPLE\". Those pseudo-targets are\n    now filtered so the operator sees the actual MIME types.\n\nRuntime-verified: the worker still boots and saves an image after the refactor.",
          "is_bot": false,
          "headline": "fix(tui): clipboard worker GDI+ handle leak + X11 target noise",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T07:51:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eb0c2d7e6832b1a513fdd372ce07967de66307ff",
          "body": "…udes tests)",
          "is_bot": false,
          "headline": "test(tui): fix typecheck errors in attachment tests (CI tsconfig incl…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T07:38:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "849cc8fb9bcb4e1cb06679828a60a1ad73a889ae",
          "body": "…components--brigade\n\nchore(main): release brigade 1.29.0",
          "is_bot": false,
          "headline": "Merge pull request #83 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T07:31:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb08b4d308a6c8be38a18449dd9093eea7ef5e6f",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.29.0",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-12T07:29:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40bb1e7eb69ac3d8f6426b09ecc70b47e0a9b635",
          "body": "…, /paste)",
          "is_bot": false,
          "headline": "docs(readme): document terminal file attachments (drag, Ctrl+V, @path…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T07:28:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9682335279a5b8f9e1657a9d28d1cd17f6f7c215",
          "body": "The operator wanted \"Ctrl+V, simple, like claude cli\" — not the copy-watcher I\nbuilt. So I read how the real Claude Code binary does it: it carries an `onPaste`\nhandler, an `isPasting` state, an `onImagePaste`, and runs a clipboard `GetImage()`\nON PASTE. It does NOT intercept the Ctrl+V key (the ter\n[…]\nhe real editor + real wiring: an image on the\nclipboard + a bracketed paste (what Ctrl+V sends) attaches the image and leaves\nthe typed text clean. Docs, help and the footer hint now say Ctrl+V works.",
          "is_bot": false,
          "headline": "feat(tui): Ctrl+V attaches images, the way Claude Code does it",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T07:20:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ff2b2f5c1e265e2b48f3f11d6dd26ff68b76deb5",
          "body": "…not images\n\nThe previous framing (\"Ctrl+V doesn't work / the terminal eats the key\") was\nimprecise and an operator rightly called it out: if Ctrl+V were truly dead, text\nwouldn't paste either.\n\nThe accurate model: a terminal's paste can only carry TEXT. Plain text and a\ncopied file's PATH both have\n[…]\nch on\ncopy) and /paste exist for.\n\nCorrects the /clipboard note, the /help text, the footer hint, and the\nonImagePaste doc comment to say this precisely instead of implying Ctrl+V is\nwholesale broken.",
          "is_bot": false,
          "headline": "docs(tui): correct the Ctrl+V story — it pastes text and paths, just …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T07:00:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c24fddd189678bb9542dae54a8bf117cf3fece60",
          "body": "…dings\n\nTwo adversarial reviews of the full feature. The high/critical findings, fixed:\n\nPERFORMANCE — the \"clipboard feels slow\" complaint was never the clipboard.\n`onTextChanged` runs on every keystroke and ran the full six-pattern path parser\nover the ENTIRE editor buffer each time — measured 200\n[…]\n (the watcher\nonly fires on CHANGE, so an image copied before opening Brigade was invisible).\n\n5,869 tests green; new coverage for fence-safety, encoding, the aggregate cap,\nand live-mode performance.",
          "is_bot": false,
          "headline": "fix(tui): harden attachments end-to-end — two adversarial audits' fin…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T06:56:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1be6ee2bb054ec22e966598e736365769463c89a",
          "body": "Windows got the fast path; mac and Linux were still spawning a process per read.\nThat is not a shippable open-source story — \"fast on the maintainer's OS\" is how\nyou end up with a feature nobody else trusts.\n\nThe Windows cost was PowerShell's 200-500ms interpreter boot. pbpaste, osascript,\nwl-paste \n[…]\nd contains none.\n  • A backtick in a comment inside the template literal closed the literal.\n  • The warning comment I wrote about rule 1 violated rule 1, and the one about\n    rule 2 violated rule 2.",
          "is_bot": false,
          "headline": "perf(tui): persistent clipboard worker on macOS and Linux too",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T06:29:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c0d2bf329ade3a0423a8b802296ead76df2f4feb",
          "body": "The clipboard was slow because every read SPAWNED A PROCESS. A PowerShell cold\nstart is 200-500ms and we paid it per call — and `/paste` asked four separate\nquestions (files, image, text, formats) down four separate spawns, in series. The\nauto-attach watcher was worse: it noticed a change in one pro\n[…]\n goes through [Console]::Out.Flush(). And the script\nruns from a FILE, not `-Command` — its C# here-string has to survive Node's argv\nquoting, CreateProcess's, and PowerShell's parser, and it did not.",
          "is_bot": false,
          "headline": "perf(tui): persistent clipboard worker — 2000ms paste becomes 72ms",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T06:16:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8271b20c0308e57af83b12c3b21c75a2c12266fe",
          "body": "Studied how the installed Claude Code binary does this (behaviour only — its\nbundle is proprietary and this repo is going open source, so nothing was copied).\nIts technique, from the PE import table and embedded scripts, is: native Win32\nOpenClipboard/GetClipboardData/IsClipboardFormatAvailable with\n[…]\n a lost turn. Verified live against the\nreal clipboard on Windows — image, file-copy and copy-as-path all captured, and a\ntext clipboard correctly reports what it holds instead of \"nothing to attach\".",
          "is_bot": false,
          "headline": "refactor(tui): clipboard as a real cross-platform capability",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T04:44:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e7e436390a77bd3d1afabed96d8d23a5e0e79b91",
          "body": "\"Without /paste I should just be able to paste.\" Correct, and Ctrl+V is not the\nway to get there — it CANNOT be made to work. Every mainstream terminal (Windows\nTerminal, VS Code, iTerm) binds Ctrl+V to its own paste action and consumes the\nkey. That paste inserts the clipboard's TEXT; a screenshot \n[…]\n —\nand when it finds nothing it names what the clipboard actually holds instead of\nsaying \"nothing to attach\", which stated the outcome, hid the cause, and was\nindistinguishable from a bug in Brigade.",
          "is_bot": false,
          "headline": "feat(tui): screenshots auto-attach — no Ctrl+V, no /paste, no command",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T04:36:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "004fc4714f9f44c21c81f79554c0996f88a2970b",
          "body": "Two bugs, both of which made correct code look broken.\n\n1. UNQUOTED PATHS WITH SPACES silently attached nothing. A real filename —\n   `ChatGPT Image Jul 11, 2026, 11_45_54 AM (1).png` — has spaces, commas and\n   parens, and a terminal pastes it WITHOUT quotes. Every token pattern stops at\n   the fir\n[…]\nemon is stale BY DEFINITION, so the dev runner now\n   stops it after a successful rebuild and lets the next tui/chat auto-spawn a\n   fresh one. Best-effort and quiet — a no-op when nothing is running.",
          "is_bot": false,
          "headline": "fix: unquoted spacey paths + stop the stale gateway after a rebuild",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T03:46:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "94d0b2a89cac4927528dec35a2b4ce66e3f39b6d",
          "body": "… couldn't\n\nThe TUI told the operator \"claude-opus-4-8 can't see images\". It was wrong, and\nnot merely cosmetically: the agent loop gates inline image blocks on the model's\n`input` capability (`resolveInboundImagePrompt`), so the screenshot they had just\nattached was being SILENTLY DROPPED before th\n[…]\nnly. This backend replays history as\na flattened Human:/Assistant: transcript, so sweeping in every historical image\nwould re-transmit and re-bill the entire album every time the operator says \"and?\".",
          "is_bot": false,
          "headline": "feat(claude-cli): the backend can see images — it was never Opus that…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T03:40:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "31980c98a12e24add492174990a6b9a64d851444",
          "body": "…\"paste\"\n\nDrag-drop still did nothing in the VS Code terminal. Both previous attempts to\ndetect a drop failed for the same underlying reason: they tried to infer intent\nfrom the SHAPE of the input.\n\n  1. `!data.startsWith(\"\\x1b\")` — meant to skip arrow keys, but pi-tui wraps every\n     paste in brac\n[…]\nDEBUG_INPUT=1, which traces every raw input chunk to\n%TEMP%/brigade-input-trace.log — because terminals disagree loudly about what they\nsend, and two bugs here came from guessing instead of measuring.",
          "is_bot": false,
          "headline": "fix(tui): detect a dropped path on ANY text change, not on a guessed …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T03:34:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "320a4cf98645c1f25c03ca690f39d62641a06dae",
          "body": "The drag-drop hook tested `!data.startsWith(\"\\x1b\")` to avoid firing on arrow\nkeys. But pi-tui wraps every paste in bracketed-paste markers before handing it\nover — its own source says so: \"pasted data will always contain \\x1b[200~\"\n(pi-tui/keys.js). So a dropped file arrives as a chunk STARTING wit\n[…]\nnd now a guard that excluded the very thing it was meant to catch.\nUnit tests could not have caught any of the three. Confirmed this one does: with\nthe old guard restored, three of its six cases fail.",
          "is_bot": false,
          "headline": "fix(tui): drop hook never fired — pastes ARE escape sequences",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T03:27:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fec881caf05f9b7af5e72ac09e8d46a1282069ee",
          "body": "Drag-and-drop was useless in practice and the screenshot proved it: you drop a\nfile and simply watch `C:\\Users\\me\\Downloads\\plant-cell.png` appear in the input\nbox. Nothing staged. No bar. No pill. No reason on earth to believe it worked.\n\nThe cause was that the path was only converted into an attac\n[…]\nile: dropping\nC:\\Users\\SmartSystems\\Downloads\\plant-cell.png turns the line into\n`[plant-cell.png]`, stages it as image/743847b, and composes a genuine inline\nimage block of 991,796 base64 characters.",
          "is_bot": false,
          "headline": "fix(tui): a dropped file becomes an attachment ON DROP, not on submit",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T03:21:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9d23c3b9fac57af9502d4a93fdf5ddefccdf3815",
          "body": "…V/Alt+V\n\nThree things were wrong, and the operator was right about all of them.\n\n1. IT WASN'T A REAL ATTACHMENT. Images already rode as inline bytes, but every\n   other file was handed to the model as a PATH plus a hope that it would call a\n   tool. An attachment whose content the model never sees \n[…]\nipboard on Windows, not just unit tests: a\n19.5 KB screenshot captured off the clipboard, base64'd into a genuine image\nblock (26,024 chars), alongside a text file whose contents landed in the prompt.",
          "is_bot": false,
          "headline": "feat(tui): make attachments REAL — inline content, visible bar, Ctrl+…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T03:16:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3bcd215971bab437b03926a45e357cfd461edd6f",
          "body": "A second adversarial audit found three critical defects, all downstream of two\nstructural mistakes.\n\nMISTAKE 1 — /attach, /paste and /detach sat BELOW the `isAgentRunning` steer\ngate, so they were unreachable while a turn was in flight: typing `/paste` while\nthe agent worked sent the literal text \"/\n[…]\nopped on the far side; macOS\nreturns ALL copied files rather than only the first; the AppleScript path is\nescaped; and \"no clipboard tool installed\" no longer masquerades as \"your\nclipboard is empty\".",
          "is_bot": false,
          "headline": "fix(tui): one send path, attachments above the steer gate",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T03:06:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6720f2ef82bdc0af15bf585fcf674b58dfd4cb2a",
          "body": "Adversarial audit of the previous commit found real defects. The worst had\nnothing to do with attachments and hit EVERY turn.\n\nCRITICAL — prose was being rewritten on every message. `extractAttachmentPaths`\nended with `.replace(/[ \\t]{2,}/g, \" \").trim()` and runs on every submitted line,\nso pasting \n[…]\n\nand `/switch` now carries the message's attachments across a model handoff —\nwithout which the commonest reason to switch (this model can't see the image)\nreplayed the text and left the image behind.",
          "is_bot": false,
          "headline": "fix(tui): harden attachments — prose passthrough, byte caps, safe MIMEs",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T02:57:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "db0a01957788e42adaaed59578fd5275c136ac0c",
          "body": "…aste\n\nThe multimodal path already existed end-to-end: the agent loop takes inline\n`ImageContent` blocks, `resolveInboundImagePrompt` gates them on the resolved\nmodel's vision capability, and `buildMediaNote` transcribes audio and emits an\n`analyze_media` call-to-action for documents. Only the chann\n[…]\npportsVision` to the session snapshot, derived from the same\npredicate the turn uses, so the TUI can warn that a staged image will not\nactually be seen while the operator can still `/model` out of it.",
          "is_bot": false,
          "headline": "feat(tui): attach files to a turn — @path, drag-drop, and clipboard p…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T02:40:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3a48cfb54f190668953693ee2e0bb0215b5ad690",
          "body": "…components--brigade\n\nchore(main): release brigade 1.28.0",
          "is_bot": false,
          "headline": "Merge pull request #82 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:36:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6705e240ed6a024c1c83f8306e0de62072a1feb",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.28.0",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T08:35:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aca56bb8c1b923e6a49fc42ee9976fa26ff33a69",
          "body": "Ten fixes found by driving the code rather than reading it. Several were mine, shipped\ntwo commits earlier and never run.\n\nSTREAMING (claude-cli harness)\n- A sub-agent's `agent_end` ran the PARENT's turn teardown: `activeAssistants.clear()`\n  dropped the parent's streaming block, so its whole answer\n[…]\ne fused sentences came out\nof the operator's own transcript, the engine's npm behaviour was reproduced both ways,\nand `get-state` + `resume` were driven against a live gateway (200 messages returned).",
          "is_bot": false,
          "headline": "fix: streaming shape, sub-agent lifecycle, and session continuity",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:33:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c5db103e3c072fc0805c21f96f2ef2e3e5ae5652",
          "body": "…can lose\n\nA TUI launched with `--session` (or `--agent`) sat blank: header `? · ?`, no\ntranscript. It filled in the instant the operator sent a message.\n\nThe gateway DOES send a snapshot on connect, immediately after `helloOk`\n(server.ts). The client just isn't always listening yet. `runConnectComm\n[…]\n model: claude-opus-4-8\n    resume(agent:main:t-0bf7c8e1) -> messages: 200\n\nNot a watchdog and not a liveness timer. Nothing was slow; a snapshot was delivered to\na client that had not yet subscribed.",
          "is_bot": false,
          "headline": "fix(tui): pull the state snapshot at startup — the push is a race we …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "32aa3f92d5f4c069e52b00c13886b5f1f08dd9c7",
          "body": "…hreads do I have\"\n\nIt listed `listLiveSessions()` — the in-memory RUN registry, holding sessions with a\nturn in flight or just finished. That registry empties on every gateway restart.\n\nSo a restarted gateway reported ZERO threads. `/sessions` showed an empty list. And\n`brigade tui --session t-0bf7\n[…]\n against the real store on this machine: with no gateway running and no live\nruns, `handleSessionsList({agentId:\"main\"})` now returns 4 threads, including the one\n`--session` had just refused to open.",
          "is_bot": false,
          "headline": "fix(sessions): `sessions.list` answered \"what's running\", not \"what t…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2afea079a031bf6aaf22a8ec3fc0ea3148624963",
          "body": "… orphaning one\n\n`brigade tui --session t-0bf7c8e1` (or `npm run tui -- --session t-0bf7c8e1`) opens\nstraight into that thread with its history, exactly as `--agent` does for agents. The\nshort label the header shows is expanded against the bound agent; the canonical\n`agent:main:t-0bf7c8e1` is accept\n[…]\ntarts an EMPTY one.\"\n\nBinding is what gives the AGENT its context: the prompt carries the session key, the\ngateway resolves that session, and the turn runs against its history. Nothing else is\nneeded.",
          "is_bot": false,
          "headline": "feat(tui): open an existing thread at startup, and stop a short label…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ccb485d341f63588e4013d2bf5dce29786ee153b",
          "body": "Pre-existing on main, not from this branch. Comment-only, zero behaviour. The repo\nis public; the naming rule is that Brigade's source never names another agent project.",
          "is_bot": false,
          "headline": "chore: scrub the last external-project name from source",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2bd57ee4302c232da9ad8f2600e95271af333aa2",
          "body": "The operator gave Brigade an ElevenLabs key and `generate_music` still answered \"No\nmusic provider configured\". Three of our own surfaces contradicted each other:\n\n  generate_music   \"Add a Google, MiniMax, or ElevenLabs key with `brigade onboard`.\"\n  manage_provider  \"Unknown provider \\\"elevenlabs\\\n[…]\nfered them.\n\nSame shape as the render-engine bug two commits back: a capability the model is told\nto use, an error message pointing at a path that does not exist, and an agent that\ndoes as it is told.",
          "is_bot": false,
          "headline": "fix(providers): a media API key had no supported way in",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "476416a83090af434167930fa4932ca3000536a3",
          "body": "…reeing with resume\n\nThree findings from an adversarial audit of the result path.\n\nPREVIEW MASHED PROSE. `summarizeToolResult` collapsed ALL whitespace and clipped at\n~119 chars — perfect for `bash`/`grep`, wrong for prose. A 5,814-character\n`spawn_agent` reply became one line cut through the middle\n[…]\nwaits `Promise.allSettled`. A detached descendant whose\nframes arrive after the parent's `agent_end` would find its maps wiped and re-render\nits answer from the top. Gate by depth before shipping one.",
          "is_bot": false,
          "headline": "fix(tui): shape the tool-result preview, and stop the live view disag…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b6fd1aef7358ed6d7b44b518c3dbd7e5aef4f7bd",
          "body": "… I had just closed\n\nAn adversarial audit of the transport found the asymmetry:\n\n    if (u.input && usageInput === 0) usageInput = u.input;   // fill-only ✓\n    if (u.output) usageOutput = u.output;                    // unconditional ✗\n\nThe `result` frame's usage is cumulative over every internal s\n[…]\ns now pinned\n  when the block opens.\n\n- The no-partials fallback (`handleAssistantFrame`, older CLI) rendered a multi-text\n  frame as \"block1block2\" where the streaming path inserts a paragraph break.",
          "is_bot": false,
          "headline": "fix(claude-cli): usage.output re-opened half the compaction inflation…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e251acd9a11eef2e0e35d8f65ad81f81444c789d",
          "body": "…ed with a blank line\n\nDriving the real transport through a two-step turn (think → text → tool_use → think →\ntext) rather than reading it showed two more defects.\n\nTHINKING FUSED. I separated the text blocks and missed the thinking blocks, which have\nthe identical structure: steps 2..N of the binary\n[…]\n not exist is risk without benefit.\n\nAlso pins THE TRAP with a test: no `tool_use` block may reach the returned message's\ncontent, or Pi's `runLoop` would re-execute every tool the binary already ran.",
          "is_bot": false,
          "headline": "fix(claude-cli): thinking blocks fused too, and the continuation open…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4ff17370879e8a30db7954cbf439f14b1903c2e2",
          "body": "Two defects, both visible in one screenshot of a `spawn_agent` turn.\n\n1. THE PARENT'S ANSWER RESTARTED FROM THE TOP.\n\nThe `pi` frame handler never guarded on `subagentDepth`, so a CHILD turn's\n`agent_end` ran the parent's teardown while the parent was still streaming:\n\n    isAgentRunning = false;   \n[…]\nd like any other text so the rendered block never trails the\nstring we return. It never stacks blank lines the binary already emitted, never leads\nwith one, and a `thinking` block does not trigger it.",
          "is_bot": false,
          "headline": "fix(tui): a sub-agent's lifecycle was tearing down the parent's turn",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "324f8c994257d862fb782f385908bbb83f75a590",
          "body": "…d it\n\n`render_video` is gated on `@hyperframes/producer`, which `resolveProducerEntry()`\nlooked for in exactly one place: Brigade's OWN node_modules. An operator who ran\n`npm i -g @spinabot/brigade` cannot install into that directory from their shell.\n\nAnd our own hint told them to try — \"hyperfram\n[…]\ncer` (the doctor line, the tool's\nruntime error, the README) now names `brigade video install` and warns against the\nbare npm install. A tool that tells the model to do the wrong thing will be obeyed.",
          "is_bot": false,
          "headline": "feat(video): install the render engine where Brigade can actually fin…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3fd82beb7d031cc18f0e66cca5181925ca6ed6c9",
          "body": "…components--brigade\n\nchore(main): release brigade 1.27.1",
          "is_bot": false,
          "headline": "Merge pull request #81 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T06:30:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3eada0dd136e0b84bf8137ad7a5bca0bef15cf5e",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.27.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T06:29:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25778a5bfb97a824aebecf6be36effb14422b1b7",
          "body": "A `spawn_agent` ran for 57 seconds and printed nothing between \"sub-agent starting\"\nand \"sub-agent settled\" — the gateway read as wedged while a whole child turn streamed\npast. `consoleStream.pi()` is wired inside `attachTurnSession`, which is only ever\ncalled for a depth-0 gateway turn, so child events reached attached WS clients and\nnever the operator's own terminal.",
          "is_bot": false,
          "headline": "fix(observability): make a sub-agent turn visible in the gateway console",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T06:27:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ef52a78228897903c01688ccae586d3b3693bb6",
          "body": "…sole\n\nBetween `sub-agent starting` and `sub-agent settled` — 57 seconds, a full child turn,\n5,814 characters of reply — the gateway printed nothing but the tool-plane handshake.\nIt read as a wedged process.\n\n`consoleStream.pi()` is wired inside `attachTurnSession`, and that is only ever called\nfor \n[…]\n0, so one sub-agent cannot drown the log.\n\nStill missing, and NOT fixed here: `attachEventLogger(session)` has the same depth-0\nwiring, so a sub-agent turn is absent from the JSONL event log entirely.",
          "is_bot": false,
          "headline": "fix(observability): a sub-agent turn was invisible in the gateway con…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T06:19:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "70d6c2a87fb28ee625265e46f66d97f4344c56b7",
          "body": "…components--brigade\n\nchore(main): release brigade 1.27.0",
          "is_bot": false,
          "headline": "Merge pull request #80 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T06:12:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29cf431e943c7c0aa155301b006d1e5997179d45",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.27.0",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T06:11:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15089b79e564f23ddbf27128ad5ad7fe6fb89ad7",
          "body": "…e touching anything\n\nA running gateway now checks the npm registry in the background and, if a newer\nversion is published, says so once on the next state snapshot:\n\n  ↑ Brigade 1.27.0 is available — you're on 1.26.1.\n    Your sessions, memory, skills, agents and config live in ~/.brigade and are\n  \n[…]\ntely not cached — caching it would silence the next six\nhours. A successful one is, so a gateway restarted twenty times in an afternoon asks\nthe registry once.\n\nOpt out with BRIGADE_NO_UPDATE_CHECK=1.",
          "is_bot": false,
          "headline": "feat(update): tell the operator a newer Brigade exists, and ask befor…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T06:08:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6f1df70f1ab4d2206d2f93c4cf6d8c7bf738d8c6",
          "body": "Every test passed and the 1.26.0 and 1.26.1 publishes both still failed:\n\n  npm error Cannot find module 'sigstore'\n  npm error - .../npm/node_modules/libnpmpublish/lib/provenance.js\n\nThe cause was our own `npm install -g npm@latest` step. npm overwriting itself inside\nthe runner's tool-cache leaves\n[…]\ny replays the same\nfailing commit. There was no way to publish 1.26.1 without inventing a 1.26.2 that\nchanged nothing. Now an operator can publish the version `main` declares, once the\ncause is fixed.",
          "is_bot": false,
          "headline": "ci(release): stop npm from corrupting itself, and add a re-publish path",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:48:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8047ce80c4df6c8e13efd635a952ab15d7cab2be",
          "body": "…components--brigade\n\nchore(main): release brigade 1.26.1",
          "is_bot": false,
          "headline": "Merge pull request #79 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:44:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "781c329fe6daa901942f867b4defba17d144efdc",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.26.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T05:39:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9c89c2ddf7078a8d1c97b300111beab0a84f17b",
          "body": "The npm publish job for 1.26.0 failed on `transport-dispatch.test.ts`:\n\n  Test \"…a claude-cli model NEVER reaches Pi's base\" generated asynchronous\n  activity after the test ended. This activity created the error \"write EPIPE\"\n\nThe test invoked the REAL transport to prove Pi's base streamFn is out o\n[…]\nnstead, which\nalso strengthens the assertion: we now prove the transport is invoked with the args\nforwarded positionally, not merely that `base` was skipped.\n\nA test may not leave a subprocess behind.",
          "is_bot": false,
          "headline": "fix(test): stop the dispatch test from spawning a real `claude` child",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:38:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cb712362ca4f782ca6b7101f00efdcb9c83a4cf0",
          "body": "…was healthy for\n\nA `claude-cli` turn streamed text, went quiet for exactly 90,006 ms, then died with\n`stopReason=error, in=0 out=0`. Pi auto-retried, the binary respawned, and the model\nstarted the whole task over — twice. On screen: \"Building the proof vault now.\"\nfollowed by nothing, forever.\n\n`D\n[…]\ny console dropped it. A turn being killed and re-run from the top\nrendered as a bare \"↻ retrying\", indistinguishable from a slow model. It now reads\n`↻ retrying (attempt 1/3, waiting 2s)… · <reason>`.",
          "is_bot": false,
          "headline": "fix(harness): the parent's idle watchdog was killing turns the child …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:34:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8819a14ca430cc40ab109fa169843a90e9877800",
          "body": "…components--brigade\n\nchore(main): release brigade 1.26.0",
          "is_bot": false,
          "headline": "Merge pull request #78 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:27:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a146ce3fa138db0c3b16e3c46955d64052d59866",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.26.0",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T05:22:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "142be5f2367cd3d4ae22f0bc152ca1cb55add58f",
          "body": "Runs the installed `claude` binary as Brigade's engine on an existing subscription,\ndenies that binary's own filesystem/shell/network/sub-agent tools, and serves it\nBrigade's entire guarded surface over a per-turn loopback MCP endpoint. Every call\nruns the same tool objects and the same guard chain \n[…]\nnd a containment deny-list naming a legacy alias of the\nbinary's sub-agent tool. Plus a usage-units bug that made Pi compact a 39%-full\nsession on every single turn, destroying real history each time.",
          "is_bot": false,
          "headline": "feat: claude-cli harness backend with Brigade's guarded tool-plane",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:20:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e606e3208e9d1e74bf57f8bad35d30fe2737b6f",
          "body": "Also scrubs three comments that named an external agent project — pre-existing on\nmain, and this repo is about to be published.",
          "is_bot": false,
          "headline": "docs(readme): document the claude-cli harness and its guarded tool-plane",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:20:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3913f10ef82004c2fa66fdc69c5da4255e73dbf0",
          "body": "…ling total\n\nPi reads an assistant message's `usage` as \"how many tokens are in the context\nwindow right now\" — `calculateContextTokens` is `input + output + cacheRead +\ncacheWrite` — and compacts when that crosses its threshold.\n\nWe were handing it the wrong number, from two places. The binary runs\n[…]\nlling totals lose the binary's internal steps. That is the right trade: this is a\nsubscription backend billed at $0, and a context figure that triggers destructive\ncompaction is not a cosmetic defect.",
          "is_bot": false,
          "headline": "fix(claude-cli): report the turn's context size, not the binary's bil…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:03:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "657b4a7a98dc29688810f9ac07d61a29a208761a",
          "body": "…t one\n\nA turn that compacted at 889% printed \"compacted · usage now 889%\", and the header\nkept showing the same percentage afterwards. Compaction had worked; the number was\na lie, told twice.\n\nTwo causes, pointing the same way:\n\n  server.ts  `if (usage?.percent != null) lastContextUsagePercent = us\n[…]\nader figure dropped at the same moment.\n\nA stale number is worse than no number — it reads as a failed compaction to anyone\nwho doesn't know the internals, which on an open-source project is everyone.",
          "is_bot": false,
          "headline": "fix(ctx): stop reporting the pre-compaction context figure as the pos…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T04:57:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8b297e76ac440471f8ef79a9292c40936b2e877f",
          "body": "The gate emitted nothing on its allow paths. A command that ran unasked was\ntherefore indistinguishable, from both the log and the screen, between three very\ndifferent causes: it was allowlisted, `/allow-all` was armed, or the gate never\nfired at all. Only the last is a bug — and diagnosing which on\n[…]\nen, the log still shows the gate fired.\n\nOnly the truncated single-line preview is logged, the same string the refusal\nmessages already hand to the model. Blocks were already covered by `emitBlocked`.",
          "is_bot": false,
          "headline": "feat(exec-gate): say why a shell command was allowed",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T04:49:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "be3480486c146f1f0d53410d6e9ff6f36d9bb584",
          "body": "… chip\n\n`asstKey` identity-keys a streaming assistant block by `<depth>:<timestamp>`, and\nconnect.ts assumed in a comment that \"the post-tool continuation is a NEW message\nwith a NEW timestamp, so it naturally opens a fresh block BELOW this tool\".\n\nThat holds for a loop backend — Pi really does star\n[…]\nh unchanged text — dismissing on those is\nwhat blanked the screen).\n\nBoth new paths are gated on an OPEN continuation, a state only a harness turn can\nreach, so loop backends render exactly as before.",
          "is_bot": false,
          "headline": "fix(tui): a harness turn's post-tool text rendered above its own tool…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T04:36:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c039c5fdad96d77e509400ec6af6a935cfde0c4b",
          "body": "…e audit disproved\n\nTen adversarial reviews of the tool-plane found three HIGH defects, two of them\ncreated by my own later commits and hidden by tests written from the same wrong\nassumptions.\n\nBOUNDS\n- The registry TTL could evict a LIVE turn's token. The watchdog pause slides the\n  child's hard ce\n[…]\n the guarded write helper; `installTurn` captures\nits disposer before anything else can throw; the conformance floor is >=25 native\ntools, not >15, which would have let a silent drop to 16 pass green.",
          "is_bot": false,
          "headline": "fix(claude-cli,mcp): correct the bounds, containment and Pi-parity th…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T04:17:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5810a8acbaf90ec4ba26bf42122ebfb5c1e076b9",
          "body": "…eady ran\n\nA harness backend records its tool calls to the JSONL as it goes, but they reach\n`session.messages` — the array a re-prompt serializes — only when the turn is\ndrained. Any re-prompt before that drain hands the binary a request with no\nevidence it ever acted, so it acts again.\n\n`runWithRet\n[…]\nts prose instead of repeating the work behind it.\n\nNo-op for every loop backend: `afterTurn` is the frozen NOOP handle's, and\n`beforeRetry` is undefined. Pi's loop already persists its own tool calls.",
          "is_bot": false,
          "headline": "fix(harness): an in-turn retry must not re-run the tools the turn alr…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T04:16:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c4d365861fb096d51eaf9cf43efdc30fb3e3c8e1",
          "body": "…a glance\n\nA full-plane spawn now denies every built-in the binary ships, so if the MCP\nconfig were ever rejected the agent would have NO tools at all — which on screen\nis indistinguishable from an agent that simply won't use them. The `initialize`\nrequest is the one unambiguous proof that the binary loaded our server, so log\nit once per turn with the number of tools served. Never the token.",
          "is_bot": false,
          "headline": "feat(mcp): log the tool-plane handshake so attachment is provable at …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T03:27:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e6011f2f903ff9917be42ce03fdfb447b559e69",
          "body": "…CP conformance\n\nTwo things stood between \"the plane exists\" and \"every tool actually works\".\n\nCONTAINMENT. The full plane denied only the binary's MUTATING built-ins. Its\nread side — Read, Grep, Glob — still worked, and those act on the THROWAWAY cwd\nwe spawn it in, not the operator's workspace. As\n[…]\nSON-round-trips to a valid object schema with every `required` key present\nin `properties`, no duplicate or builtin-shadowing names, and a `tools/list`\nresponse that survives the wire encoding intact.",
          "is_bot": false,
          "headline": "fix(claude-cli): contain the binary to Brigade's guarded tools; pin M…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T03:25:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4326b56fd57c58848f6de430806236a4fba490a3",
          "body": "A harness backend watches its child for signs of life: no stdout for\n`noOutputTimeoutMs` and it is presumed wedged and SIGKILL'd. That is right while\nthe binary is thinking. It is wrong while the binary is BLOCKED ON US.\n\nWhen the child calls a Brigade tool over the MCP route it writes nothing to\nst\n[…]\ne else: an unknown token (the memory-only\nstdio plane, a cold path, a child that already exited) yields a no-op, and a\ngenuinely silent child is still reaped — a test drives real timers to prove both.",
          "is_bot": false,
          "headline": "fix(harness): don't kill a child that is waiting on Brigade",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T03:16:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "efd804854750d5a55b707ca229c7521622d9cd2e",
          "body": "…re-prompt\n\nBrigade has two kinds of backend. LOOP backends (anthropic, openai, ollama) are\nmodel endpoints: Pi's loop runs in-process, dispatches tools, emits tool events,\nwrites toolCall/toolResult messages. HARNESS backends (claude-cli) are an\nexternal agent BINARY that runs its own loop and call\n[…]\nve context silently lost it for the\n    rest of the process — the model would forget, mid-conversation, that it had\n    just written a file. It now warns and proceeds; by contract we are past the run.",
          "is_bot": false,
          "headline": "feat(harness): first-class harness backends; fix double-execution on …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T02:58:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "af8f50c2de9bd8eea3447a53ce3900ed62557b4e",
          "body": "… did\n\nA \"harness\" backend is one where an external binary runs the agent loop and\nBrigade's tools are called back in (today: claude-cli). Pi's loop never\ndispatches a tool there, so it wrote no toolCall/toolResult messages, and the\nsession transcript held only the model's prose. Everything reading \n[…]\ntor switches this session to an API provider.\n\nBest-effort throughout: a transcript write can never fail a tool call, and a\nsession without a sessionManager (the cold `brigade agent` path) is a no-op.",
          "is_bot": false,
          "headline": "feat(agents): harness-transcript layer — record what an external loop…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T02:29:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3f92e7de2dee3240c41446a2b68d9e159851e1da",
          "body": "Pi's contract hands `beforeToolCall` the abort signal and documents that the\nhook \"is responsible for honoring it\". Both callers already forwarded it —\nsession-wiring and the MCP route — and `makeExecGate`'s returned hook silently\ndropped it, never declaring the parameter. So an approval prompt outl\n[…]\nt a policy refusal.\n\nBehaviour preserved and covered: 5-minute deny-on-timeout (distinct message),\nno-bridge static refusal, allow/deny persistence, tool-blocked bus events, and\nchannelRoute delivery.",
          "is_bot": false,
          "headline": "fix(approvals): cancel a pending approval when its turn is aborted",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T02:18:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1a2d2dffcc8b5877ef57ab67726676de97026460",
          "body": "On an API provider, Pi's loop runs the tool and emits tool_execution_start /\n_end; the gateway forwards them and connect.ts paints a ⚡→✓ chip. On\nclaude-cli the binary runs the loop and calls Brigade's tools back over the\nMCP route, so Pi dispatches no tool and emits nothing. The operator saw\nassist\n[…]\nand thrash resume. Same rule\n    the sub-agent frames already follow.\n\nDegrades cleanly: with no runId (the cold `brigade agent` path, which has no\ngateway) nothing is emitted and the tool still runs.",
          "is_bot": false,
          "headline": "feat(claude-cli): live tool activity in the TUI",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T02:14:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "91cbc3b3def867a8421424490d1bba0bf4329b31",
          "body": "…ages)\n\nRead pi-agent-core's agent-loop.js to see what its own dispatch does around\n`tool.execute`. Its pipeline is:\n\n    prepareToolCallArguments -> validateToolArguments -> beforeToolCall(args)\n      -> abort check -> execute(id, args, signal, onUpdate) -> afterToolCall\n\nOurs was guard(raw args) -\n[…]\n\nexecution.\n\nVerified against Pi's source, not assumed: `withFileMutationQueue` is applied\ninside edit/write themselves, so constructing the builtins via their factories\npreserves write serialization.",
          "is_bot": false,
          "headline": "fix(mcp): mirror Pi's tool-call pipeline exactly (validate, abort, im…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:57:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "849e2f1772b305e9421c16e674fa11caefeccddf",
          "body": "…ystem\n\n`assembleBrigadeToolset` splits its output: native tools come back as objects\nwith an `execute`, but read/write/edit/bash/grep/ls come back only as NAMES —\nPi's own loop constructs them from those names. That loop never runs on\nclaude-cli, and the binary's own equivalents are denied (they wo\n[…]\ne system prompt now tells the truth: it names the filesystem and\nshell it actually has, and warns that a bash call may pause for the operator's\napproval so the model waits instead of assuming failure.",
          "is_bot": false,
          "headline": "feat(mcp): serve Brigade's guarded builtins so claude-cli has a files…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:48:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e83fbf7a891a0dd31a87b606fd513bc2adc62d09",
          "body": "…e tools\n\nThe gateway-hosted plane served all 31 Brigade tools over MCP and then\nappended the MEMORY-ONLY suffix, which says verbatim: \"Do not use any other\ntools or act on the local filesystem; respond directly in prose.\" The model\nobeyed. In a live session it answered every request by describing w\n[…]\ne its tools\", which\nis exactly how this bug presented.\n\nTests pin the regression: the full-plane suffix must never forbid tools or\nnudge to prose, and precedence is structured > fullPlane > toolPlane.",
          "is_bot": false,
          "headline": "fix(claude-cli): stop the full tool-plane telling the model not to us…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:42:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2fdca27d0c02570d6ef82cbd097e598783f76673",
          "body": "Two independent audits converged on the same critical defect. The gateway\ndispatcher races every route handler against `route.timeoutMs ?? 30_000` and,\non expiry, writes a 408 — but `Promise.race` does NOT cancel the loser. The\n/mcp route set no timeoutMs, so it inherited 30s while the tools behind \n[…]\nIt grants no incremental\ncapability (the expose bearer already carries operator rights, and the\nper-turn 256-bit token is still required), but the code should not claim a\nguarantee it doesn't provide.",
          "is_bot": false,
          "headline": "fix(mcp): stop the 30s dispatcher timeout guillotining in-flight tools",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:37:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "59c1e4555274645ddbde211e14dc805e5ed392fb",
          "body": "Four issues no unit test would have caught, found by reading the whole\nsurface end to end.\n\n1. Token leak. `registry.register()` sat OUTSIDE the try whose `finally`\n   disposes the token, so any throw between the two stranded the entry in the\n   process-global registry for the gateway's lifetime — r\n[…]\ne agent\n   \"didn't use its tools\" had nothing to look at. It now logs each tool call\n   (name, agent, session, duration, block/error), never the arguments or the\n   token, both of which are sensitive.",
          "is_bot": false,
          "headline": "fix(mcp): harden the tool-plane for long-lived gateways",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:33:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2d1ca89ac2a4b4e6c3a1965393bc59b4fa72ea50",
          "body": "Reconciled the working tree against stash@{0} (the pre-rebuild snapshot of\nthis work) and found four test cases that the reconstruction had dropped:\n\n  - composeClaudeCliSystemPrompt: the toolPlane suffix advertises the memory\n    MCP tools, still forbids everything else, and STRUCTURED still wins o\n[…]\nute states its any-method intent.\n\nNo behaviour change. Coverage is now a superset of the snapshot: the\nfrozen-context stamp test here is strictly stronger than the snapshot's\nnon-object-only version.",
          "is_bot": false,
          "headline": "test(claude-cli): restore tool-plane coverage lost in reconstruction",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:22:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "15e81021846bb8b1e47604f6ba970125711a3599",
          "body": "Expose Brigade's FULL tool surface to the claude-cli binary without weakening\na single guard, so the free subscription engine gets the whole crew — memory\ngraph, spawn, channels, cron — not just the three memory tools.\n\nThe binary drives its own loop and reaches external tools only over MCP, so\nBrig\n[…]\natches the memory plane: claude-cli + OWNER + non-distiller, and the\nhost is null outside the gateway (cold `brigade agent`), where it falls back\nto the memory-only stdio server. Fail-open throughout.",
          "is_bot": false,
          "headline": "feat(mcp): gateway-hosted guarded tool-plane for the claude-cli harness",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:11:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "56701906b4f2cfd022be77746ee3f1f1ffaf2a59",
          "body": "The `claude` binary runs its own agent loop, so Brigade's tools cannot be\npassed inline the way a raw model API (anthropic/openai/ollama) accepts them\n— the binary's only mechanism for external tools is MCP. Consequently no\nBrigade tool was callable on this backend: the agent read tool descriptions\n\n[…]\ne.\n\nFail-open throughout: an unsafe agent id, missing CLI entry path, frozen\ncontext, or config write failure yields no MCP config and the turn proceeds\nexactly as before. The tool-plane can only ADD.",
          "is_bot": false,
          "headline": "feat(claude-cli): memory MCP tool-plane on the harness backend",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:11:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4999a76611aa2ef480ca00719b0072509281a39e",
          "body": "`checkMemory` reports \"ok\" on an empty corpus because a fresh install has no\nfacts yet — correct, but it means a silently-failing extractor looks healthy\nforever. Add an ADDITIVE check (existing one untouched): warn only when\nsessions exist on disk AND zero facts were distilled AND the extraction\ncu\n[…]\nan but found nothing durable both stay \"ok\", so a first\nboot or CI never trips --strict.\n\nReads the cursor's `cursors` map specifically — the file's top-level\n`version: 1` must not read as \"advanced\".",
          "is_bot": false,
          "headline": "feat(doctor): warn when the memory moat is dark",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:10:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "41ee88fd2f9e3bfb185f928171878632e2156fd4",
          "body": "Every memory/skill utility prompt (extraction, consolidation, relationship\nrelink, behaviour + skill review) demands a STRICT JSON envelope. The\nclaude-cli backend unconditionally appended a conversational nudge —\n\"respond directly in prose; do not use tools\" — which contradicts them, so\nthe model a\n[…]\nuctured=false every branch is byte-identical to before.\n\nA test asserts the real EXTRACTION_PROMPT / CONSOLIDATION_PROMPT still trip\nthe detector, so a future reword can't silently regress extraction.",
          "is_bot": false,
          "headline": "fix(claude-cli): reinforce JSON for structured distiller turns",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:10:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "08046a4c2070234d6af02c9afebde8a446b502ff",
          "body": "…-ai copies\n\nA published/global install nests a second @earendil-works/pi-ai under\npi-coding-agent (which also carries its own pi-agent-core). Brigade imports\ncreateAgentSession from pi-coding-agent, so the Agent's default streamSimple\nresolves the NESTED pi-ai's api-provider registry — while regist\n[…]\n/\nstop-reason / tool-call-repair wrappers still apply.\n\nIsolated distiller sessions (makeIsolatedLlm) build their own Pi agent and\nmissed the agent-loop wrap, so they get installTransportDispatch too.",
          "is_bot": false,
          "headline": "fix(agents): dispatch own transports directly, immune to duplicate pi…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-09T17:05:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d992f65cd5b6578e6d4ae6bab7fde358dc4ac16f",
          "body": "…components--brigade\n\nchore(main): release brigade 1.25.3",
          "is_bot": false,
          "headline": "Merge pull request #77 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T05:14:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b261f54689591c45c5104e3d5affd11b0fae06af",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.25.3",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-07T05:05:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b595a42fda33bde8c15b18b3404bcc40b3fa3e4b",
          "body": "…PATH shadowing\n\nbrigade doctor now checks the installation itself, not just the config:\na Brigade installed without -g (npm drops it into some project folder's\nnode_modules where no shell resolves it) fails with the exact fix command,\nand multiple brigade copies on PATH (nvm vs system npm, an old m\n[…]\nnother) warn with\nevery location listed. Binaries are deduped by directory so Windows'\nmulti-shim installs (brigade / .cmd / .ps1) don't false-positive. Source\ncheckouts report their root and version.",
          "is_bot": false,
          "headline": "fix(doctor): diagnose broken installations — local no-g installs and …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T05:04:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "265e64f967556f2946ebd75091aa435654820774",
          "body": "…components--brigade\n\nchore(main): release brigade 1.25.2",
          "is_bot": false,
          "headline": "Merge pull request #76 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T04:58:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59d7d2e2b5629f4e0ad29f4fb78bf0f74e2b719b",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.25.2",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-07T04:56:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82234401b246b792d127dd48679ef2279cc62ac0",
          "body": "Source checkouts now wipe dist before building — tsc never deletes output\nfor renamed or removed source files, so stale compiled modules survived\nevery update. And after an npm-global upgrade the command now asks the\n`brigade` on the user's PATH for its version: installing into one Node\ninstallation\n[…]\nle the shell resolves another (nvm vs system npm) is the\nclassic way a machine keeps launching a stale Brigade while every update\nclaims success. A mismatch lists every copy on PATH and how to fix it.",
          "is_bot": false,
          "headline": "fix(update): clean-rebuild dist and verify the PATH binary after upgrade",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T04:55:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ab1ef9c2a7e29a696fc814338ec90eb3664f726f",
          "body": "While the clip plays, the terminal is asked to report window focus (mode\n1004); a blurred or minimized window now pauses the animation completely —\nzero writes while hidden, so nothing flickers on restore, no wasted work,\nand scrollback isn't yanked while the user works elsewhere. Focus events\nare s\n[…]\nss through\nuntouched), terminals without focus reporting behave exactly as before,\nthe mode is disabled the moment the clip retires, and restoreTerminal()\nalready force-disables it on every exit path.",
          "is_bot": false,
          "headline": "fix(tui): pause the intro clip while the terminal window is unfocused",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T04:55:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3c3a7e0c150896ac9c351406c4b52d92df57b66e",
          "body": "…adder\n\nThree-reviewer adversarial audit of the responsive-header change; every\nconfirmed finding fixed and pinned by tests:\n\n- Animation now requires the REAL composed block + 16 rows of content\n  headroom (animationFitsViewport, re-checked mid-clip on resize) — the\n  wordmark lockup had grown the \n[…]\nout —\n  is handed back to stdin instead of being eaten\n- brigade auth / login now run the capability probe before their TUIs, so\n  their spinners obey the terminal's real answer instead of env guesses",
          "is_bot": false,
          "headline": "fix(tui): close the audit findings on the animation gate and header l…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T04:46:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e74428381584e700454a45d4f23c1174ec27a88c",
          "body": "…components--brigade\n\nchore(main): release brigade 1.25.1",
          "is_bot": false,
          "headline": "Merge pull request #75 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T04:23:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0946b8592b719ed0747f352dd9338ad94d4306a6",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.25.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-07T04:22:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8429202e54705e050b52d88dcf24979052a8c1b1",
          "body": "…d repaint shake\n\nThe intro clip previously looped forever at 25fps and pre-rendered all 248\nframes at module import (~416k styler calls before first paint), and the\nlayout ignored terminal height — on small windows the header overflowed the\nviewport, degenerating every animation frame into a full c\n[…]\ntorage-mode\n- Backpressure: drop a frame while the previous one is still queued in the\n  stream; if the backlog passes 4x the write high-water mark, jump to the\n  hold pose and stop animating entirely",
          "is_bot": false,
          "headline": "fix(tui): responsive terminal-aware brand header — end launch hang an…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T04:21:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e18dda9701a5c70e9f19eaa52d44888c38d85c18",
          "body": "…components--brigade\n\nchore(main): release brigade 1.25.0",
          "is_bot": false,
          "headline": "Merge pull request #74 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-05T21:29:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a84a21e3af6bd6c665f8660df4e16ac0e1681b5e",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.25.0",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-05T21:25:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5dcda683f1832bb087bf73214d1cb5d77495cd43",
          "body": "…ument render_video\n\nAdding the engine to package.json optionalDependencies desynced\npackage-lock.json (npm ci failed) and would pull puppeteer + Chromium\ninto every CI run / default install. Keep it truly optional — the tool\nresolves @hyperframes/producer if present (require.resolve +\nBRIGADE_HYPERFRAMES_PATH) and stays dormant otherwise — so the lockfile\nstays in sync and lean installs are unaffected. Also document\nrender_video in the README.",
          "is_bot": false,
          "headline": "fix(render-video): keep @hyperframes/producer resolve-if-present; doc…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-05T21:24:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70cbd6e6276f871f1a006dfd66502dd61c736aaa",
          "body": "Programmatic, data-driven video (animated charts, explainers, text\ncards, motion graphics) — the deterministic counterpart to\ngenerate_video. Renders a self-contained GSAP composition through the\n@hyperframes/producer pipeline in an isolated Node worker (headless\nChrome + FFmpeg), with no-output/ove\n[…]\norrects mis-sized media-tool timeout budgets that could drop\n  billed jobs mid-flight (generate_video / -music / -speech).\n\nStill requires live validation against a real @hyperframes/producer install.",
          "is_bot": false,
          "headline": "feat(tools): add render_video — HTML→MP4 via @hyperframes/producer",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-05T21:17:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d4009868d20aa3dd28e01ba219f468d8991e70df",
          "body": "…components--brigade\n\nchore(main): release brigade 1.24.2",
          "is_bot": false,
          "headline": "Merge pull request #71 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-05T05:50:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38f1bf05afebdd053686bb5355e4fe925ab88e96",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.24.2",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-05T05:29:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee86fab3fc4865d00033151f70ddb59c93902944",
          "body": "…ENAMETOOLONG)\n\nBrigade's assembled system prompt (persona + skills + tools + memory) is tens\nof KB, and passing it as `--append-system-prompt <text>` on argv blew the OS\ncommand-line length limit — every real turn failed with `spawn ENAMETOOLONG` on\nWindows. Write it to a temp file inside the isola\n[…]\n (same architecture, vendor-\nsupported flag). argv stays tiny + constant; the user prompt is still on stdin.\nVerified live: a full-config turn with the real system prompt now replies\ncleanly (cost 0).",
          "is_bot": false,
          "headline": "fix(claude-cli): deliver the system prompt via file, not argv (spawn …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-05T05:19:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 56,
      "commits_last_year": 500,
      "latest_release_at": "2026-07-19T23:14:00Z",
      "latest_release_tag": "brigade-v1.29.4",
      "releases_from_tags": false,
      "days_since_last_push": 5,
      "active_weeks_last_year": 12,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 1.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 75,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@spinabot/brigade",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "ai",
            "agent",
            "agents",
            "ai-agent",
            "cli",
            "tui",
            "llm",
            "claude",
            "openai",
            "gemini",
            "ollama",
            "whatsapp",
            "gateway",
            "brigade"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@spinabot/brigade",
          "is_deprecated": false,
          "latest_version": "1.29.4",
          "repository_url": "https://github.com/spinabot/brigade",
          "versions_count": 58,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 2,
          "monthly_downloads": 9677,
          "first_published_at": "2026-05-02T04:28:21.330000Z",
          "latest_published_at": "2026-07-19T23:16:00.489000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 19,
      "stars": 239,
      "watchers": 2,
      "fork_history": {
        "days": [
          {
            "date": "2026-06-21",
            "count": 2
          },
          {
            "date": "2026-06-23",
            "count": 2
          },
          {
            "date": "2026-06-26",
            "count": 1
          },
          {
            "date": "2026-06-29",
            "count": 1
          },
          {
            "date": "2026-07-03",
            "count": 1
          },
          {
            "date": "2026-07-04",
            "count": 1
          },
          {
            "date": "2026-07-09",
            "count": 3
          },
          {
            "date": "2026-07-10",
            "count": 2
          },
          {
            "date": "2026-07-11",
            "count": 1
          },
          {
            "date": "2026-07-15",
            "count": 1
          },
          {
            "date": "2026-07-22",
            "count": 3
          },
          {
            "date": "2026-07-25",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 19,
        "total_forks": 19
      },
      "star_history": null,
      "open_issues_and_prs": 12
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "convex/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 2475157,
      "source_files_sampled": 1204,
      "oversized_source_files": 17,
      "agent_instruction_files": [
        "AGENTS.md",
        "templates/workspace/AGENTS.md"
      ],
      "agent_instruction_max_bytes": 13148
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.16",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-mh99-v99m-4gvg"
            ],
            "fixed_version": "5.0.8",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.1.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-mh99-v99m-4gvg"
            ],
            "fixed_version": "5.0.8",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "8.3.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-w5hq-g745-h8pq"
            ],
            "fixed_version": "13.0.1",
            "advisory_count": 1,
            "oldest_advisory_days": 94
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 3
        },
        "advisory_count": 3,
        "affected_count": 3,
        "assessed_count": 535,
        "malicious_count": 0,
        "assessed_package": "npm:@spinabot/brigade@1.29.4",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@cantoo/pdf-lib",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.7.1"
        },
        {
          "name": "@composio/core",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.10.0"
        },
        {
          "name": "@earendil-works/pi-agent-core",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "0.79.9"
        },
        {
          "name": "@earendil-works/pi-ai",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "0.79.9"
        },
        {
          "name": "@earendil-works/pi-coding-agent",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "0.79.9"
        },
        {
          "name": "@earendil-works/pi-tui",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "0.79.9"
        },
        {
          "name": "@grammyjs/runner",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.3"
        },
        {
          "name": "@grammyjs/transformer-throttler",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.1"
        },
        {
          "name": "@grammyjs/types",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.21.0"
        },
        {
          "name": "@mozilla/readability",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.6.0"
        },
        {
          "name": "@pdf-lib/fontkit",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.1.1"
        },
        {
          "name": "@slack/socket-mode",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.7"
        },
        {
          "name": "@slack/web-api",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.17.0"
        },
        {
          "name": "@whiskeysockets/baileys",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "7.0.0-rc13"
        },
        {
          "name": "cfonts",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.3.1"
        },
        {
          "name": "chalk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.3.0"
        },
        {
          "name": "cli-highlight",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.11"
        },
        {
          "name": "commander",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.1.0"
        },
        {
          "name": "convex",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.40.0"
        },
        {
          "name": "croner",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.0.1"
        },
        {
          "name": "discord.js",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^14.26.4"
        },
        {
          "name": "docx",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.7.1"
        },
        {
          "name": "exceljs",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.4.0"
        },
        {
          "name": "fflate",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.8.3"
        },
        {
          "name": "grammy",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.42.0"
        },
        {
          "name": "https-proxy-agent",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.0.6"
        },
        {
          "name": "jimp",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.6.1"
        },
        {
          "name": "jiti",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.6.1"
        },
        {
          "name": "json5",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.2.3"
        },
        {
          "name": "linkedom",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.18.12"
        },
        {
          "name": "minimatch",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.2.5"
        },
        {
          "name": "playwright-core",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.59.0"
        },
        {
          "name": "pptxgenjs",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.1"
        },
        {
          "name": "prompts",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.4.2"
        },
        {
          "name": "proper-lockfile",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.1.2"
        },
        {
          "name": "qrcode-terminal",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.12.0"
        },
        {
          "name": "socks-proxy-agent",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.1.0"
        },
        {
          "name": "tar",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.5.15"
        },
        {
          "name": "undici",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.25.0"
        },
        {
          "name": "unpdf",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.6.2"
        },
        {
          "name": "ws",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.21.0"
        },
        {
          "name": "@anthropic-ai/claude-code",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.0"
        },
        {
          "name": "yaml",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.9.0"
        },
        {
          "name": "zod",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.23.8"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@anthropic-ai/claude-code",
            "direct": true,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@cantoo/pdf-lib",
            "direct": true,
            "version": "2.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "@composio/core",
            "direct": true,
            "version": "0.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "@earendil-works/pi-agent-core",
            "direct": true,
            "version": "0.79.9",
            "ecosystem": "npm"
          },
          {
            "name": "@earendil-works/pi-ai",
            "direct": true,
            "version": "0.79.9",
            "ecosystem": "npm"
          },
          {
            "name": "@earendil-works/pi-coding-agent",
            "direct": true,
            "version": "0.79.9",
            "ecosystem": "npm"
          },
          {
            "name": "@earendil-works/pi-tui",
            "direct": true,
            "version": "0.79.9",
            "ecosystem": "npm"
          },
          {
            "name": "@grammyjs/runner",
            "direct": true,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@grammyjs/transformer-throttler",
            "direct": true,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@grammyjs/types",
            "direct": true,
            "version": "3.28.0",
            "ecosystem": "npm"
          },
          {
            "name": "@mozilla/readability",
            "direct": true,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@pdf-lib/fontkit",
            "direct": true,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@slack/socket-mode",
            "direct": true,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@slack/web-api",
            "direct": true,
            "version": "7.17.0",
            "ecosystem": "npm"
          },
          {
            "name": "@whiskeysockets/baileys",
            "direct": true,
            "version": "7.0.0-rc13",
            "ecosystem": "npm"
          },
          {
            "name": "cfonts",
            "direct": true,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": true,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": true,
            "version": "5.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "cli-highlight",
            "direct": true,
            "version": "2.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": true,
            "version": "12.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "convex",
            "direct": true,
            "version": "1.41.0",
            "ecosystem": "npm"
          },
          {
            "name": "croner",
            "direct": true,
            "version": "10.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "discord.js",
            "direct": true,
            "version": "14.26.4",
            "ecosystem": "npm"
          },
          {
            "name": "docx",
            "direct": true,
            "version": "9.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "exceljs",
            "direct": true,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "fflate",
            "direct": true,
            "version": "0.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "grammy",
            "direct": true,
            "version": "1.44.0",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": true,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": true,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "jimp",
            "direct": true,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "jiti",
            "direct": true,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": true,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "linkedom",
            "direct": true,
            "version": "0.18.12",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": true,
            "version": "10.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": true,
            "version": "3.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": true,
            "version": "5.1.9",
            "ecosystem": "npm"
          },
          {
            "name": "playwright-core",
            "direct": true,
            "version": "1.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "pptxgenjs",
            "direct": true,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "prompts",
            "direct": true,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "proper-lockfile",
            "direct": true,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "qrcode-terminal",
            "direct": true,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "socks-proxy-agent",
            "direct": true,
            "version": "10.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tar",
            "direct": true,
            "version": "7.5.16",
            "ecosystem": "npm"
          },
          {
            "name": "undici",
            "direct": true,
            "version": "6.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici",
            "direct": true,
            "version": "7.28.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici",
            "direct": true,
            "version": "8.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "unpdf",
            "direct": true,
            "version": "1.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "ws",
            "direct": true,
            "version": "8.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "yaml",
            "direct": true,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "zod",
            "direct": true,
            "version": "3.25.76",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-darwin-arm64",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-darwin-x64",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-linux-arm64",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-linux-arm64-musl",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-linux-x64",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-linux-x64-musl",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-win32-arm64",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-win32-x64",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/sdk",
            "direct": false,
            "version": "0.91.1",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-crypto/sha256-browser",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-crypto/sha256-js",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-crypto/supports-web-crypto",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-crypto/util",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/client-bedrock-runtime",
            "direct": false,
            "version": "3.1048.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/core",
            "direct": false,
            "version": "3.974.26",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-env",
            "direct": false,
            "version": "3.972.52",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-http",
            "direct": false,
            "version": "3.972.54",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-ini",
            "direct": false,
            "version": "3.972.59",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-login",
            "direct": false,
            "version": "3.972.58",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-node",
            "direct": false,
            "version": "3.972.61",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-process",
            "direct": false,
            "version": "3.972.52",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-sso",
            "direct": false,
            "version": "3.972.58",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-web-identity",
            "direct": false,
            "version": "3.972.58",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/eventstream-handler-node",
            "direct": false,
            "version": "3.972.25",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/middleware-eventstream",
            "direct": false,
            "version": "3.972.21",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/middleware-websocket",
            "direct": false,
            "version": "3.972.34",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/nested-clients",
            "direct": false,
            "version": "3.997.26",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/signature-v4-multi-region",
            "direct": false,
            "version": "3.996.38",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/token-providers",
            "direct": false,
            "version": "3.1048.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/token-providers",
            "direct": false,
            "version": "3.1078.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/types",
            "direct": false,
            "version": "3.973.15",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/util-locate-window",
            "direct": false,
            "version": "3.965.8",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/xml-builder",
            "direct": false,
            "version": "3.972.33",
            "ecosystem": "npm"
          },
          {
            "name": "@aws/lambda-invoke-store",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/runtime",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@borewit/text-codec",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "@cacheable/memory",
            "direct": false,
            "version": "2.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@cacheable/node-cache",
            "direct": false,
            "version": "1.7.6",
            "ecosystem": "npm"
          },
          {
            "name": "@cacheable/utils",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@composio/client",
            "direct": false,
            "version": "0.1.0-alpha.72",
            "ecosystem": "npm"
          },
          {
            "name": "@composio/json-schema-to-zod",
            "direct": false,
            "version": "0.1.20",
            "ecosystem": "npm"
          },
          {
            "name": "@discordjs/builders",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@discordjs/collection",
            "direct": false,
            "version": "1.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@discordjs/collection",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@discordjs/formatters",
            "direct": false,
            "version": "0.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@discordjs/rest",
            "direct": false,
            "version": "2.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@discordjs/util",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@discordjs/ws",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/aix-ppc64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/aix-ppc64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openharmony-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openharmony-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@fast-csv/format",
            "direct": false,
            "version": "4.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@fast-csv/parse",
            "direct": false,
            "version": "4.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "@google/genai",
            "direct": false,
            "version": "1.52.0",
            "ecosystem": "npm"
          },
          {
            "name": "@hapi/boom",
            "direct": false,
            "version": "9.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@hapi/hoek",
            "direct": false,
            "version": "9.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@isaacs/fs-minipass",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/core",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/diff",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/file-ops",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/js-bmp",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/js-gif",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/js-jpeg",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/js-png",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/js-tiff",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-blit",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-blur",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-circle",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-color",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-contain",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-cover",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-crop",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-displace",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-dither",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-fisheye",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-flip",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-hash",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-mask",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-print",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-quantize",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-resize",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-rotate",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-threshold",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/types",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/utils",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@keyv/bigmap",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "@keyv/serialize",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-darwin-arm64",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-darwin-universal",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-darwin-x64",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-arm64-gnu",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-arm64-musl",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-riscv64-gnu",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-x64-gnu",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-x64-musl",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-win32-arm64-msvc",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-win32-x64-msvc",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mistralai/mistralai",
            "direct": false,
            "version": "2.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@opentelemetry/api",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "@opentelemetry/semantic-conventions",
            "direct": false,
            "version": "1.41.1",
            "ecosystem": "npm"
          },
          {
            "name": "@pdf-lib/standard-fonts",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@pdf-lib/upng",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@pinojs/redact",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/aspromise",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/base64",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/codegen",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/eventemitter",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/fetch",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/float",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/path",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/pool",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/utf8",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sapphire/async-queue",
            "direct": false,
            "version": "1.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@sapphire/shapeshift",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sapphire/snowflake",
            "direct": false,
            "version": "3.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@sapphire/snowflake",
            "direct": false,
            "version": "3.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@silvia-odwyer/photon-node",
            "direct": false,
            "version": "0.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "@slack/logger",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@slack/types",
            "direct": false,
            "version": "2.21.1",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/core",
            "direct": false,
            "version": "3.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/credential-provider-imds",
            "direct": false,
            "version": "4.4.5",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/fetch-http-handler",
            "direct": false,
            "version": "5.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/is-array-buffer",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/node-http-handler",
            "direct": false,
            "version": "4.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/node-http-handler",
            "direct": false,
            "version": "4.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/signature-v4",
            "direct": false,
            "version": "5.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/types",
            "direct": false,
            "version": "4.15.1",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/util-buffer-from",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/util-utf8",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tokenizer/inflate",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@tokenizer/token",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/json-schema",
            "direct": false,
            "version": "7.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "14.18.63",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "16.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "22.19.17",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "25.9.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/prompts",
            "direct": false,
            "version": "2.4.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/proper-lockfile",
            "direct": false,
            "version": "4.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/qrcode-terminal",
            "direct": false,
            "version": "0.12.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/retry",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/tar",
            "direct": false,
            "version": "6.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "@types/ws",
            "direct": false,
            "version": "8.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "@vladfrangu/async_event_emitter",
            "direct": false,
            "version": "2.4.7",
            "ecosystem": "npm"
          },
          {
            "name": "abort-controller",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "7.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "any-base",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "any-promise",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "archiver",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "archiver-utils",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "archiver-utils",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "async",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "async-mutex",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "asynckit",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "atomic-sleep",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "await-to-js",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "axios",
            "direct": false,
            "version": "1.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "base64-js",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "big-integer",
            "direct": false,
            "version": "1.6.52",
            "ecosystem": "npm"
          },
          {
            "name": "bignumber.js",
            "direct": false,
            "version": "9.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "binary",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "bl",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "bluebird",
            "direct": false,
            "version": "3.4.7",
            "ecosystem": "npm"
          },
          {
            "name": "bmp-ts",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "boolbase",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "bottleneck",
            "direct": false,
            "version": "2.19.5",
            "ecosystem": "npm"
          },
          {
            "name": "bowser",
            "direct": false,
            "version": "2.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.15",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": false,
            "version": "5.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-crc32",
            "direct": false,
            "version": "0.2.13",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-equal-constant-time",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-indexof-polyfill",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "buffers",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "cacheable",
            "direct": false,
            "version": "2.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "chainsaw",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "chownr",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "7.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "color",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "color-string",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "combined-stream",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "compress-commons",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "content-type",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "core-util-is",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "crc-32",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "crc32-stream",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "crypto-js",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "css-select",
            "direct": false,
            "version": "5.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "css-what",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "cssom",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "curve25519-js",
            "direct": false,
            "version": "0.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "data-uri-to-buffer",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "dayjs",
            "direct": false,
            "version": "1.11.21",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "define-property",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "delayed-stream",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "8.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "discord-api-types",
            "direct": false,
            "version": "0.38.49",
            "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": "5.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "domutils",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "duplexer2",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "ecdsa-sig-formatter",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "end-of-stream",
            "direct": false,
            "version": "1.4.5",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "es-set-tostringtag",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "event-target-shim",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "eventemitter3",
            "direct": false,
            "version": "4.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "eventemitter3",
            "direct": false,
            "version": "5.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "exif-parser",
            "direct": false,
            "version": "0.1.12",
            "ecosystem": "npm"
          },
          {
            "name": "extend",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "fast-csv",
            "direct": false,
            "version": "4.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fetch-blob",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "file-type",
            "direct": false,
            "version": "21.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "follow-redirects",
            "direct": false,
            "version": "1.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "form-data",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "formdata-polyfill",
            "direct": false,
            "version": "4.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "fs-constants",
            "direct": false,
            "version": "1.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": "fstream",
            "direct": false,
            "version": "1.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "gaxios",
            "direct": false,
            "version": "7.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "gcp-metadata",
            "direct": false,
            "version": "8.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "get-east-asian-width",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "gifwrap",
            "direct": false,
            "version": "0.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "13.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "google-auth-library",
            "direct": false,
            "version": "10.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "google-logging-utils",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-tostringtag",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hash.js",
            "direct": false,
            "version": "1.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "hashery",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "highlight.js",
            "direct": false,
            "version": "10.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "hookified",
            "direct": false,
            "version": "1.15.1",
            "ecosystem": "npm"
          },
          {
            "name": "hookified",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "9.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "html-entities",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "html-escaper",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "htmlparser2",
            "direct": false,
            "version": "10.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "http-proxy-agent",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "https",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ieee754",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "image-q",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "image-size",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "immediate",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inflight",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "ip-address",
            "direct": false,
            "version": "10.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-accessor-descriptor",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-buffer",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "is-data-descriptor",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-descriptor",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-electron",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "isarray",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "jpeg-js",
            "direct": false,
            "version": "0.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "json-bigint",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-to-ts",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "jszip",
            "direct": false,
            "version": "3.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "jwa",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jws",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "keyv",
            "direct": false,
            "version": "5.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "kleur",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "lazystream",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "libsignal",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lie",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "listenercount",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.defaults",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.difference",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.escaperegexp",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.flatten",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.groupby",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isboolean",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isequal",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isfunction",
            "direct": false,
            "version": "3.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isnil",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isplainobject",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isundefined",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.snakecase",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.union",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.uniq",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "long",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "11.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "11.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "magic-bytes.js",
            "direct": false,
            "version": "1.13.0",
            "ecosystem": "npm"
          },
          {
            "name": "marked",
            "direct": false,
            "version": "18.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "media-typer",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.52.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-types",
            "direct": false,
            "version": "2.1.35",
            "ecosystem": "npm"
          },
          {
            "name": "minimalistic-assert",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "4.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "minizlib",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp",
            "direct": false,
            "version": "0.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "music-metadata",
            "direct": false,
            "version": "11.12.3",
            "ecosystem": "npm"
          },
          {
            "name": "mz",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "5.1.16",
            "ecosystem": "npm"
          },
          {
            "name": "node-domexception",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-fetch",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-fetch",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "node-html-better-parser",
            "direct": false,
            "version": "1.5.8",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "nth-check",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-assign",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "omggif",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "on-exit-leak-free",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "openai",
            "direct": false,
            "version": "6.26.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-finally",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-queue",
            "direct": false,
            "version": "6.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "p-queue",
            "direct": false,
            "version": "9.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-retry",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "p-timeout",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-timeout",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "pako",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "parse-bmfont-ascii",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "parse-bmfont-binary",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "parse-bmfont-xml",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "parse5",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse5",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse5-htmlparser2-tree-adapter",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "partial-json",
            "direct": false,
            "version": "0.1.7",
            "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-scurry",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "pino",
            "direct": false,
            "version": "9.14.0",
            "ecosystem": "npm"
          },
          {
            "name": "pino-abstract-transport",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pino-std-serializers",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "pixelmatch",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "pngjs",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pngjs",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "prettier",
            "direct": false,
            "version": "3.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "process-nextick-args",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "process-warning",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "protobufjs",
            "direct": false,
            "version": "7.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "proxy-from-env",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "pusher-js",
            "direct": false,
            "version": "8.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "qified",
            "direct": false,
            "version": "0.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "queue",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "quick-format-unescaped",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "2.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "3.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "readdir-glob",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "real-require",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "retry",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "retry",
            "direct": false,
            "version": "0.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "2.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "safe-stable-stringify",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "sax",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "saxes",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.8.5",
            "ecosystem": "npm"
          },
          {
            "name": "setimmediate",
            "direct": false,
            "version": "1.0.5",
            "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": "signal-exit",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "simple-swizzle",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "simple-xml-to-json",
            "direct": false,
            "version": "1.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "sisteransi",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "smart-buffer",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "socks",
            "direct": false,
            "version": "2.8.9",
            "ecosystem": "npm"
          },
          {
            "name": "sonic-boom",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "split2",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strtok3",
            "direct": false,
            "version": "10.3.5",
            "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": "tar-stream",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "thenify",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "thenify-all",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "thread-stream",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinycolor2",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "tmp",
            "direct": false,
            "version": "0.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "token-types",
            "direct": false,
            "version": "6.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "tr46",
            "direct": false,
            "version": "0.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "traverse",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "ts-algebra",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-mixer",
            "direct": false,
            "version": "6.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "tsx",
            "direct": false,
            "version": "4.22.4",
            "ecosystem": "npm"
          },
          {
            "name": "tweetnacl",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "typebox",
            "direct": false,
            "version": "1.1.38",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "uhyphen",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "uint8array-extras",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "6.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "7.24.6",
            "ecosystem": "npm"
          },
          {
            "name": "unzipper",
            "direct": false,
            "version": "0.10.14",
            "ecosystem": "npm"
          },
          {
            "name": "utif2",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "11.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "web-streams-polyfill",
            "direct": false,
            "version": "3.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "webidl-conversions",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "whatsapp-rust-bridge",
            "direct": false,
            "version": "0.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-url",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "win-guid",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "window-size",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "xml",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "xml-js",
            "direct": false,
            "version": "1.6.11",
            "ecosystem": "npm"
          },
          {
            "name": "xml-parse-from-string",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "xml2js",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "xmlbuilder",
            "direct": false,
            "version": "11.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "xmlchars",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "16.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "20.2.9",
            "ecosystem": "npm"
          },
          {
            "name": "zip-stream",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "zod-to-json-schema",
            "direct": false,
            "version": "3.25.2",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 558,
        "direct_count": 50,
        "indirect_count": 508
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 12,
        "merged_prs": 63,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 2,
        "closed_unmerged_prs": 13
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "Bhasvanth-Dev9380",
          "commits": 432,
          "avatar_url": "https://avatars.githubusercontent.com/u/157608971?v=4"
        },
        {
          "type": "User",
          "login": "Ranjithsingh2004",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/122562396?v=4"
        },
        {
          "type": "User",
          "login": "viveknadig",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/96881767?v=4"
        }
      ],
      "contributors_sampled": 3,
      "top_contributor_share": 0.973
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "brigadiers.yml",
        "ci.yml",
        "codeql.yml",
        "dependency-review.yml",
        "osv-scanner.yml",
        "release.yml",
        "supply-chain-audit.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "7 out of 7 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/23 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 3 contributing companies or organizations -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 3,
            "reason": "dependency not pinned by hash detected -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 7,
            "reason": "SAST tool detected but not run on all commits",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 2,
            "reason": "8 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "01f2e43fcd7aa3df44822fa3917d033f37d8bd53",
        "ran_at": "2026-07-25T23:10:32Z",
        "aggregate_score": 5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": true,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-24T17:54:54Z",
      "oldest_open_prs": [
        {
          "number": 1,
          "created_at": "2026-06-21T02:19:11Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2,
          "created_at": "2026-06-21T02:19:14Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 3,
          "created_at": "2026-06-21T02:19:16Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 7,
          "created_at": "2026-06-21T02:20:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 8,
          "created_at": "2026-06-21T02:20:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 9,
          "created_at": "2026-06-21T02:20:38Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 10,
          "created_at": "2026-06-21T02:20:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 20,
          "created_at": "2026-06-21T11:32:38Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 21,
          "created_at": "2026-06-21T11:32:42Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 72,
          "created_at": "2026-07-05T11:32:53Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 73,
          "created_at": "2026-07-05T11:33:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 86,
          "created_at": "2026-07-19T11:34:24Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-19T23:13:49Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/spinabot/brigade",
    "host": "github.com",
    "name": "brigade",
    "owner": "spinabot"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 67,
      "inputs": {
        "security": 55,
        "vitality": 77,
        "community": 63,
        "governance": 56,
        "engineering": 81
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 77,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "commits_last_year": 500,
              "human_commit_share": 0.85,
              "days_since_last_push": 5,
              "active_weeks_last_year": 12
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "12/52 weeks with commits",
                "points": 8.3,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 12
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "500 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 500
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 56,
              "latest_release_tag": "brigade-v1.29.4",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 1.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "56 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 56
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~1.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 1.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 63,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 49,
            "inputs": {
              "forks": 19,
              "stars": 239,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "239 stars",
                "points": 38.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 239
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "19 forks",
                "points": 10.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 19
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 66,
            "inputs": {
              "packages": [
                "@spinabot/brigade"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 9677
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "9,677 downloads/month across npm",
                "points": 53.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 9677,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 56,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 24,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 3,
              "top_contributor_share": 0.973
            },
            "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 97% of commits",
                "points": 0.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "3 contributors",
                "points": 4.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "merged_prs": 63,
              "open_issues": 0,
              "closed_issues": 2,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 13
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "63/76 decided PRs merged",
                "points": 31.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 63,
                      "decided": 76
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/23 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 37,
            "inputs": {
              "followers": 4,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "spinabot",
              "public_repos": 1,
              "account_age_days": 43
            },
            "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": "4 followers of spinabot",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 4,
                      "login": "spinabot"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1 public repos, account ~0 yr old",
                "points": 2.4,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@spinabot/brigade"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "58 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 58
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 81,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "7 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": 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": "7 out of 7 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "agent-runtime",
                "ai",
                "ai-crew",
                "autonomous-agents",
                "brigade",
                "chatgpt",
                "clawdbot",
                "codex",
                "crustacean",
                "hermes",
                "hermes-agent",
                "llm",
                "moltbot",
                "molty",
                "multi-agent",
                "openclaw",
                "self-improving-ai",
                "brigade-agent",
                "pride-of-agents",
                "spinabot"
              ],
              "has_wiki": true,
              "homepage": "https://www.brigade.spinabot.com",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://www.brigade.spinabot.com",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "20 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 55,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 50,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "7 out of 7 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/23 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool detected but not run on all commits",
                "points": 3.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "8 existing vulnerabilities detected",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "good",
            "name": "Dependency advisories",
            "note": "Matched the npm:@spinabot/brigade@1.29.4 runtime dependency closure — what installing the published package pulls in — 535 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:@spinabot/brigade@1.29.4",
                  "assessed": 535
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 76,
            "inputs": {
              "source": "osv",
              "advisories": 3,
              "affected_packages": 3,
              "assessed_packages": 535,
              "unassessed_packages": 0,
              "affected_by_severity": "high 3",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "3 affected: brace-expansion 1.1.16 (high 7.5), brace-expansion 2.1.2 (high 7.5), uuid 8.3.2 (high 7.5)",
                "points": 7.3,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 3,
                      "packages": "brace-expansion 1.1.16 (high 7.5), brace-expansion 2.1.2 (high 7.5), uuid 8.3.2 (high 7.5)"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "1 advisory-carrying package(s) unaddressed past 90 days; oldest published 94 days ago",
                "points": 33.7,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 1,
                      "oldest": 94
                    }
                  }
                ],
                "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": 535,
              "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": 1
            },
            "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": "moderate",
        "name": "AI Readiness",
        "value": 64,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "AGENTS.md",
                "templates/workspace/AGENTS.md"
              ],
              "agent_instruction_max_bytes": 13148
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, templates/workspace/AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, templates/workspace/AGENTS.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "85 of 85 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 85,
                      "sampled": 85
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 51,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "convex/tsconfig.json",
                "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": "convex/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "convex/tsconfig.json, tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "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": "dependency automation configured, none observed in the sampled commits",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "dependency_bot_config_only",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 2475157,
              "source_files_sampled": 1204,
              "oversized_source_files": 17
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "17/1204 source files over 60KB",
                "points": 54.2,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1204,
                      "oversized": 17
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "critical",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T23:10:45.326438Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/spinabot/brigade.svg",
  "full_name": "spinabot/brigade",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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.27.0 — full methodology · metrics wiki.

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