Звіт у форматі JSON машиночитний
{
"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"
}