Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 2946,
"has_wiki": true,
"homepage": null,
"languages": {
"CSS": 148089,
"HTML": 26718,
"Shell": 643,
"Gherkin": 47116,
"Makefile": 1740,
"JavaScript": 1188837
},
"pushed_at": "2026-07-30T13:05:06Z",
"created_at": "2026-04-03T19:52:00Z",
"owner_type": "User",
"updated_at": "2026-07-30T15:56:23Z",
"description": "Termius-style browser dashboard for Claude Code & Codex sessions. View, search, resume, tag, and manage all your AI coding sessions.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "JavaScript",
"significant_languages": [
"JavaScript",
"CSS"
]
},
"owner": {
"blog": null,
"name": "Valerii Kovalskii",
"type": "User",
"login": "vakovalskii",
"company": null,
"location": null,
"followers": 245,
"avatar_url": "https://avatars.githubusercontent.com/u/220532298?v=4",
"created_at": "2025-07-12T21:48:20Z",
"is_verified": null,
"public_repos": 39,
"account_age_days": 384
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v7.16.0",
"kind": "minor",
"published_at": "2026-07-30T08:07:30Z"
},
{
"tag": "v7.15.0",
"kind": "minor",
"published_at": "2026-07-23T06:46:08Z"
},
{
"tag": "v7.14.7",
"kind": "patch",
"published_at": "2026-07-21T14:21:55Z"
},
{
"tag": "v7.14.6",
"kind": "patch",
"published_at": "2026-07-21T10:19:10Z"
},
{
"tag": "v7.14.5",
"kind": "patch",
"published_at": "2026-07-20T18:23:23Z"
},
{
"tag": "v7.14.4",
"kind": "patch",
"published_at": "2026-07-20T16:14:06Z"
},
{
"tag": "v7.14.3",
"kind": "patch",
"published_at": "2026-07-20T11:11:54Z"
},
{
"tag": "v7.14.2",
"kind": "patch",
"published_at": "2026-07-20T11:00:13Z"
},
{
"tag": "v7.14.1",
"kind": "patch",
"published_at": "2026-07-20T10:46:22Z"
},
{
"tag": "v7.14.0",
"kind": "minor",
"published_at": "2026-07-20T10:20:47Z"
},
{
"tag": "v7.13.0",
"kind": "minor",
"published_at": "2026-07-20T09:50:02Z"
},
{
"tag": "v7.5.1",
"kind": "patch",
"published_at": "2026-05-26T05:43:27Z"
},
{
"tag": "v7.5.0",
"kind": "minor",
"published_at": "2026-05-25T18:12:41Z"
},
{
"tag": "v7.0.0",
"kind": "major",
"published_at": "2026-04-16T08:21:32Z"
},
{
"tag": "v6.16.4",
"kind": "patch",
"published_at": "2026-04-10T12:34:26Z"
},
{
"tag": "v6.16.3",
"kind": "patch",
"published_at": "2026-04-10T11:25:21Z"
},
{
"tag": "v6.16.2",
"kind": "patch",
"published_at": "2026-04-10T06:59:33Z"
},
{
"tag": "v6.16.1",
"kind": "patch",
"published_at": "2026-04-10T06:27:01Z"
},
{
"tag": "v6.16.0",
"kind": "minor",
"published_at": "2026-04-10T06:19:38Z"
},
{
"tag": "v6.15.14",
"kind": "patch",
"published_at": "2026-04-09T13:44:37Z"
},
{
"tag": "v6.15.13",
"kind": "patch",
"published_at": "2026-04-09T13:40:50Z"
},
{
"tag": "v6.15.12",
"kind": "patch",
"published_at": "2026-04-09T12:14:54Z"
},
{
"tag": "v6.15.11",
"kind": "patch",
"published_at": "2026-04-09T07:12:22Z"
},
{
"tag": "v6.15.10",
"kind": "patch",
"published_at": "2026-04-08T22:38:58Z"
},
{
"tag": "v6.15.9",
"kind": "patch",
"published_at": "2026-04-08T22:36:30Z"
},
{
"tag": "v6.15.8",
"kind": "patch",
"published_at": "2026-04-08T21:41:16Z"
},
{
"tag": "v6.15.7",
"kind": "patch",
"published_at": "2026-04-08T21:34:35Z"
},
{
"tag": "v6.15.6",
"kind": "patch",
"published_at": "2026-04-08T21:30:19Z"
},
{
"tag": "v6.15.5",
"kind": "patch",
"published_at": "2026-04-08T21:17:32Z"
},
{
"tag": "v6.15.4",
"kind": "patch",
"published_at": "2026-04-08T20:48:45Z"
},
{
"tag": "v6.15.3",
"kind": "patch",
"published_at": "2026-04-08T20:36:46Z"
},
{
"tag": "v6.15.2",
"kind": "patch",
"published_at": "2026-04-08T20:21:23Z"
},
{
"tag": "v6.15.1",
"kind": "patch",
"published_at": "2026-04-08T20:11:25Z"
},
{
"tag": "v6.15.0",
"kind": "minor",
"published_at": "2026-04-08T20:00:55Z"
},
{
"tag": "v6.14.11",
"kind": "patch",
"published_at": "2026-04-08T17:39:19Z"
},
{
"tag": "v6.14.10",
"kind": "patch",
"published_at": "2026-04-08T16:34:11Z"
},
{
"tag": "v6.14.9",
"kind": "patch",
"published_at": "2026-04-08T15:57:48Z"
},
{
"tag": "v6.14.8",
"kind": "patch",
"published_at": "2026-04-08T15:32:19Z"
},
{
"tag": "v6.14.7",
"kind": "patch",
"published_at": "2026-04-08T15:21:23Z"
},
{
"tag": "v6.14.6",
"kind": "patch",
"published_at": "2026-04-08T15:05:21Z"
},
{
"tag": "v6.14.5",
"kind": "patch",
"published_at": "2026-04-08T14:54:08Z"
},
{
"tag": "v6.14.4",
"kind": "patch",
"published_at": "2026-04-08T14:46:13Z"
},
{
"tag": "v6.14.3",
"kind": "patch",
"published_at": "2026-04-08T14:33:45Z"
}
],
"recent_commits": [
{
"oid": "8b9bf7d08b70fc0816f327503f187a62179da70a",
"body": "* fix(terminal): dimmed text on a filled background no longer renders invisible\n\nClaude Code (and other TUIs) draw some rows as *dimmed* text on a filled\nbackground — e.g. the grey 'message above' bars. In a codbash pane those bars\ncame out as empty grey strips with no text at all, while the same ou\n[…]\n 7.17.0 — named terminal panes + readable dimmed text\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "release: 7.17.0 — release candidate (merges #279 #280) (#281)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-30T13:05:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5082827f02e0b607f65b2164323c05d81e4fb3a2",
"body": "…#268) (#278)\n\n* feat(kiro): support new file-based session format (~May 2026)\n\nKiro CLI moved to per-session files under ~/.kiro/sessions/cli/:\n <uuid>.json — metadata (session_id, cwd, title, created_at, updated_at)\n <uuid>.jsonl — events: Prompt / AssistantMessage / ToolResults\n\n- Add KIRO_SES\n[…]\noreply@anthropic.com>\n\n---------\n\nCo-authored-by: sean10 <sean10reborn@gmail.com>\nCo-authored-by: NovakPAai <novakpavela@gmail.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "release: 7.16.0 — release candidate (merges #272 #273 #274 #275 #276 …",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-30T08:07:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4781e00d073a00744dff0b144698db22fad408ec",
"body": "Bring the project guide in line with this release cycle:\n- super-app framing (Overview landing + in-browser Workspace/Terminal) and\n two-channel shipping (npm CLI + signed/notarized macOS DMG)\n- current source map (terminal.js, workspace-layouts/commands.js, shell-path.js,\n overview/workspace/cale\n[…]\ng: manual npm workflow_dispatch + signed-DMG runbook with the\n codesign timestamp/proxy gotcha; versioning examples bumped to 7.x\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: update CLAUDE.md for the super-app + signed-desktop reality (#267)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-23T10:26:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5e0a4f33ecfc68821bf6ff3c76e77825ea23e4a0",
"body": "…settings, resizable panes) + input-freeze & lost-dialog fixes (#269)\n\n* feat: browser-like terminal workspace + input-freeze & lost-dialog fixes (7.15.0)\n\nFeatures\n- Resume where you left off: reopening offers one-click continue of each\n pane's last agent conversation in that folder (claude --cont\n[…]\nift+T while typing in a form field (codex review)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "release: 7.15.0 — browser-like terminal (resume, bookmarks & groups, …",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-23T06:45:24Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3307ce9bd78d7f0fd693205c536d8df0c9c52f5e",
"body": "…it (#265)\n\nShips #263 (repair stripped GUI PATH so agents are detected when launched\nfrom Finder/Dock) and #264 (Kiro maxBuffer + ToolUse; robust Workspace\nterminal fit for large/hi-DPI displays, #259).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(release): 7.14.7 — GUI-launch detection, Kiro fixes, terminal f…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-21T14:09:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f2b77f97fbd8b90629354195a4da475be606fdae",
"body": "…(#264)\n\nKiro (from PR #230 review, part 1 — the confirmed, mergeable half):\n- Add maxBuffer (50MB) to the scanKiroSessions + loadKiroDetail sqlite3 calls.\n Without it, a large conversations_v2 value blows past the 1MB default and\n the call throws ENOBUFS, so the Kiro session list / detail came ba\n[…]\n host spawned the pty at the wrong width and garbled full-screen\n TUIs like Claude Code, most visibly on large / hi-DPI displays.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: Kiro maxBuffer + ToolUse (#230 pt1), robust terminal fit (#259) …",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-21T10:23:24Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7042cf82fa9d871eebd49283c5953e565d73f721",
"body": "* fix: detect agents when launched from GUI with stripped PATH\n\nmacOS/Linux GUI launches (Finder/Dock/Spotlight) inherit a minimal PATH\n(/usr/bin:/bin:/usr/sbin:/sbin) that omits user bin dirs such as\n~/.local/bin and ~/.npm-global/bin where CLIs like claude and codex are\ninstalled. agents-detect.js\n[…]\nocument the intentional append-after-system precedence + assert it\n in a test; note case-insensitive-FS dupes are an accepted no-op.\n- CODBASH_DEBUG=1 logs skip/augment decisions for field diagnosis.",
"is_bot": false,
"headline": "fix: detect Claude/Codex when launched from GUI (stripped PATH) (#263)",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-07-21T10:08:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1374f25711f9bf9be65a3c0e404f65f78932c9f1",
"body": "Ships the changes merged since 7.14.5: native Add-project folder picker\n(desktop), Oh My Pi title-before-session parsing (#231/#260), GitHub avatar\nCSP fix (#249), Overview/Recommended full-width tiles (#243), Neuraldeep\nfooter, and signed-release docs + manual npm publish workflow.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(release): 7.14.6 — folder picker, community fixes, docs (#262)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-21T08:05:22Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "32db6429bf0115e41f5f623e4f263322d1d38dc5",
"body": "…#261)\n\nThe \"Add project → Local path\" field only had a text input + a datalist of\nknown folders; the native datalist popup overflows and can't be scrolled/\nstyled, and there was no way to browse for a folder.\n\n- Desktop: add a preload bridge (window.codbashDesktop.pickFolder) + an\n ipcMain 'codbas\n[…]\n(verified: button hidden,\n78 suggestions, no bridge, 0 console errors). Takes effect in the installed\napp after a desktop rebuild.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(add-project): native folder picker (Finder) in the desktop app (…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-21T07:48:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bf74c4413d6a412af7ebe55ee14206db7b4555e0",
"body": null,
"is_bot": false,
"headline": "fix(pi): share delayed header parsing with detail view (#260)",
"author_name": "Tim Seriakov",
"author_login": "timseriakov",
"committed_at": "2026-07-21T07:42:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e8b5f6c3bef5724a59b65de6b71815a9ec1ccbf",
"body": "Overview was capped at max-width:1040px and Recommended rendered inside\n.changelog-container (max-width:700px), so on wide screens both views were\nsqueezed to the left with dead space on the right — unlike Sessions and\nProjects which span the full content area.\n\n- drop the 1040px cap on .ov-wrap\n- give Recommended its own full-width .tools-container\n- switch .tools-grid to auto-fit so the few curated cards stretch across\n the row instead of leaving empty tracks",
"is_bot": false,
"headline": "fix: let Overview and Recommended tiles fill the available width (#243)",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-07-20T18:47:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f4fae37cdaae2130541d6c8f7e5d4a22ba544dc",
"body": null,
"is_bot": false,
"headline": "fix(pi): parse title-before-session OMP logs (#231)",
"author_name": "Tim Seriakov",
"author_login": "timseriakov",
"committed_at": "2026-07-20T18:47:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7a8f420aec95a7665c3c4cba3e867795412baf9f",
"body": "The cloud profile and leaderboard render GitHub avatars from\navatar_url (https://avatars.githubusercontent.com/...), but the\nContent-Security-Policy img-src directive only allowed 'self' and\ndata:, so the browser blocked them:\n\n Loading the image 'https://avatars.githubusercontent.com/...'\n violates the following Content Security Policy directive:\n \"img-src 'self' data:\".\n\nAdd avatars.githubusercontent.com to img-src so avatars load.\n\nCo-authored-by: Mikhail Vasilyev <m.a.vasilyev@bitrix.ru>",
"is_bot": false,
"headline": "fix(csp): allow GitHub avatar images in img-src (#249)",
"author_name": "Mikhail Vasilyev",
"author_login": "mvasilyev",
"committed_at": "2026-07-20T18:47:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fe8c53d1f10fd8204f6fc8a4e55d0ffa7ba4cbc5",
"body": "…h (#258)\n\n- README: desktop app is now signed & notarized (arm64 + x64), opens with\n no Gatekeeper warning (was \"Apple Silicon\" only).\n- desktop/RELEASE.md: rewritten for the real signed+notarized flow — keychain\n notary profile, the VPN/proxy timestamp gotcha, `--arm64 --x64`, DMG-container\n st\n[…]\n — desktop DMG releases no longer trigger (and 403-fail) a\n CLI publish; publishing stays a deliberate, short-lived-token action.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs+chore: signed-release docs, Neuraldeep footer, manual npm publis…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T18:46:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8178a9cfbf63047e892b3642ccd7d52ee0292ec9",
"body": "….14.5) (#257)\n\nFixes from a multi-agent bug hunt (21 findings, adversarially verified).\n\nHIGH\n- server.js: prototype-safe findSessionFile + validate read-route ids +\n wrap route dispatch in try/catch → a malformed id like\n /api/session/__proto__ no longer crashes the whole process (one-request Do\n[…]\n::1]).\n- terminal.js: expand ~ in a requested cwd before spawn.\n- convert.js: assistant turns serialized as output_text for Codex.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: bug-hunt sweep — crash-safety, import data-loss, correctness (v7…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T18:06:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f36e335eac7cd650f431321f458b3899784c67ca",
"body": "…256)\n\nSession cards had only the in-app \"Open here\" (▶) action. Added a\nterminal-icon button that launches in the OS terminal (iTerm2/Terminal.app/\n… via /api/launch, reusing resumeLastProjectSession):\n- CLI agents (claude/codex/qwen/opencode/kiro/kilo/gemini/pi): resume in\n the native terminal\n- \n[…]\nVS Code-only, no terminal to resume into)\n\nThe ▶ in-app button stays; its title now says \"in-app terminal\" to\ndistinguish the two.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(cards): launch a session in the native terminal from its card (#…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T17:48:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6d129c20a2c0a505c1e3b5e09adf42ab43b85880",
"body": "- jumpToRunningAgent: the agent is already running, so clicking a row\n must not prefill a resume command (that started a 2nd instance) and\n must not dead-click when the session isn't indexed. Now: jump to the\n live pane if one exists, else open a plain terminal in the project\n folder — no resume\n[…]\non the full\n cwd, not the folder basename, so two same-named projects (or a swap)\n can't reuse a stale tree / wrong jump target.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(workspace): running-agent click no longer spawns a duplicate (#255)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T17:28:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3ff4eec81f5396104a1971d9ab3554c2bdd4fde7",
"body": "- Pin mac signing identity to the Developer ID Application cert\n (team A933C2TJXU). Name is given WITHOUT the \"Developer ID\n Application:\" prefix — electron-builder rejects the prefix and\n picks the cert type automatically.\n- notarize.js now prefers a keychain profile (APPLE_KEYCHAIN_PROFILE →\n \n[…]\nLE_KEYCHAIN_PROFILE=codbash-notary CSC_IDENTITY_AUTO_DISCOVERY=true \\\n ./node_modules/.bin/electron-builder --mac --arm64 --x64\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(desktop): enable Developer ID signing + notarization (#254)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T16:11:03Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0a4cc466504f5d04366cd907d3c40ea4e7fc725c",
"body": "…(v7.14.4) (#253)\n\n- Saved layouts now capture each pane's working directory (cwd) and any\n prefilled-but-unrun command, and restore them — previously only cmd was\n stored, so restored panes opened in the home dir with no command.\n- Rewrote the sidebar running tree to build from real agent detecti\n[…]\n session toolbar in the Terminal and Overview views via a\n body[data-view] attribute, since neither has a session list to act on.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: layout restore, agent-aware running tree, cleaner Terminal view …",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T11:25:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7d556b532a6d50c8b6c09e8047562ae1211147d5",
"body": "…14.3) (#252)\n\nRelocates #wsRunningTree from the bottom of the sidebar to directly beneath the\nTerminal nav item, above the Sessions group — where it reads as part of the\nterminal area.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: move running-projects tree under the Terminal sidebar item (v7.…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T11:05:46Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3fc8b4431412bfa284d01e70662968befbef991e",
"body": "- Sidebar shows a live tree of projects that currently have running Workspace\n terminals (bottom of the sidebar); click a project or a terminal to jump to\n it. Grouped by folder, skips home shells, change-signature guarded.\n- _wsPaneLabel now strips leading VAR=value env prefixes and masks secrets\n[…]\n so a\n proxied command (HTTPS_PROXY='...' claude) shows as \"claude\" — proxy\n credentials no longer leak into the pane title bar.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: sidebar running-projects tree + safer pane labels (v7.14.2) (#251)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T10:51:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7413931182b1e1b195ce93a903cf56b5c1dbf3ba",
"body": "…250)\n\n- Save layout was a no-op in the Electron app: it used window.prompt, which\n Electron ignores (returns undefined). Added codbashPrompt() — an in-app modal\n prompt — used for saving layouts and the copy fallback.\n- Pane title bars now show a short label (folder basename like \"codbash\", or th\n[…]\nwser-verified: pane label \"codbash\", layout save via the new prompt persists,\nCmd+D adds a tab; 182 tests pass, no console errors.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: layout save in desktop app + tidier terminal naming (v7.14.1) (#…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T10:38:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c67c89ce95a4000a6acfb08872394af7c820f485",
"body": "- Terminals auto-name after their project folder (skips home dir); a visible ✎\n rename button on each tab (plus double-click) makes naming discoverable, and\n a manual name sticks (userNamed) so auto-naming won't override it.\n- README: hero screenshot (docs/assets/codbash-desktop.png) + Overview,\n Workspace terminal, and macOS desktop-app sections; Quick Start links the DMG.\n- Changelog + version → 7.14.0 (npm + desktop).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: named terminals + macOS desktop app in README (v7.14.0) (#248)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T10:16:55Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "8b2c29de94a205a63649741b61d97d2ae6706b8c",
"body": "…aunch (#247)\n\nTwo crashes hit only when launched from Finder/`open` (not `npm start`):\n\n1. `https is not defined` — the notify updater used https.get without requiring\n it, throwing on launch (caught → app quit). Add `require('https')`.\n2. `node` not found — a GUI-launched macOS app inherits only\n[…]\n to /Applications and launched via `open` — app boots, spawns\nthe server on an ephemeral port, dashboard returns 200, stays alive.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(desktop): require https + robust node-binary resolution for GUI l…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T10:03:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d4804c997d329c389bd43d667d88f3cb1efdaa10",
"body": "Silent auto-update on macOS requires a signed build; codbash currently ships\nunsigned. So the app now uses a NOTIFY model: on launch + every 6h it queries\nthe GitHub releases/latest API and, if a newer version exists, offers to open\nthe download page. Works without a signing identity today; can be s\n[…]\n the notify-now / silent-when-signed update models\n\nFirst desktop release published: v7.13.0 (unsigned, arm64) on GitHub Releases.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(desktop): notify-based update check via GitHub Releases (#246)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T09:51:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e9ec3760bae27e0d1f473fd32c3fca63ad0eb8aa",
"body": "… (#245)\n\n- Icon: codbash stacked-layers glyph on brand-blue rounded square\n (build/icon.svg source → build/icon.png 1024²; electron-builder makes .icns)\n- Auto-update: electron-updater checks GitHub Releases on launch + every 6h\n (packaged builds only; dev/smoke skip it)\n- Notarization: afterSign\n[…]\nnd\nthe @lydell/node-pty prebuilt bundled, icon.icns generated, afterSign hook\ncorrectly skipping notarization without credentials.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(desktop): app icon, auto-updater, and notarized-release pipeline…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T09:33:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bacf02ed6fa8451986931c05abdce713bd475405",
"body": "…244)\n\nAdds a desktop/ module that wraps the UNMODIFIED codbash server in a native\nElectron window. It is purely additive — the zero-dependency CLI core and the\npublished npm package behavior are unchanged; Electron lives only in desktop/\nwith its own package.json.\n\nHow it works: the Electron main p\n[…]\ned: `CODBASH_SMOKE=1 electron .` boots the server on an ephemeral port,\nloads the window, serves /api/sessions, and quits cleanly.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(desktop): Electron shell for macOS (additive, core untouched) (#…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T09:25:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "814754c904d605ef1e2172b04a84b0dd7bb726ec",
"body": "….0) (#242)\n\nOverview\n- Headline stats (sessions / active agents / terminals / spend), recent\n sessions as clickable cards, live terminals grouped by project folder.\n\nTerminals ↔ projects\n- Session cards get \"Open here\": opens a pane in the session's project folder\n with the agent's resume command\n[…]\nthe tooltip;\n rebuild is skipped when nothing changed (no more jitter).\n- \"Add project\" autocompletes from known session folders.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: project-aware terminals, richer Overview, tidier sidebar (v7.13…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T08:27:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7acd29e805d598eb23b0024352547d486b5f9d99",
"body": "…ebar (v7.12.0) (#241)\n\n* fix: Workspace launches commands into the focused pane (v7.10.1)\n\nPreviously saved commands / the manager \"Run\" always went to the first\npane of the active tab, so with splits the command landed in the wrong\nterminal. Now:\n\n- Clicking/focusing a pane marks it focused (track\n[…]\nupdate available\". Destroy the socket on timeout.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Workspace status bar + focused pane, Overview landing, tidy sid…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T07:44:39Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4e1f6719d2900383da6ea41a78f7683d094b4de8",
"body": "…es (v7.10.0) (#240)\n\nTwo things land together:\n\nSaved layouts (src/workspace-layouts.js, /api/terminal/layouts):\n- \"Save layout\" snapshots the whole workspace — every tab, its panes,\n and each pane's start command.\n- \"Layouts ▾\" relaunches a saved workspace in one click: rebuilds the\n tabs/panes \n[…]\nlist/delete + tab structure persisted; and a marker command's\noutput survives leaving to another view and returning (same socket).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Workspace save/relaunch layouts + keep-alive across view switch…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T06:52:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "11e9ebb958a50b588e9f9493c74c7fe92a81eeae",
"body": "Save custom agent start commands (e.g. a proxied launch:\nHTTPS_PROXY='http://user:pass@host:port' claude --dangerously-skip-permissions)\nand fire them into any pane from the per-pane Launch menu.\n\n- src/workspace-commands.js: server-side store at ~/.codedash/\n workspace-commands.json, mode 0600 (th\n[…]\ned-claude example: saved,\nlisted masked, present in the Launch menu with the full value. Full\nsuite 173 pass / 2 skipped / 0 fail.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Workspace saved start commands (v7.9.0) (#239)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T06:27:48Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f0c23375083ea374d0b63bb4aa6b8f06b052bdb3",
"body": "- Replace the ▯/⊞ glyph layout buttons (rendered as tofu boxes in many\n fonts) with crisp inline SVG icons (1 / 2-col / 3-col / 2×2).\n- Fill the content area edge-to-edge: drop the dashboard's 20px padding\n and scroll while the workspace is mounted (`.content:has(.workspace-wrap)`)\n and give the \n[…]\nd: fresh load = 1 tab / 1 pane, no horizontal overflow, wrap\nheight exactly matches the content box, all four layout icons render.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: Workspace UI — SVG split icons + full-height layout (#238)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T06:18:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a51cac82b9cc0d7d8cb77a9dc7732ab3d575e9d9",
"body": "Turns the single-pane terminal into an iTerm-like workspace:\n- Named tabs (double-click to rename); + to add, × to close.\n- Each tab splits into 1–4 panes via layout buttons or \"+ Pane\"; every\n pane is an independent xterm + WebSocket + server-side pty.\n- Per-pane \"Launch\" dropdown types an agent c\n[…]\na browser: 2 tabs with 2- and 3-pane layouts, 5 live ptys,\nrename, and background-tab survival across switches. No server changes.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Workspace tabs + splits + agent launcher (v7.8.0) (#237)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T06:12:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "af393589a9eb98919cc12f976787397a3640792a",
"body": "Adds a real terminal in the browser (new \"Workspace\" view) as the first\nstep of the TermDeck merge. Single pane for now; splits, tmux-less\nreattach, saved commands and per-project workspaces come next.\n\nArchitecture (optional feature — core stays dependency-free):\n- src/terminal.js: lazily loads @ly\n[…]\nnd-to-end in a browser (real zsh round-trip, bad-token rejection,\nteardown on navigate). Full suite 166 pass / 2 skipped / 0 fail.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Workspace browser terminal — B-0 walking skeleton (v7.7.0) (#236)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-20T05:59:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ceb8c1fe976cdea47ad70476b46f36646a426409",
"body": "New \"Recommended\" sidebar view (Tools section) showing curated companion\napps that pair well with codbash — Copyosity, ccstatusline, RustDesk,\niTerm2 — ported from TermDeck's useful-links section.\n\n- Tool list is a plain config array (RECOMMENDED_TOOLS) so adding a tool\n is a one-liner.\n- Each card\n[…]\n render() dispatch for currentView === 'recommended', nav item + key,\n NAV_HELP entry, and themed card CSS (dark/light/monokai).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Recommended tools view (v7.6.0) (#235)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-19T19:05:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0de25b715cda57a7e93df83a4685f334fe5f7c3d",
"body": "Every sidebar item now shows a one-line \"what it is & why\" tooltip on\nhover, keyed by data-key/data-view via a new NAV_HELP map in\nsidebar-config.js.\n\nThe sidebar has overflow-x:hidden, so a pure-CSS ::after tooltip would\nbe clipped. Instead we render a single shared element appended to\n<body> and p\n[…]\nAdded tests asserting every KNOWN_ITEM_KEY (+ settings) has NAV_HELP and\nthat navHelpFor is safe against unknown / prototype keys.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: sidebar hover tooltips explaining each item (v7.5.3) (#234)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-19T07:12:39Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d28d1a75db207ec90c3a0de44fcb335702f7e83e",
"body": "The \"Update Now\" flow installed the new version but then died without\ncoming back up — the port was freed but nothing relistened, so the UI\nkept showing the stale version and the page failed to reload.\n\nRoot cause: the restart spawned a child inside a `process.on('exit')`\nhandler. The event loop is \n[…]\nase\nthe port. Restarter reuses the same port/host and skips reopening the\nbrowser. Also raise the npm-install timeout 60s -> 120s.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: make self-update restart reliably (v7.5.2) (#233)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-19T03:38:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5d7234424105c181ae4fdeb0a392e24bc51b3b05",
"body": "fix: Add deleteSession safety guard and extend file tracking for session",
"is_bot": false,
"headline": "Merge pull request #232 from skargaklop/main",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-07-18T12:39:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ae889e6f36b7e673bf6bc243b4529f7c975710fb",
"body": "rescan\n\nThe deleteSession function now validates sessionId to prevent accidental\ndirectory destruction from empty or traversal values like '.' and '..'.\nAlso tracks individual .jsonl files in project dirs and additional agent\ndatabases (Cursor, Opencode, Kilo, Kiro, Qwen) for more accurate rescan\ndetection.",
"is_bot": false,
"headline": "fix: Add deleteSession safety guard and extend file tracking for session",
"author_name": "skargaklop",
"author_login": "skargaklop",
"committed_at": "2026-07-03T11:26:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2fdd5a5f945ca6ec7c52329401c437e876611be0",
"body": null,
"is_bot": false,
"headline": "Merge pull request #222 from embogomolov/fix/codex-activity-timezone",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-05-26T18:16:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "56fa2b90ad14a54c0b3e5ac9fce7f04f26933fa6",
"body": "Patch — picks up the design port (#225) and Pi resume-target hardening\n(#224) shipped since 7.5.0.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: release 7.5.1 (#226)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-05-26T05:43:22Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "b4e6cbaf59472d82fdf201c7a83d17e263e332b2",
"body": "…on) (#225)\n\nTokens\n- Dark theme deepened to #08090C bg / #121418 panels with #2A2D33 borders\n- Cool text (#EBEDF0 / #B6BCC8 / #9499A5) replaces gray-blue stack\n- Brand accent shifted to neon green #00FF88 (dark) / AA-safe #10804A (light)\n- Light theme cooled to #FAFBFC bg + #111827 fg + #57606D mut\n[…]\nraphy\n- Inter loaded from Google Fonts, font-smoothing antialiased\n- CSP relaxed for fonts.googleapis.com / fonts.gstatic.com only\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(design): port neuraldeep visual identity (palette + Inter + moti…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-05-26T05:41:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "77dfd8c2af66b4bbfc8fa0303874cfe92768517e",
"body": null,
"is_bot": false,
"headline": "fix(pi): address resume review findings (#224)",
"author_name": "Tim Seriakov",
"author_login": "timseriakov",
"committed_at": "2026-05-26T05:27:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d425df46c9cb596785e041cb550799c728588ac",
"body": null,
"is_bot": false,
"headline": "chore(cache): use codbash temp cache names",
"author_name": "embogomolov",
"author_login": "embogomolov",
"committed_at": "2026-05-25T20:12:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "84d92199dcf36d5af56ef1dea264675335955a9b",
"body": null,
"is_bot": false,
"headline": "fix(codex): use real activity timestamps and local calendar days",
"author_name": "embogomolov",
"author_login": "embogomolov",
"committed_at": "2026-05-25T20:12:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "89554e4c061bd7aa93b40e8a965d094cefc91a33",
"body": "Five new agents (Qwen, Copilot Chat, Copilot CLI, Pi, Oh My Pi), project\nlauncher with GitHub repo onboarding, subscriptions management, background\ngit fetch worker, sidebar customization, and 7+ Codex/Windows/cloud-sync\nstability fixes accumulated over 27 commits since 7.4.0.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: release 7.5.0 (#223)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-05-25T17:53:07Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "5a0dffaab12a7de519b9994a1d48d6b6059b359b",
"body": "* feat(pi): add Pi and Oh My Pi support\n\nAdds Pi and Oh My Pi as first-class agents instead of treating them as a combined sidebar entry. The sidebar exposes separate Pi and Oh My Pi filters, while leaderboard aggregation keeps their stats distinct and renders lowercase badges only in the leaderboar\n[…]\nisplay casing outside Leaderboard and lowercase badges inside Leaderboard.\n\nTests:\n\n- node --test\n- Manual: omp --resume <jsonl path> --print 'respond ok'\n\n* docs(pi): document Pi and Oh My Pi support",
"is_bot": false,
"headline": "feat(pi): add Pi and Oh My Pi support (#221)",
"author_name": "Tim Seriakov",
"author_login": "timseriakov",
"committed_at": "2026-05-25T17:49:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4ba985d98b15055546fc9e73cf0c9ce57438cb8a",
"body": "Codex Desktop >= 0.133.0-alpha.1 ingests Claude Code sessions from\n~/.claude/projects/**/*.jsonl into ~/.codex/sessions/ and registers\nthem in session_index.jsonl with a fresh UUIDv7 thread id. The\noriginal Claude file stays in place, so the same conversation\nappeared twice in codbash — once correct\n[…]\nfile in the rescan-change detector to close a\nrace where Codex writes the rollout/index slightly before the ledger\nand a poll fires in between.\n\nCo-authored-by: jackrescuer-gif <jackrescuer@gmail.com>",
"is_bot": false,
"headline": "fix: dedupe Claude sessions imported by Codex Desktop (#220)",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-05-25T05:55:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c39e09cdb04ec944583489854a08c4374b42cd39",
"body": "…splay (#218)\n\nAnalytics → History tab now lets you track paid subscriptions and API\ndeposits across all supported services. Service select expanded from\n5 to 9 entries (+ API custom): Claude Code, ChatGPT/Codex, Cursor,\nCopilot, Kiro, OpenCode, Qwen Code, Kilo, API (custom). Picking a\nservice popul\n[…]\n- Three-agent review (code / security / UX-with-skills): all CRITICAL,\n HIGH, MEDIUM addressed; selected LOW deferred with reasons in PR body.\n\nCo-authored-by: jackrescuer-gif <jackrescuer@gmail.com>",
"is_bot": false,
"headline": "feat: subscriptions management for all 7 agents + fix project name di…",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-05-20T05:45:18Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "654530cf4e15c7fbc451f89ae3739e483a8b4605",
"body": "Sidebar is now organized into 3 collapsible sections — Workspace, Agents,\nTools — with Install agents as a default-collapsed sub-section. Each entry\ncan be hidden via Settings → Sidebar. Section state and per-item visibility\npersist in localStorage['codedash-sidebar-config'] (schema v:1). Settings\np\n[…]\nfile-driven if it ever shows up.\n- out-of-scope: count badge on collapsed \"Install agents\" — cosmetic polish,\n will land in a follow-up UI PR.\n\nCo-authored-by: jackrescuer-gif <jackrescuer@gmail.com>",
"is_bot": false,
"headline": "feat(sidebar): group + customize sidebar items, tabbed Settings (#216)",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-05-18T13:45:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "56a8da823b443e2a748bc5dbec156b971d6b7615",
"body": "* fix(repo-refresh): cancel manager-owned timers in test teardown + run tests in CI\n\nAddresses two non-blocking follow-ups from #213 review.\n\nTest isolation: createRepoRefreshManager() now tracks every setTimeout it\nschedules (debounced save, runFetch 60s timeout/SIGKILL grace, waiter\ntimeouts) in a\n[…]\neps(t, ...) helper — that file ran before repo-refresh.test.js in\nthe CI test order and was leaving timers across the file boundary.\n\n---------\n\nCo-authored-by: jackrescuer-gif <jackrescuer@gmail.com>",
"is_bot": false,
"headline": "fix(repo-refresh): cancel manager-owned timers + run tests in CI (#217)",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-05-16T07:53:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "94e7be62e2e362bc13e49ff21ddfb255bed70d69",
"body": "Adds per-project \"Auto-fetch on new chat\" toggle, a manual refresh\nbutton on each project card, and a global \"Fetch all on codbash start\"\ntoggle. Runs `git fetch --all --prune` in the background — never touches\nthe working tree, never blocks the HTTP server.\n\nGoal: when a session starts, the LLM see\n[…]\nrowser.\n- \"Behind by N commits\" indicator.\n- Connection-lost banner when poll fails.\n- toast queue/stack (current dedupe is sufficient for v1).\n\nCo-authored-by: jackrescuer-gif <jackrescuer@gmail.com>",
"is_bot": false,
"headline": "feat: background git fetch for connected repos (auto-refresh v1) (#213)",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-05-15T07:59:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7c148bef3033ad958a26bfd757c1af39a13d89de",
"body": null,
"is_bot": false,
"headline": "fix: preserve Windows paths for Codex resume (#214)",
"author_name": "Nikita Smirnov",
"author_login": "IamXesus",
"committed_at": "2026-05-15T07:58:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "831e5280e864b3341013a17186aa28ce386d11ac",
"body": "…sses (#209) (#215)\n\n- Watch ~/.codex/history.jsonl, session_index.jsonl and per-day session\n dirs in _sessionsNeedRescan so new Codex sessions appear without\n restarting a long-running codbash server. Walk is performed once per\n rescan and reused in _updateScanMarkers to avoid a TOCTOU race.\n- P\n[…]\n is swallowed\n- EACCES on ~/.codex: symmetric with other agents' silent skip\n- stat-on-poll when no Codex installed: one existsSync, negligible\n\nCo-authored-by: jackrescuer-gif <jackrescuer@gmail.com>",
"is_bot": false,
"headline": "fix(codex): pick up new sessions and stop misattributing active proce…",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-05-15T07:56:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "95d48438c4049c4e105f180f93298a7836822c2a",
"body": "* fix: collapse worktrees to main repo, ignore $HOME-as-git-root\n\nresolveGitRoot now:\n- Uses `git worktree list --porcelain` first record to map linked\n worktrees to the main repo (was: separate \"project\" per worktree).\n- Drops bare-repo paths (root ending in .git) so they don't pollute\n downstrea\n[…]\nsistent\n with other cache writers in this file; loader try/catch handles a\n truncated JSON gracefully (falls back to empty cache).\n\n---------\n\nCo-authored-by: jackrescuer-gif <jackrescuer@gmail.com>",
"is_bot": false,
"headline": "fix: collapse worktrees to main repo, ignore $HOME-as-git-root (#212)",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-05-13T19:36:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ecdafab9c8d725ccba1fd41909abe1758a9f43ba",
"body": "…ucture\n\nfeat: Projects tab → Projects (launcher) + History subtabs + agent picker\n\nWhat's new\n\nUser-facing\n\nEach registered project gets a clean launcher card: name, path, source tag (github / added / auto), ▶ New, ⟳ Last, ⏷ agent picker, View N sessions → deeplink to History filtered to that proje\n[…]\nPI routes: GET/PUT /api/settings, GET /api/agents/installed, POST /api/agents/refresh-detect.\nPOST /api/launch gains optional autoRegister and returns registered: { ... } when a new project was added.",
"is_bot": false,
"headline": "Merge pull request #211 from NovakPAai/claude/jack-projects-tab-restr…",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-05-12T19:49:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c902d039ba163efafde4edc025d43f3ac08c176d",
"body": "…ttings\n\nFalse positives fixed:\n- Copilot CLI was 'detected' just because 'gh' is on PATH. Now checks for\n the actual gh-copilot extension dir under ~/.local/share/gh/extensions/\n (Linux/macOS) or %LOCALAPPDATA%/GitHub CLI/extensions (Windows).\n- Copilot Chat was 'detected' just because VS Code.ap\n[…]\ntalled but the plugin is missing.\n\nTests stub customChecks to keep them deterministic vs. the developer's\nreal filesystem. New scenario locked: customCheck fires only when PATH +\napp-bundle both miss.",
"is_bot": false,
"headline": "feat(detect): proper copilot detection + 'Detected agents' list in Se…",
"author_name": "jackrescuer-gif",
"author_login": "jackrescuer-gif",
"committed_at": "2026-05-12T19:41:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "00ee55adbfe43409bc020e40075a89ee492753ae",
"body": "…ivity\n\nCSS was using wrong variable names (--card-bg, --input-bg) — those don't\nexist in codbash, so the new surface fell back to hardcoded grays instead\nof the active theme. Switch to the real names (--bg-card, --bg-input,\n--text-secondary, --text-muted) and match the existing .card / .toolbar-btn\n[…]\nrojectActivityTs() now takes max(last_ts) across all of a project's\nsessions instead of trusting list[0] to be the most recent. Same idea in\nrenderLauncherCard — slice().sort() before reading list[0].",
"is_bot": false,
"headline": "style(projects): use existing theme variables; sort cards by last act…",
"author_name": "jackrescuer-gif",
"author_login": "jackrescuer-gif",
"committed_at": "2026-05-12T19:41:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3824fcfc644f6a196c180bce3ae1360c6906c02e",
"body": "…rived folders\n\nThe Projects landing was rendering every folder that ever held a session as a\nlauncher card, mirroring the old behavior. That defeats the purpose of the\nsplit — Projects = 'things I'm actively working on', History = 'everywhere\nI've ever been'. Filter the landing to entries with a manualId set (i.e.\nprojects from projects.json) so it stays focused on the registry.",
"is_bot": false,
"headline": "fix(projects): landing shows only registered projects, not session-de…",
"author_name": "jackrescuer-gif",
"author_login": "jackrescuer-gif",
"committed_at": "2026-05-12T19:41:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f9857e4c91cb69658c97c49c3df189d9175fe7fe",
"body": "…agent picker\n\nSplits the single Projects view into two purpose-built subtabs:\n- Projects (landing): registered project launcher cards, ▶ New split-button,\n ⏷ per-launch agent picker, ⚙ Settings modal for default agent.\n- History: the existing grouped-session view, relocated unchanged.\n\nAdds settin\n[…]\nUbuntu/Fedora) — agent detection via PATH walk, no .app bundles\n- WSL (Ubuntu under Windows 11) — same as Linux + WSL-specific paths\n- Windows native — `where.exe` detection branch in agents-detect.js",
"is_bot": false,
"headline": "feat: restructure Projects tab — launcher landing + History subtab + …",
"author_name": "jackrescuer-gif",
"author_login": "jackrescuer-gif",
"committed_at": "2026-05-12T19:41:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a50aeff919279dbaeb959fe5ca0fd3cf0f81adc2",
"body": "…210)\n\n* feat: project launcher with New/Last session + GitHub repo onboarding\n\nAdds a \"Project launcher\" experience on the Projects view:\n- \"▶ New\" button on each project group opens a fresh agent session in the\n project directory (no --resume). Uses the most recently used tool for that\n project,\n[…]\nthored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: jackrescuer-gif <jackrescuer@gmail.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: project launcher — New/Last session + GitHub repo onboarding (#…",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-05-12T19:29:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "93fe8e39e37ce31122757300db599565452969ca",
"body": "* feat: add GitHub Copilot CLI as 6th supported agent\n\n- Reads VS Code sessions from ~/.copilot/session-state/<uuid>/\n- Reads JetBrains sessions from ~/.copilot/jb/<uuid>/partition-1.jsonl\n- Parses workspace.yaml (flat + block scalar) for metadata\n- Active detection via inuse.<pid>.lock files\n- Wire\n[…]\nilot Chat, Resume for Copilot CLI\n\n* fix: restore Kilo CLI lookup, add UUID validation for Copilot CLI, fix indentation\n\n---------\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "feat: add GitHub Copilot CLI as 7th supported agent (#207)",
"author_name": "ABIvan-Tech",
"author_login": "ABIvan-Tech",
"committed_at": "2026-05-07T16:22:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "258d41f3582cfe247629077d0f9cc0a111c45e16",
"body": "…tab (#208)\n\n- Clear _analyticsHtmlCache in addSubEntry/removeSubEntry so render()\n always rebuilds the HTML from current localStorage, not the stale cache\n- Replace service/plan <select> dropdowns with <input>+<datalist> to\n allow adding any custom service (GitHub Copilot, Windsurf, etc.)\n- Auto-\n[…]\n 180px to fit longer service names\n- Add aria-label to all form inputs\n- Include service name in breakdown label for multi-subscription clarity\n\nCo-authored-by: jackrescuer-gif <jackrescuer@gmail.com>",
"is_bot": false,
"headline": "fix: subscription entries not appearing after 3 additions in History …",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-05-06T07:26:12Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "655a695ca2a78ce2258d79da44c09da76bf40d57",
"body": "* initial version of structured messages support\n\n* truncation for structured messages\n\n* structured messages for Claude Code sessions\n\n* more structures supported\n\n* code review comments addressed\n\n---------\n\nCo-authored-by: Alexander Kolotov <alexander.kolotov@gmail.com>",
"is_bot": false,
"headline": "feat: render structured Claude Code session detail messages (#198)",
"author_name": "Alexander Kolotov",
"author_login": "akolotov",
"committed_at": "2026-04-23T05:47:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "34ae59cd994c5bc5d03db44f20f1ad0635392110",
"body": "Co-authored-by: jackrescuer-gif <jackrescuer@gmail.com>",
"is_bot": false,
"headline": "docs: rename codedash → codbash in installation and CLI docs (#205)",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-04-22T18:02:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3fd494334e3345415a9060598a2404c6b3bcbde5",
"body": "… (#204)\n\nCloud Sync previously preserved the source machine's absolute project\npath and derived the Claude/Cursor project key from it on pull. That\ntied project identity to the source machine, so sessions pushed from\ne.g. /Users/alice/work/app on macOS were restored under a Claude\nproject bucket th\n[…]\nssh/git@ variants + case + credentials +\n trailing slashes/.git all map to one canonical form\n- findLocalProjectByRemote: 30s-cached scan of loaded sessions\n- Add unit tests for normalization helpers",
"is_bot": false,
"headline": "fix(cloud): remap project paths across machines via git remote (#154)…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-21T21:15:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6aaa0273d7db75f7601aeb2961b2653b05a0988c",
"body": "* feat: add GitHub Copilot session discovery and detail loading\n\nScan VS Code workspaceStorage for Copilot Chat sessions (JSON and JSONL\nmutation format). Includes workspace-to-project mapping with disk cache,\ntargeted JSONL replay for request/response extraction, and integration\ninto loadSessions/f\n[…]\nTL expiry — catches new workspaces\n created within TTL window\n- docs/ARCHITECTURE.md: update stale tool name \"copilot\" → \"copilot-chat\"\n\n---------\n\nCo-authored-by: Максим Рябов <m.riabov@itexpert.ru>",
"is_bot": false,
"headline": "feat: add GitHub Copilot Chat (VS Code) agent support (#171)",
"author_name": "Max Ryabov",
"author_login": "MaxRyabov",
"committed_at": "2026-04-21T21:15:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0db9c4c746e459697b7cebff2ca1043cb16a18b2",
"body": null,
"is_bot": false,
"headline": "feat: add qwen terminal resume support (#203)",
"author_name": "dorogao5",
"author_login": "dorogao5",
"committed_at": "2026-04-21T07:55:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7551330c565666e8ca76085dd9cdd92b25e65471",
"body": null,
"is_bot": false,
"headline": "feat: add qwen frontend UI (#202)",
"author_name": "dorogao5",
"author_login": "dorogao5",
"committed_at": "2026-04-21T07:55:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e9cd96b9c3dc9d084404007c6e3d99f78bbf0cef",
"body": null,
"is_bot": false,
"headline": "feat: add qwen backend support (#201)",
"author_name": "dorogao5",
"author_login": "dorogao5",
"committed_at": "2026-04-21T07:54:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "50d975786d5431a4230041f9bf5eab47e4f9be30",
"body": "* initial version of structured messages support\n\n* truncation for structured messages\n\n---------\n\nCo-authored-by: Alexander Kolotov <alexander.kolotov@gmail.com>",
"is_bot": false,
"headline": "feat: render structured Codex session detail messages (#197)",
"author_name": "Alexander Kolotov",
"author_login": "akolotov",
"committed_at": "2026-04-21T07:36:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c0be1dfb2b89ae1c28a7725517878b4c7b3f440c",
"body": "- Add 'Open ›' button to each project row in Projects view; clicking it\n filters Sessions view to show only that project's sessions\n- Show breadcrumb bar with project name and 'Clear filter' button that\n returns to Projects view\n- Group renderProjects by git-root key (not name) to correctly handle\n[…]\nd\n JSON.stringify in inline onclick handlers (XSS hardening)\n- Document that drill-down always uses git-root key independent of\n groupingMode\n\nCo-authored-by: jackrescuer-gif <jackrescuer@gmail.com>",
"is_bot": false,
"headline": "feat: git project drill-down from Projects view (#200)",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-04-21T07:36:08Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3ee4cc575633c7a15a2de261f4494f4cc2314d91",
"body": "- Invalidate _analyticsHtmlCache on every loadSessions() call so the\n Analytics tab always shows fresh data after navigating away and back\n- Add setInterval(loadSessions, 60000) so allSessions (used by Activity\n heatmap and Analytics) stays current without manual refresh\n- Guard loadSessions with _loadSessionsInFlight flag to prevent\n overlapping fetches when setInterval and the X-Loading progressive\n auto-refresh fire simultaneously\n\nCo-authored-by: jackrescuer-gif <jackrescuer@gmail.com>",
"is_bot": false,
"headline": "fix: prevent stale analytics data and add session auto-refresh (#199)",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-04-21T07:35:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "29abcb7aca08acec310c970031c0b51b64d8e60b",
"body": "Co-authored-by: Nathan Widjaja <nathan@Nathans-MacBook-Air.local>",
"is_bot": false,
"headline": "docs: sharpen README opener around core job (#190)",
"author_name": "nathan-widjaja",
"author_login": "nathan-widjaja",
"committed_at": "2026-04-21T07:35:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e713f6dd34d6c6e21ef907b266601f9593f6851d",
"body": null,
"is_bot": false,
"headline": "release: v7.4.0 — Cloud Sync redesign + self-update (#196)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-17T12:53:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bab79d1eb5d4592f82961dd238da79c0b2d0fc28",
"body": "…mit (#195)\n\n- Replaced two-column layout with single merged list\n- Three sections: Synced / Cloud Only / Local Only\n- Auto-setup encryption on page load (no passphrase modal)\n- Clear explanation text for new users\n- Counter: 3/10 sessions synced\n- Push/Pull buttons per session\n- Removed passphrase input, lock/unlock — all automatic via GitHub token\n\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: redesign Cloud Sync UI — single list, auto-setup, 10 session li…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-17T12:52:46Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "9ce8e18d8ecb16b0c03d66053833d7648e982d48",
"body": null,
"is_bot": false,
"headline": "release: v7.3.1 — GitHub token cloud encryption (#194)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-17T12:36:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "219fd2a700181c1f8b7f67a615fdad519a4764a5",
"body": "…193)\n\n- cloud.js: ensureEncryptionKey uses profile.token as passphrase\n- server.js: /api/cloud/setup auto-derives key from GitHub token\n- server.js: /api/cloud/locked auto-unlocks if GitHub connected\n- Removed manual passphrase prompts (setup, unlock, lock)\n- Same GitHub account on both PCs = same encryption key\n\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: use GitHub token for cloud encryption (no passphrase needed) (#…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-17T12:35:35Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "4495c852fc92dfd0af667ebbdb4e237d646a1df4",
"body": null,
"is_bot": false,
"headline": "release: v7.3.0 — self-update UI + changelog (#192)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-17T12:22:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2c31b428631f187440d841bfb3e5fe3bd20855c3",
"body": "- POST /api/update: runs npm i -g codbash-app@latest, restarts process\n- \"Update Now\" button in update banner (replaces copy-only)\n- Version badge clickable → triggers update\n- Auto-check for updates every 10 seconds\n- Banner shows when new version available with Update Now + Copy Command\n\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: one-click self-update from UI (#191)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-17T12:22:23Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7f7bdd65cb41ec69ec705fbfcb8960dfee0831b7",
"body": null,
"is_bot": false,
"headline": "release: v7.2.3 (#189)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-17T08:01:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c8c3bba9efeab358f802bfbb2a4d61dae8cd217d",
"body": "Save which groups are collapsed before render(), restore after.\nPrevents groups from expanding on background refresh/poll.\n\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: preserve collapsed group state across re-renders (#188)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-17T08:00:46Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "686108d3f7e2aed3e8f0f569845fb340dae5af1f",
"body": null,
"is_bot": false,
"headline": "release: v7.2.2 (#187)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-17T07:55:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d2abe542fd9af8f5da9a7893f04a9ad0a1601365",
"body": "…s (#186)\n\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Collapse All / Expand All buttons for Projects and grouped view…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-17T07:54:37Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "20d4ea353f4b0a08eb3abed02263cfeac5fb9f7a",
"body": null,
"is_bot": false,
"headline": "release: v7.2.1 (#185)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-17T07:46:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f18b998359043857411d0d179e5a2fe40dc3a448",
"body": "- Changelog: 11 new entries from v6.3.0 to v7.2.0\n- Save/restore content.scrollTop in render() so page doesn't jump\n when pollActiveSessions or background refresh triggers re-render\n\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: update changelog (v6.3–v7.2) + preserve scroll on re-render (#184)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-17T07:45:32Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "4b5e53f500a3d0ef48918d7dabc1be42e4d9c4c7",
"body": "…lytics tabs (#183)\n\nMerged PRs:\n- #182 (@rrr3try): Show Claude Code recap (away_summary) as session title\n- #181 (@NovakPAai): Block bulk delete for filter-hidden sessions\n- #180 (@NovakPAai): Detect new sessions in existing dirs + local-agent-mode\n- #179 (@NovakPAai): Message sort toggle in session drawer + default setting\n- #86 (@NovakPAai): Sub-tabs in Cost Analytics (Overview/Breakdown/History)\n\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "release: v7.2.0 — recap titles, sort toggle, new sessions detect, ana…",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-17T07:36:26Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "b136a5bd06abba1953e3ce273133689b3f5357f6",
"body": "* feat: cost attribution breakdown в Token Breakdown\n\nДобавлен стэкованный бар стоимости по типам токенов:\n- Output (красный) — обычно 80-95% стоимости (в 5× дороже input)\n- Input (синий) — прямые входные токены\n- Cache write / Cache read — запись и чтение кэша\n\nПропорции рассчитаны через Sonnet-bas\n[…]\noutputCostEst, cacheReadCostEst, cacheCreateCostEst,\ncacheSavings, cacheHitRate\n\n* feat: sub-tabs в Cost Analytics (Overview / Breakdown / History)\n\n---------\n\nCo-authored-by: Pawel <pwlnvk@gmail.com>",
"is_bot": false,
"headline": "feat: sub-tabs в Cost Analytics (Overview / Breakdown / History) (#86)",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-04-17T07:35:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c51efe73182c9669e07d5472915b856432747ace",
"body": "Claude Code 2.1.108+ writes auto-recap entries to session JSONL:\n {\"type\":\"system\",\"subtype\":\"away_summary\",\"content\":\"~40 words…\"}\n\nParse the last away_summary per session, surface it as session.recap,\nand use it in the card title when no explicit session_name is set.\nFalls back to first_message w\n[…]\ne recap in search haystack\n- Bump parsed disk cache filename to -v2.json to force a one-time\n rebuild so pre-existing cache entries pick up the new field\n\nCo-authored-by: Vadim <retry@MacBookPro.lan>",
"is_bot": false,
"headline": "feat: show Claude Code recap (away_summary) as session title (#182)",
"author_name": "Vadim Gusev",
"author_login": "rrr3try",
"committed_at": "2026-04-17T07:34:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5640968bf3dd68a804a65dd2385e9694e3dafa8f",
"body": "- Extract message rendering into renderDetailMessages() in detail.js\n- Add ↑/↓ sort toggle button in Conversation header\n- toggleMsgSort() flips order without re-fetching (uses cached _detailMessages)\n- Settings page: new \"Message Sort Order\" option (Oldest/Newest first)\n- Persisted in localStorage key codedash-msg-sort, default: asc\n\nCo-authored-by: Pawel <pwlnvk@gmail.com>",
"is_bot": false,
"headline": "feat: add message sort toggle in session drawer + default setting (#179)",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-04-17T07:34:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4caa7b6612ff7b01c6b14d3bfe4ed97907254b50",
"body": "…mode sessions (#180)\n\nTwo session discovery bugs fixed:\n\n1. Cache invalidation: _sessionsNeedRescan() only checked PROJECTS_DIR top-level\n mtime, so new sessions added to existing project subdirs were invisible until\n history.jsonl changed or server restarted. Now also tracks each subdir mtime.\n[…]\ne-sessions/\n were never scanned. Added detectLocalAgentModeClaudeDirs() (macOS only)\n to find embedded .claude dirs and include them in EXTRA_CLAUDE_DIRS.\n\nCo-authored-by: Pawel <pwlnvk@gmail.com>",
"is_bot": false,
"headline": "fix: detect new sessions in existing project dirs + scan local-agent-…",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-04-17T07:34:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "37a367bae2bea1d70a9118c747143820cdcea1bf",
"body": "…181)\n\nWhen a user selects sessions then applies a search/filter, some\nselected sessions become invisible. Previously, Delete would silently\nremove those hidden sessions too — a data loss risk.\n\nNow:\n- updateBulkBar() detects selected IDs not in filteredSessions\n- Shows warning: \"⚠ N hidden by filte\n[…]\nen selections are resolved\n- \"deselect hidden\" link removes only the invisible selections,\n preserving the visible ones so the user can continue bulk actions\n\nCo-authored-by: Pawel <pwlnvk@gmail.com>",
"is_bot": false,
"headline": "fix: block bulk delete when selected sessions are hidden by filter (#…",
"author_name": "NovakPAai",
"author_login": "NovakPAai",
"committed_at": "2026-04-17T07:34:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a4d23ab6c3abfc67ed0c08703ee3422f2f12342b",
"body": "Merged PRs:\n- #169 (@buriy): Running card titles white for visibility\n- #170 (@buriy): Makefile for easy service management\n- #177 (@tearfu1): Linux precise terminal focus via WINDOWID\n- #172 (@vbp1): WSL browser UI (launch, focus, IDE)\n- #150 (@dum3r): WSL agent homes discovery on Windows\n- #165 (@tpitsunov): Kilo CLI agent support (SQLite backend)\n\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "release: v7.1.0 — Kilo agent, Linux focus, WSL support, Makefile (#178)",
"author_name": "Valerii Kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-16T09:39:31Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "5404825feec213fbe2658b52eb6a81035908d59f",
"body": "- Scan/load/cost/replay/search/export for Kilo CLI sessions from ~/.local/share/kilo/kilo.db\n- Reuses OpenCode SQLite patterns (same schema: session, message, part tables)\n- Fix findSessionFile: OpenCode now verifies via SQL instead of eagerly returning for ses_* IDs\n- Fix buildSearchIndex: SQLite/C\n[…]\nip rule\n- Sidebar: Kilo filter + install entry (layers icon, emerald green badge)\n- Frontend: analytics label, heatmap color, calendar filter, copy-resume command\n- Docs: CLAUDE.md updated to 6 agents",
"is_bot": false,
"headline": "feat: add Kilo CLI agent support (SQLite backend + UI) (#165)",
"author_name": "Timur Pitsunov",
"author_login": "tpitsunov",
"committed_at": "2026-04-16T09:36:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4680bdcb3492917f3eeb055caf652b93c165970e",
"body": "* feat: ingest WSL agent homes on Windows\n\n* feat: prepare narrow WSL ingestion support on latest main",
"is_bot": false,
"headline": "feat: discover WSL agent homes on Windows (#150)",
"author_name": "dum3r",
"author_login": "dum3r",
"committed_at": "2026-04-16T09:36:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "72be42768f1b5ac0c8877fba9337a2b225b3949a",
"body": "* feat(wsl): launch, focus and IDE open from Windows host\n\nAdds first-class support for running codedash inside WSL while using the\nWindows browser as UI:\n\n- terminals.js: detect WSL via /proc/version + WSL_DISTRO_NAME; expose\n wt.exe / powershell.exe as launch targets. Open new terminals through\n \n[…]\nons (nvm, pyenv, etc.) and shell\ncustomizations. Switch WSL launch invocations from bash -l to bash -li\nso the trampoline script runs as both login and interactive, sourcing\nthe full user environment.",
"is_bot": false,
"headline": "feat(wsl): run codedash from WSL with Windows-host browser UI (#172)",
"author_name": "vbp1",
"author_login": "vbp1",
"committed_at": "2026-04-16T09:36:13Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "719422358ad3fcfb3cbd936f96f00094f1f88b89",
"body": "…nal support (#177)\n\n- Read WINDOWID from /proc/<pid>/environ for accurate window matching\n instead of matching first window by terminal server PID\n- Add kitty remote control support for tab-level focus\n- Support arbitrary terminal binary path in settings (text input with\n datalist suggestions ins\n[…]\nrminal via x-terminal-emulator symlink\n- Handle gnome-terminal (--) and wezterm (start --) special flags,\n generic -e for all other terminals\n- Add wmctrl hex conversion and xdotool decimal fallbacks",
"is_bot": false,
"headline": "feat(linux): add precise terminal focus via WINDOWID and custom termi…",
"author_name": "Maxim Vayda",
"author_login": "tearfu1",
"committed_at": "2026-04-16T09:36:08Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d89b199ac221ced22280b1abdd8bd8ff75afd545",
"body": null,
"is_bot": false,
"headline": "feat: add Makefile for easy service management (#170)",
"author_name": "Yuri Baburov",
"author_login": "buriy",
"committed_at": "2026-04-16T09:36:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e251c00da908c31e97ba5d1b6c5701f3de1b41c3",
"body": null,
"is_bot": false,
"headline": "style: make running card titles white for better visibility (#169)",
"author_name": "Yuri Baburov",
"author_login": "buriy",
"committed_at": "2026-04-16T09:35:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "201b3ca2817d7fa3bb41aefacb896163921c51dc",
"body": "…s too similar to 'lodash')\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: npm package name codbash → codbash-app (npm rejected 'codbash' a…",
"author_name": "v.kovalskii",
"author_login": "vakovalskii",
"committed_at": "2026-04-16T08:20:58Z",
"body_truncated": false,
"is_coding_agent": true
}
],
"releases_count": 43,
"commits_last_year": 275,
"latest_release_at": "2026-07-30T08:07:30Z",
"latest_release_tag": "v7.16.0",
"releases_from_tags": false,
"days_since_last_push": 2,
"active_weeks_last_year": 11,
"days_since_latest_release": 2,
"mean_days_between_releases": 1.1
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 42,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "codbash-app",
"exists": true,
"license": "MIT",
"keywords": [
"codbash",
"codedash",
"claude",
"claude-code",
"codex",
"cursor",
"opencode",
"kiro",
"ai-agents",
"sessions",
"dashboard",
"terminal",
"cli",
"devtools"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/codbash-app",
"is_deprecated": false,
"latest_version": "7.15.0",
"repository_url": "https://github.com/vakovalskii/codbash",
"versions_count": 27,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 2718,
"first_published_at": "2026-04-16T08:21:47.295000Z",
"latest_published_at": "2026-07-23T06:45:40.501000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 9
}
]
},
"popularity": {
"forks": 49,
"stars": 258,
"watchers": 1,
"fork_history": {
"days": [
{
"date": "2026-04-03",
"count": 2
},
{
"date": "2026-04-04",
"count": 2
},
{
"date": "2026-04-05",
"count": 4
},
{
"date": "2026-04-06",
"count": 7
},
{
"date": "2026-04-07",
"count": 1
},
{
"date": "2026-04-08",
"count": 6
},
{
"date": "2026-04-09",
"count": 3
},
{
"date": "2026-04-10",
"count": 4
},
{
"date": "2026-04-16",
"count": 1
},
{
"date": "2026-04-17",
"count": 2
},
{
"date": "2026-04-20",
"count": 1
},
{
"date": "2026-04-30",
"count": 1
},
{
"date": "2026-05-01",
"count": 1
},
{
"date": "2026-05-14",
"count": 1
},
{
"date": "2026-05-23",
"count": 1
},
{
"date": "2026-05-25",
"count": 1
},
{
"date": "2026-05-26",
"count": 1
},
{
"date": "2026-05-30",
"count": 1
},
{
"date": "2026-06-01",
"count": 1
},
{
"date": "2026-06-08",
"count": 1
},
{
"date": "2026-06-18",
"count": 1
},
{
"date": "2026-06-24",
"count": 1
},
{
"date": "2026-07-20",
"count": 1
},
{
"date": "2026-07-22",
"count": 1
},
{
"date": "2026-07-24",
"count": 2
},
{
"date": "2026-08-01",
"count": 1
}
],
"complete": true,
"collected": 49,
"total_forks": 49
},
"star_history": null,
"open_issues_and_prs": 7
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 242086,
"source_files_sampled": 63,
"oversized_source_files": 4,
"agent_instruction_files": [
"CLAUDE.md"
],
"agent_instruction_max_bytes": 14921
},
"dependencies": {
"manifests": [
"desktop/package.json",
"package.json"
],
"advisories": {
"error": null,
"scope": "published_package",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 7,
"malicious_count": 0,
"assessed_package": "npm:codbash-app@7.15.0",
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"npm"
],
"dependencies": [
{
"name": "electron-updater",
"manifest": "desktop/package.json",
"ecosystem": "npm",
"version_constraint": "^6.8.9"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 188,
"open_issues": 7,
"closed_ratio": 0.879,
"closed_issues": 51,
"closed_unmerged_prs": 35
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "vakovalskii",
"commits": 206,
"avatar_url": "https://avatars.githubusercontent.com/u/220532298?v=4"
},
{
"type": "User",
"login": "NovakPAai",
"commits": 26,
"avatar_url": "https://avatars.githubusercontent.com/u/271973710?v=4"
},
{
"type": "User",
"login": "akolotov",
"commits": 10,
"avatar_url": "https://avatars.githubusercontent.com/u/20793260?v=4"
},
{
"type": "User",
"login": "timseriakov",
"commits": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/59409712?v=4"
},
{
"type": "User",
"login": "izzzzzi",
"commits": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/17871694?v=4"
},
{
"type": "User",
"login": "jackrescuer-gif",
"commits": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/262566065?v=4"
},
{
"type": "User",
"login": "dorogao5",
"commits": 3,
"avatar_url": "https://avatars.githubusercontent.com/u/145500950?v=4"
},
{
"type": "User",
"login": "buriy",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/21124?v=4"
},
{
"type": "User",
"login": "embogomolov",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/185256086?v=4"
},
{
"type": "User",
"login": "ABIvan-Tech",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/3127933?v=4"
}
],
"contributors_sampled": 23,
"top_contributor_share": 0.749
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"publish.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": null,
"reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 9,
"reason": "29 out of 30 merged PRs checked by a CI test -- score normalized to 9",
"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": 1,
"reason": "Found 5/30 approved changesets -- score normalized to 1",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"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": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 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": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "8b9bf7d08b70fc0816f327503f187a62179da70a",
"ran_at": "2026-08-01T20:00:09Z",
"aggregate_score": 4.5,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-30T13:05:36Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-07-30T13:05:06Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 151,
"created_at": "2026-04-09T09:10:56Z",
"last_comment_at": "2026-07-30T06:12:02Z",
"last_comment_author": "vakovalskii"
},
{
"number": 158,
"created_at": "2026-04-09T17:13:09Z",
"last_comment_at": "2026-07-30T06:12:04Z",
"last_comment_author": "vakovalskii"
},
{
"number": 206,
"created_at": "2026-05-01T14:37:49Z",
"last_comment_at": "2026-07-30T06:11:23Z",
"last_comment_author": "vakovalskii"
},
{
"number": 228,
"created_at": "2026-06-05T15:24:57Z",
"last_comment_at": "2026-07-30T06:11:22Z",
"last_comment_author": "vakovalskii"
},
{
"number": 229,
"created_at": "2026-06-05T15:43:06Z",
"last_comment_at": "2026-07-30T07:28:07Z",
"last_comment_author": "vakovalskii"
},
{
"number": 270,
"created_at": "2026-07-23T12:06:09Z",
"last_comment_at": "2026-07-31T08:11:37Z",
"last_comment_author": "Slach"
},
{
"number": 277,
"created_at": "2026-07-29T23:18:49Z",
"last_comment_at": "2026-07-30T13:07:25Z",
"last_comment_author": "dedyyshka"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/vakovalskii/codbash",
"host": "github.com",
"name": "codbash",
"owner": "vakovalskii"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": "The weighted overall 64 is calibrated to 73 on the published index scale (record calibration 2026-08-02).",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 64,
"calibrated": 73,
"calibration": "2026-08-02"
}
}
],
"value": 73,
"inputs": {
"security": 56,
"vitality": 79,
"community": 53,
"governance": 60,
"calibration": "2026-08-02",
"engineering": 70,
"ai_readiness": 63,
"weighted_overall_raw": 64
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 79,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 72,
"inputs": {
"commits_last_year": 275,
"human_commit_share": 1,
"days_since_last_push": 2,
"active_weeks_last_year": 11
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 2 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 2
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "11/52 weeks with commits",
"points": 7.6,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 11
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "275 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 275
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"releases_count": 43,
"latest_release_tag": "v7.16.0",
"releases_from_tags": false,
"days_since_latest_release": 2,
"mean_days_between_releases": 1.1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "43 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 43
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 2 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 2
}
}
],
"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": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "exceptional",
"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": 53,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "moderate",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 53,
"inputs": {
"forks": 49,
"stars": 258,
"watchers": 1,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "258 stars",
"points": 39.1,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 258
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "49 forks",
"points": 14,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 49
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "1 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 1
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"readme_badges": null,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"readme_badge_services": [],
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (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": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"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": 57,
"inputs": {
"packages": [
"codbash-app"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 2718
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "2,718 downloads/month across npm",
"points": 45.8,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 2718,
"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": 60,
"weight": 0.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "at_risk",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 31,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 23,
"top_contributor_share": 0.749
},
"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 75% of commits",
"points": 5.6,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 75
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "23 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 23
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"newcomer_pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 73,
"inputs": {
"merged_prs": 188,
"open_issues": 7,
"closed_issues": 51,
"prs_merged_7d": null,
"prs_decided_7d": null,
"prs_merged_30d": null,
"prs_decided_30d": null,
"issue_closed_ratio": 0.879,
"closed_unmerged_prs": 35,
"first_time_authors_30d": null,
"first_time_prs_merged_30d": null,
"first_time_prs_decided_30d": null
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "88% of issues closed",
"points": 36.9,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 88
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "188/223 decided PRs merged",
"points": 25.3,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 188,
"decided": 223
}
}
],
"max_points": 30
},
{
"key": "newcomer_pr_acceptance",
"name": "Newcomer PR acceptance",
"detail": "no first-time contributor's PR decided in 30d",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_newcomer_prs",
"params": {
"days": 30
}
}
],
"max_points": 13
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 5/30 approved changesets -- score normalized to 1",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 51,
"inputs": {
"followers": 245,
"owner_type": "User",
"is_verified": null,
"owner_login": "vakovalskii",
"public_repos": 39,
"account_age_days": 384
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "245 followers of vakovalskii",
"points": 17.2,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 245,
"login": "vakovalskii"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "39 public repos, account ~1 yr old",
"points": 13.8,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 39
}
},
{
"code": "account_age_years",
"params": {
"years": 1
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "exceptional",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"codbash-app"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 9
},
"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 9 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 9
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "27 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 27
}
}
],
"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": 70,
"weight": 0.19,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 66,
"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": "2 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 2
}
}
],
"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": "29 out of 30 merged PRs checked by a CI test -- score normalized to 9",
"points": 18,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 56,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "weak",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 45,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 4.5
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "29 out of 30 merged PRs checked by a CI test -- score normalized to 9",
"points": 2.2,
"status": "partial",
"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 5/30 approved changesets -- score normalized to 1",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"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": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "exceptional",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:codbash-app@7.15.0 runtime dependency closure — what installing the published package pulls in — 7 packages. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_published",
"params": {
"package": "npm:codbash-app@7.15.0",
"assessed": 7
}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 7,
"unassessed_packages": 0,
"affected_by_severity": "none",
"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": "no indirect dependency carries a known advisory",
"points": 25,
"status": "met",
"details": [
{
"code": "no_indirect_advisories",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "exceptional",
"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": 7,
"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": "exceptional",
"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. 1 match(es) from contributors below the commit-weight threshold (fewer than 50 commits and under 10% of sampled commits) are recorded for review and do not affect the score.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
},
{
"code": "jurisdiction_below_threshold",
"params": {
"count": 1
}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"commit_weight_rule": {
"min_commits": 50,
"min_commit_share": 0.1
},
"review_only_matches": 0,
"below_threshold_exposures": [
{
"role": "top_contributor",
"count": 1,
"country": "Russia"
}
],
"assessed_self_published_locations": 4
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match; 1 match(es) below the commit-weight threshold (<50 commits and <10% of commits), review-only",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
},
{
"code": "jurisdiction_below_threshold",
"params": {
"count": 1,
"share": 10,
"commits": 50
}
}
],
"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": 63,
"weight": 0.04,
"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": [
"CLAUDE.md"
],
"agent_instruction_max_bytes": 14921
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 100,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [
"Makefile"
],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.46,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "46 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 46,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 52,
"inputs": {
"primary_language": "JavaScript",
"largest_source_bytes": 242086,
"source_files_sampled": 63,
"oversized_source_files": 4
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "JavaScript without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "JavaScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "4/63 source files over 60KB",
"points": 51.5,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 63,
"oversized": 4
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
}
],
"metrics_version": "2.2.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-08-01T20:00:34.774936Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/v/vakovalskii/codbash.svg",
"full_name": "vakovalskii/codbash",
"license_state": "standard",
"license_spdx": "MIT"
}