Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [
"claude-code",
"developer-tools",
"git-worktree",
"terminal",
"tmux",
"commandmate",
"ai-coding",
"codex-cli",
"mobile-development",
"session-manager",
"autonomous-coding",
"claude-mobile",
"vibe-coding",
"web-ui"
],
"is_fork": false,
"size_kb": 127864,
"has_wiki": true,
"homepage": "https://www.npmjs.com/package/commandmate",
"languages": {
"CSS": 39205,
"HTML": 17189,
"Shell": 58883,
"JavaScript": 32793,
"TypeScript": 10647301
},
"pushed_at": "2026-07-22T00:44:08Z",
"created_at": "2025-11-16T14:18:16Z",
"owner_type": "User",
"updated_at": "2026-07-20T00:33:58Z",
"description": "Issue-driven AI development IDE for Claude Code and Codex CLI. Run multiple issues in parallel and keep work moving from desktop or mobile.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript"
]
},
"owner": {
"blog": null,
"name": null,
"type": "User",
"login": "Kewton",
"company": null,
"location": null,
"followers": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/11370858?v=4",
"created_at": "2015-03-08T01:59:38Z",
"is_verified": null,
"public_repos": 43,
"account_age_days": 4154
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.11.4",
"kind": "patch",
"published_at": "2026-07-20T00:38:18Z"
},
{
"tag": "v0.11.3",
"kind": "patch",
"published_at": "2026-07-19T15:26:19Z"
},
{
"tag": "v0.11.2",
"kind": "patch",
"published_at": "2026-07-19T04:24:19Z"
},
{
"tag": "v0.11.1",
"kind": "patch",
"published_at": "2026-07-18T16:31:06Z"
},
{
"tag": "v0.11.0",
"kind": "minor",
"published_at": "2026-07-18T06:39:16Z"
},
{
"tag": "v0.10.4",
"kind": "patch",
"published_at": "2026-07-18T01:47:03Z"
},
{
"tag": "v0.10.3",
"kind": "patch",
"published_at": "2026-07-17T07:47:18Z"
},
{
"tag": "v0.10.2",
"kind": "patch",
"published_at": "2026-07-17T05:56:51Z"
},
{
"tag": "v0.10.1",
"kind": "patch",
"published_at": "2026-07-17T01:01:12Z"
},
{
"tag": "v0.10.0",
"kind": "minor",
"published_at": "2026-07-16T14:13:05Z"
},
{
"tag": "v0.9.1",
"kind": "patch",
"published_at": "2026-07-15T08:50:59Z"
},
{
"tag": "v0.9.0",
"kind": "minor",
"published_at": "2026-07-15T01:46:19Z"
},
{
"tag": "v0.8.4",
"kind": "patch",
"published_at": "2026-07-10T09:28:12Z"
},
{
"tag": "v0.8.3",
"kind": "patch",
"published_at": "2026-07-08T16:08:13Z"
},
{
"tag": "v0.8.2",
"kind": "patch",
"published_at": "2026-07-06T05:05:26Z"
},
{
"tag": "v0.8.1",
"kind": "patch",
"published_at": "2026-07-05T10:09:42Z"
},
{
"tag": "v0.8.0",
"kind": "minor",
"published_at": "2026-07-03T10:44:41Z"
},
{
"tag": "v0.7.5",
"kind": "patch",
"published_at": "2026-06-30T07:26:14Z"
},
{
"tag": "v0.7.4",
"kind": "patch",
"published_at": "2026-06-25T15:09:43Z"
},
{
"tag": "v0.7.3",
"kind": "patch",
"published_at": "2026-06-23T00:42:01Z"
},
{
"tag": "v0.7.2",
"kind": "patch",
"published_at": "2026-06-21T14:47:41Z"
},
{
"tag": "v0.7.1",
"kind": "patch",
"published_at": "2026-06-20T14:25:06Z"
},
{
"tag": "v0.7.0",
"kind": "minor",
"published_at": "2026-06-17T06:44:35Z"
},
{
"tag": "v0.6.4",
"kind": "patch",
"published_at": "2026-06-10T04:47:43Z"
},
{
"tag": "v0.6.3",
"kind": "patch",
"published_at": "2026-06-05T03:34:43Z"
},
{
"tag": "v0.6.2",
"kind": "patch",
"published_at": "2026-06-04T07:48:56Z"
},
{
"tag": "v0.6.1",
"kind": "patch",
"published_at": "2026-06-03T00:54:10Z"
},
{
"tag": "v0.6.0",
"kind": "minor",
"published_at": "2026-06-02T00:01:08Z"
},
{
"tag": "v0.5.8",
"kind": "patch",
"published_at": "2026-05-27T15:24:56Z"
},
{
"tag": "v0.5.7",
"kind": "patch",
"published_at": "2026-05-11T02:00:05Z"
},
{
"tag": "v0.5.6",
"kind": "patch",
"published_at": "2026-04-27T14:57:49Z"
},
{
"tag": "v0.5.5",
"kind": "patch",
"published_at": "2026-04-16T15:29:46Z"
},
{
"tag": "v0.5.4",
"kind": "patch",
"published_at": "2026-04-12T14:26:57Z"
},
{
"tag": "v0.5.3",
"kind": "patch",
"published_at": "2026-04-05T13:26:49Z"
},
{
"tag": "v0.5.2",
"kind": "patch",
"published_at": "2026-04-04T07:30:56Z"
},
{
"tag": "v0.5.1",
"kind": "patch",
"published_at": "2026-04-02T06:50:21Z"
},
{
"tag": "v0.5.0",
"kind": "minor",
"published_at": "2026-04-01T15:53:27Z"
},
{
"tag": "v0.4.16",
"kind": "patch",
"published_at": "2026-03-31T22:57:37Z"
},
{
"tag": "v0.4.15",
"kind": "patch",
"published_at": "2026-03-31T01:41:46Z"
},
{
"tag": "v0.4.14",
"kind": "patch",
"published_at": "2026-03-29T01:36:17Z"
},
{
"tag": "v0.4.13",
"kind": "patch",
"published_at": "2026-03-27T16:27:14Z"
},
{
"tag": "v0.4.12",
"kind": "patch",
"published_at": "2026-03-24T07:02:12Z"
},
{
"tag": "v0.4.11",
"kind": "patch",
"published_at": "2026-03-21T03:14:39Z"
},
{
"tag": "v0.4.10",
"kind": "patch",
"published_at": "2026-03-18T16:17:51Z"
},
{
"tag": "v0.4.9",
"kind": "patch",
"published_at": "2026-03-16T13:36:51Z"
},
{
"tag": "v0.4.8",
"kind": "patch",
"published_at": "2026-03-14T02:08:56Z"
},
{
"tag": "v0.4.7",
"kind": "patch",
"published_at": "2026-03-13T04:17:54Z"
},
{
"tag": "v0.4.6",
"kind": "patch",
"published_at": "2026-03-11T09:37:08Z"
},
{
"tag": "v0.4.5",
"kind": "patch",
"published_at": "2026-03-10T14:40:21Z"
},
{
"tag": "v0.4.4",
"kind": "patch",
"published_at": "2026-03-09T22:09:35Z"
},
{
"tag": "v0.4.3",
"kind": "patch",
"published_at": "2026-03-08T14:46:45Z"
},
{
"tag": "v0.4.2",
"kind": "patch",
"published_at": "2026-03-08T14:14:28Z"
},
{
"tag": "v0.4.1",
"kind": "patch",
"published_at": "2026-03-06T02:12:59Z"
},
{
"tag": "v0.4.0",
"kind": "minor",
"published_at": "2026-03-04T23:42:16Z"
},
{
"tag": "v0.3.6",
"kind": "patch",
"published_at": "2026-03-03T03:38:27Z"
},
{
"tag": "v0.3.5",
"kind": "patch",
"published_at": "2026-03-01T12:55:24Z"
},
{
"tag": "v0.3.4",
"kind": "patch",
"published_at": "2026-02-28T02:52:56Z"
},
{
"tag": "v0.3.3",
"kind": "patch",
"published_at": "2026-02-26T12:25:46Z"
},
{
"tag": "v0.3.2",
"kind": "patch",
"published_at": "2026-02-24T13:42:57Z"
},
{
"tag": "v0.3.1",
"kind": "patch",
"published_at": "2026-02-23T03:07:57Z"
},
{
"tag": "v0.3.0",
"kind": "minor",
"published_at": "2026-02-22T15:05:05Z"
},
{
"tag": "v0.2.13",
"kind": "patch",
"published_at": "2026-02-20T13:42:05Z"
},
{
"tag": "v0.2.12",
"kind": "patch",
"published_at": "2026-02-20T04:25:39Z"
},
{
"tag": "v0.2.11",
"kind": "patch",
"published_at": "2026-02-19T03:51:17Z"
},
{
"tag": "v0.2.10",
"kind": "patch",
"published_at": "2026-02-17T05:01:25Z"
},
{
"tag": "v0.2.9",
"kind": "patch",
"published_at": "2026-02-15T05:10:24Z"
},
{
"tag": "v0.2.8",
"kind": "patch",
"published_at": "2026-02-14T14:55:20Z"
},
{
"tag": "v0.2.7",
"kind": "patch",
"published_at": "2026-02-14T11:00:30Z"
},
{
"tag": "v0.2.6",
"kind": "patch",
"published_at": "2026-02-14T02:00:27Z"
},
{
"tag": "v0.2.5",
"kind": "patch",
"published_at": "2026-02-14T00:16:21Z"
},
{
"tag": "v0.2.4",
"kind": "patch",
"published_at": "2026-02-13T14:10:30Z"
},
{
"tag": "v0.2.3",
"kind": "patch",
"published_at": "2026-02-12T15:23:30Z"
},
{
"tag": "v0.2.2",
"kind": "patch",
"published_at": "2026-02-10T08:54:12Z"
},
{
"tag": "v0.2.1",
"kind": "patch",
"published_at": "2026-02-09T23:00:18Z"
},
{
"tag": "v0.2.0",
"kind": "minor",
"published_at": "2026-02-08T08:24:27Z"
},
{
"tag": "v0.1.12",
"kind": "patch",
"published_at": "2026-02-04T07:00:11Z"
},
{
"tag": "v0.1.11",
"kind": "patch",
"published_at": "2026-02-03T16:39:26Z"
},
{
"tag": "v0.1.10",
"kind": "patch",
"published_at": "2026-02-02T06:20:18Z"
},
{
"tag": "v0.1.9",
"kind": "patch",
"published_at": "2026-02-02T02:29:30Z"
},
{
"tag": "v0.1.8",
"kind": "patch",
"published_at": "2026-02-02T01:57:40Z"
},
{
"tag": "v0.1.7",
"kind": "patch",
"published_at": "2026-02-01T23:38:17Z"
},
{
"tag": "v0.1.6",
"kind": "patch",
"published_at": "2026-02-01T15:35:34Z"
},
{
"tag": "v0.1.5",
"kind": "patch",
"published_at": "2026-01-31T17:19:00Z"
},
{
"tag": "v0.1.4",
"kind": "patch",
"published_at": "2026-01-31T17:08:51Z"
},
{
"tag": "v0.1.3",
"kind": "patch",
"published_at": "2026-01-31T16:57:36Z"
},
{
"tag": "v0.1.2",
"kind": "patch",
"published_at": "2026-01-31T16:12:04Z"
},
{
"tag": "v0.1.1",
"kind": "patch",
"published_at": "2026-01-31T15:56:04Z"
},
{
"tag": "v0.1.0",
"kind": "minor",
"published_at": "2026-01-30T01:23:40Z"
}
],
"recent_commits": [
{
"oid": "ad1579473c98b0b9268c0be2f68b10726f9fa1ec",
"body": "Refs #1410",
"is_bot": false,
"headline": "release: v0.11.4 (#1412)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-20T00:33:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0364d0530274f6ef3f8fc3ed5d2c43fcf4780b69",
"body": "* feat(files): スマホ版でファイルをダウンロード可能に(attachment配信+FileViewer DL導線)(#1024) (#1025)\n\nスマホ版のファイルビューア(FileViewer, Issue #438 でモバイル専用化)から\n任意種別のファイルをダウンロードできるようにする。\n\n- B(サーバ): files/[...path] GET に download 分岐を追加し、生バイトを\n Content-Type: application/octet-stream + Content-Disposition: attachment で返却。\n filenam\n[…]\n鍵)は非ログ\n- プロンプト検出/セッション完了時に response-checker からファンアウト(検出ロジックは不変・fire-and-forget)\n- 購読登録/解除/種別設定/VAPID公開鍵の認証必須API(グローバルmiddleware配下)\n- Service Worker に push/notificationclick ハンドラ(該当worktreeへdeep link・…",
"is_bot": false,
"headline": "release: v0.11.3 (#1409)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-19T15:15:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5bc7f3353535d7ba773e13801bff1f3fddc548b3",
"body": "* feat(files): スマホ版でファイルをダウンロード可能に(attachment配信+FileViewer DL導線)(#1024) (#1025)\n\nスマホ版のファイルビューア(FileViewer, Issue #438 でモバイル専用化)から\n任意種別のファイルをダウンロードできるようにする。\n\n- B(サーバ): files/[...path] GET に download 分岐を追加し、生バイトを\n Content-Type: application/octet-stream + Content-Disposition: attachment で返却。\n filenam\n[…]\n鍵)は非ログ\n- プロンプト検出/セッション完了時に response-checker からファンアウト(検出ロジックは不変・fire-and-forget)\n- 購読登録/解除/種別設定/VAPID公開鍵の認証必須API(グローバルmiddleware配下)\n- Service Worker に push/notificationclick ハンドラ(該当worktreeへdeep link・…",
"is_bot": false,
"headline": "release: v0.11.2 (#1406)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-19T04:23:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e74c4a0e085538c86d1ada3b8885b7e9e6810343",
"body": "* feat(files): スマホ版でファイルをダウンロード可能に(attachment配信+FileViewer DL導線)(#1024) (#1025)\n\nスマホ版のファイルビューア(FileViewer, Issue #438 でモバイル専用化)から\n任意種別のファイルをダウンロードできるようにする。\n\n- B(サーバ): files/[...path] GET に download 分岐を追加し、生バイトを\n Content-Type: application/octet-stream + Content-Disposition: attachment で返却。\n filenam\n[…]\n鍵)は非ログ\n- プロンプト検出/セッション完了時に response-checker からファンアウト(検出ロジックは不変・fire-and-forget)\n- 購読登録/解除/種別設定/VAPID公開鍵の認証必須API(グローバルmiddleware配下)\n- Service Worker に push/notificationclick ハンドラ(該当worktreeへdeep link・…",
"is_bot": false,
"headline": "release: v0.11.1 (#1403)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-18T16:29:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b8331343387ffa8e2da4663b3234dc9ca553d41d",
"body": "npx 起動サーバの GUI アップデート対応(#1394 fix + #1395 feat)をまとめた minor リリース。詳細は PR #1398 / CHANGELOG 参照。",
"is_bot": false,
"headline": "release: v0.11.0 (#1398)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-18T06:38:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f7d6c993219c56e16b2ece11fe3049c96e83115",
"body": "* feat(files): スマホ版でファイルをダウンロード可能に(attachment配信+FileViewer DL導線)(#1024) (#1025)\n\nスマホ版のファイルビューア(FileViewer, Issue #438 でモバイル専用化)から\n任意種別のファイルをダウンロードできるようにする。\n\n- B(サーバ): files/[...path] GET に download 分岐を追加し、生バイトを\n Content-Type: application/octet-stream + Content-Disposition: attachment で返却。\n filenam\n[…]\n鍵)は非ログ\n- プロンプト検出/セッション完了時に response-checker からファンアウト(検出ロジックは不変・fire-and-forget)\n- 購読登録/解除/種別設定/VAPID公開鍵の認証必須API(グローバルmiddleware配下)\n- Service Worker に push/notificationclick ハンドラ(該当worktreeへdeep link・…",
"is_bot": false,
"headline": "release: v0.10.4 (#1393)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-18T01:45:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8fa53e2a9c7ece9711518c56a1b82f17332f2df3",
"body": "* feat(files): スマホ版でファイルをダウンロード可能に(attachment配信+FileViewer DL導線)(#1024) (#1025)\n\nスマホ版のファイルビューア(FileViewer, Issue #438 でモバイル専用化)から\n任意種別のファイルをダウンロードできるようにする。\n\n- B(サーバ): files/[...path] GET に download 分岐を追加し、生バイトを\n Content-Type: application/octet-stream + Content-Disposition: attachment で返却。\n filenam\n[…]\n鍵)は非ログ\n- プロンプト検出/セッション完了時に response-checker からファンアウト(検出ロジックは不変・fire-and-forget)\n- 購読登録/解除/種別設定/VAPID公開鍵の認証必須API(グローバルmiddleware配下)\n- Service Worker に push/notificationclick ハンドラ(該当worktreeへdeep link・…",
"is_bot": false,
"headline": "release: v0.10.3 (#1336)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-17T07:46:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6b33fa354256d9c0b150f3d224ccca870493c6de",
"body": "* feat(files): スマホ版でファイルをダウンロード可能に(attachment配信+FileViewer DL導線)(#1024) (#1025)\n\nスマホ版のファイルビューア(FileViewer, Issue #438 でモバイル専用化)から\n任意種別のファイルをダウンロードできるようにする。\n\n- B(サーバ): files/[...path] GET に download 分岐を追加し、生バイトを\n Content-Type: application/octet-stream + Content-Disposition: attachment で返却。\n filenam\n[…]\n鍵)は非ログ\n- プロンプト検出/セッション完了時に response-checker からファンアウト(検出ロジックは不変・fire-and-forget)\n- 購読登録/解除/種別設定/VAPID公開鍵の認証必須API(グローバルmiddleware配下)\n- Service Worker に push/notificationclick ハンドラ(該当worktreeへdeep link・…",
"is_bot": false,
"headline": "release: v0.10.2 (#1333)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-17T05:55:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7edcb567ec1a85c4201604eb05fa00f30f20f9fa",
"body": "* feat(files): スマホ版でファイルをダウンロード可能に(attachment配信+FileViewer DL導線)(#1024) (#1025)\n\nスマホ版のファイルビューア(FileViewer, Issue #438 でモバイル専用化)から\n任意種別のファイルをダウンロードできるようにする。\n\n- B(サーバ): files/[...path] GET に download 分岐を追加し、生バイトを\n Content-Type: application/octet-stream + Content-Disposition: attachment で返却。\n filenam\n[…]\n鍵)は非ログ\n- プロンプト検出/セッション完了時に response-checker からファンアウト(検出ロジックは不変・fire-and-forget)\n- 購読登録/解除/種別設定/VAPID公開鍵の認証必須API(グローバルmiddleware配下)\n- Service Worker に push/notificationclick ハンドラ(該当worktreeへdeep link・…",
"is_bot": false,
"headline": "release: v0.10.1 (#1325)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-17T00:58:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e568c655c9922d16ffec847bc0a74adacce1961f",
"body": "* feat(files): スマホ版でファイルをダウンロード可能に(attachment配信+FileViewer DL導線)(#1024) (#1025)\n\nスマホ版のファイルビューア(FileViewer, Issue #438 でモバイル専用化)から\n任意種別のファイルをダウンロードできるようにする。\n\n- B(サーバ): files/[...path] GET に download 分岐を追加し、生バイトを\n Content-Type: application/octet-stream + Content-Disposition: attachment で返却。\n filenam\n[…]\n鍵)は非ログ\n- プロンプト検出/セッション完了時に response-checker からファンアウト(検出ロジックは不変・fire-and-forget)\n- 購読登録/解除/種別設定/VAPID公開鍵の認証必須API(グローバルmiddleware配下)\n- Service Worker に push/notificationclick ハンドラ(該当worktreeへdeep link・…",
"is_bot": false,
"headline": "release: v0.10.0 (#1314)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-16T14:10:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ebbbed5f05171868d50d59e3dbad579db7fabc6e",
"body": "chore: release v0.9.1",
"is_bot": false,
"headline": "release: v0.9.1 (#1202)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-15T08:50:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5847d674eeea3642c476681a2f756bd2c2dc95d1",
"body": null,
"is_bot": false,
"headline": "chore: release v0.9.1",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-07-15T08:39:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1ecf027ec6812d8c250ad65c25b006019034542a",
"body": "… E2EのCI組込み #1180 / ちらつき解消 #1184) (#1191)\n\n* feat(files): スマホ版でファイルをダウンロード可能に(attachment配信+FileViewer DL導線)(#1024) (#1025)\n\nスマホ版のファイルビューア(FileViewer, Issue #438 でモバイル専用化)から\n任意種別のファイルをダウンロードできるようにする。\n\n- B(サーバ): files/[...path] GET に download 分岐を追加し、生バイトを\n Content-Type: application/octet-stream + Con\n[…]\nns テーブル(migration v41)と CRUD モジュールを追加\n- VAPID/web-push 送信層: 種別フィルタ・デバウンス・410自動削除、機密(endpoint/秘密鍵)は非ログ\n- プロンプト検出/セッション完了時に response-checker からファンアウト(検出ロジックは不変・fire-and-forget)\n- 購読登録/解除/種別設定/VAPID公開鍵の…",
"is_bot": false,
"headline": "release: develop の受け入れ済み変更を main へ反映(Next15/React19/Tailwind4 #1129 /…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-15T07:50:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ec7d4c90e31aaaa77b1835f80133e244490c63ef",
"body": "chore: release v0.9.0",
"is_bot": false,
"headline": "release: v0.9.0 (#1176)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-15T01:45:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c186222b9c2a133321aeccfa6d875cbe41794a34",
"body": "The filter chips render unconditionally before the fetch resolves — only\nthe list below them is gated on isLoading — so waiting on their existence\npassed at count 0 and the count assertions raced fetch -> json -> setState\n-> re-render. React schedules that re-render through the Scheduler\n(MessageCha\n[…]\n 10ms reproduces the exact CI\nfailure (\"expected 'In Review0' to match /2/\") against the old form and\npasses 7/7 against this one.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(review): wait on data, not markup, in filter count badge test",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-07-15T01:37:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2fca15b8ffee75944c25895e992ef9eb4ccf8c1e",
"body": null,
"is_bot": false,
"headline": "chore: release v0.9.0",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-07-15T01:00:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86583cce27ad804588e1a80f1a4d07ba822dff8a",
"body": "…ターミナル・tmux安定化 / 履歴CASCADE削除修正 #1153) (#1175)\n\n* feat(files): スマホ版でファイルをダウンロード可能に(attachment配信+FileViewer DL導線)(#1024) (#1025)\n\nスマホ版のファイルビューア(FileViewer, Issue #438 でモバイル専用化)から\n任意種別のファイルをダウンロードできるようにする。\n\n- B(サーバ): files/[...path] GET に download 分岐を追加し、生バイトを\n Content-Type: application/octet-stream +\n[…]\nsh_subscriptions テーブル(migration v41)と CRUD モジュールを追加\n- VAPID/web-push 送信層: 種別フィルタ・デバウンス・410自動削除、機密(endpoint/秘密鍵)は非ログ\n- プロンプト検出/セッション完了時に response-checker からファンアウト(検出ロジックは不変・fire-and-forget)\n- 購読登録/解除/…",
"is_bot": false,
"headline": "release: develop の受け入れ済み変更を main へ反映(UI/UXモダナイゼーション #1110 Phase1-5 / …",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-15T00:49:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "eb9a89c05a9aeaf8420f430f435b946d240bb366",
"body": "…61 / integration復旧 #1102 / bug #1104) (#1106)\n\n* feat(files): スマホ版でファイルをダウンロード可能に(attachment配信+FileViewer DL導線)(#1024) (#1025)\n\nスマホ版のファイルビューア(FileViewer, Issue #438 でモバイル専用化)から\n任意種別のファイルをダウンロードできるようにする。\n\n- B(サーバ): files/[...path] GET に download 分岐を追加し、生バイトを\n Content-Type: application/octet-stream \n[…]\nplicate name テストを un-skip(#1104 で修正済み)\n\n---------\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: develop の受け入れ済み変更を main へ反映(UIモダン化2段階 #1041-1082 / 生UI移行 #10…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-13T14:10:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2bfbfab15ce5ca3864a829b029a4f5f7f10dacd4",
"body": "release: v0.8.4",
"is_bot": false,
"headline": "Merge pull request #1039 from Kewton/release/v0.8.4",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-10T09:27:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ffeed4455bae4096c135ccb82181a6f8f087aef7",
"body": null,
"is_bot": false,
"headline": "chore: release v0.8.4",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-07-10T09:20:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6b9ba440cd9528698b5fceb8ad3a4e85b12e7bcd",
"body": "… 詳細・編集 / #1036 コピー) (#1038)\n\n* feat(files): スマホ版でファイルをダウンロード可能に(attachment配信+FileViewer DL導線)(#1024) (#1025)\n\nスマホ版のファイルビューア(FileViewer, Issue #438 でモバイル専用化)から\n任意種別のファイルをダウンロードできるようにする。\n\n- B(サーバ): files/[...path] GET に download 分岐を追加し、生バイトを\n Content-Type: application/octet-stream + Content-Disposit\n[…]\nト3件追加\n- migration/DB/API 変更なし(UIのみ)\n\nCloses #1036\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: develop の受け入れ済み変更を main へ反映(ブランチ単位ToDo強化: #1032 3状態化 / #1034…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-10T09:00:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "707cbc1f93b96c6a305a21e6512013c4e9d9b67b",
"body": "release: v0.8.3",
"is_bot": false,
"headline": "Merge pull request #1031 from Kewton/release/v0.8.3",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-08T16:07:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d42bd0b258fff98e5caf467ddd1646742eaf8e5f",
"body": null,
"is_bot": false,
"headline": "chore: release v0.8.3",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-07-08T15:59:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f8aec2e931bb0a131b7b024261d078929381dbc",
"body": "* feat(files): スマホ版でファイルをダウンロード可能に(attachment配信+FileViewer DL導線)(#1024) (#1025)\n\nスマホ版のファイルビューア(FileViewer, Issue #438 でモバイル専用化)から\n任意種別のファイルをダウンロードできるようにする。\n\n- B(サーバ): files/[...path] GET に download 分岐を追加し、生バイトを\n Content-Type: application/octet-stream + Content-Disposition: attachment で返却。\n filenam\n[…]\n (2引数アサート vs 3引数呼び出し)で本修正と無関係(CI の test:unit 対象外)\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: develop の受け入れ済み変更を main へ反映(#1028 Timer送信のHistory記録) (#1030)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-08T15:38:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "62c591a0b237273fbcb5f15fc4afa71dade7f396",
"body": "release: v0.8.2",
"is_bot": false,
"headline": "Merge pull request #1027 from Kewton/release/v0.8.2",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-06T05:04:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4d64818583ae84afa4f49a441cb2793a98055625",
"body": null,
"is_bot": false,
"headline": "chore: release v0.8.2",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-07-06T04:57:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "02bb34f3183076597418b249ac0a826b7b7fae56",
"body": "… (#1025) (#1026)\n\nスマホ版のファイルビューア(FileViewer, Issue #438 でモバイル専用化)から\n任意種別のファイルをダウンロードできるようにする。\n\n- B(サーバ): files/[...path] GET に download 分岐を追加し、生バイトを\n Content-Type: application/octet-stream + Content-Disposition: attachment で返却。\n filename は src/lib/http の content-disposition ヘルパーで RFC 準拠にサニタイズ\n (A\n[…]\nスト新規29本(download API のヘッダ/パス検証/filename、content-disposition\n ヘルパー、FileViewer ボタン)\n- C(独立ページのPDF分岐/DLリンク)は範囲外(モバイル動線が独立ページを使わないため)\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(files): スマホ版でファイルをダウンロード可能に(attachment配信+FileViewer DL導線)(#1024)…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-06T04:46:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "81b344ee0e3374727000a264fda06b8f05f4c102",
"body": "release: v0.8.1(ブランチ単位ToDo #1015 / Codex選択ウィンドウ #1017 / Historyヘッダー固定 #1019)",
"is_bot": false,
"headline": "Merge pull request #1023 from Kewton/release/v0.8.1",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-05T10:08:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2f54421a0d7e98219e621d570a7dd6e009001e8f",
"body": "- feat(worktree): ブランチ単位のToDoリスト (#1015)\n- fix(terminal): Codexのページャ/選択状態で選択ウィンドウ表示 (#1017)\n- fix(history): Message Historyヘッダー固定・スクロール限定 (#1019)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(release): v0.8.1",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-07-05T08:20:06Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f18a102f8ccb3c4ede4d4e10b79924634abef0f1",
"body": "History パネルが「ペイン全体が単一スクロールコンテナ + sticky ヘッダー」構造の\nため、メッセージがヘッダーの背後を通過して違和感があった。固定ヘッダー行 +\n独立スクロール領域のレイアウトに変更する。\n\n- HistoryPane: 最外層を非スクロール(flex-col overflow-hidden)化し、ヘッダー/検索\n バーを flex-shrink-0(sticky/top-0/top-12/z-10 撤去)、メッセージを新設の内側\n スクロール div(flex-1 min-h-0 overflow-y-auto overflow-x-hidden)に配置。\n\n[…]\nダー/検索バーはスクロール領域の外、メッセージは中)\n- HistoryPane は PC(TerminalSplitPaneContent)/モバイル(WorktreeDetailMobile)\n 共用のため両方のレンダーテストで検証(リグレッションなし)\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(history): Message Historyヘッダーを固定しスクロールをヘッダー下に限定 (#1019) (#1021)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-05T05:36:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3b2f3bd580cc5237a5b0baff2f772f2c057ac3e8",
"body": "History パネルが「ペイン全体が単一スクロールコンテナ + sticky ヘッダー」構造の\nため、メッセージがヘッダーの背後を通過して違和感があった。固定ヘッダー行 +\n独立スクロール領域のレイアウトに変更する。\n\n- HistoryPane: 最外層を非スクロール(flex-col overflow-hidden)化し、ヘッダー/検索\n バーを flex-shrink-0(sticky/top-0/top-12/z-10 撤去)、メッセージを新設の内側\n スクロール div(flex-1 min-h-0 overflow-y-auto overflow-x-hidden)に配置。\n\n[…]\nダー/検索バーはスクロール領域の外、メッセージは中)\n- HistoryPane は PC(TerminalSplitPaneContent)/モバイル(WorktreeDetailMobile)\n 共用のため両方のレンダーテストで検証(リグレッションなし)\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(history): Message Historyヘッダーを固定しスクロールをヘッダー下に限定 (#1019) (#1020)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-05T05:15:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "42033ab71a6541e4180859993b16cb08f0e58bc8",
"body": "…(#1018)\n\nCodex CLI がページャ/edit-previous モードのとき、選択ウィンドウ(NavigationButtons)が\n表示されず、読み取り専用ターミナルから操作・脱出できない問題を修正。複数インスタンス\n(codex-2/codex-3)がページャに滞留した際に顕在化していた。\n\n- A(検出): CODEX_PAGER_FOOTER_PATTERN 追加、status-detector にステータスバー非依存の\n ページャ検出分岐(reason=CODEX_PAGER, SELECTION_LIST_REASONS入り)。/model 等の\n \"press\n[…]\n/\n tmux-navigation / NavigationButtons / TerminalEscapeHatch / TerminalSplitPaneContent\n- B(上部インスタンスタブ↔分割セレクタ連動)は本PR対象外(別Issue推奨)\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(terminal): Codexのページャ/選択状態で選択ウィンドウ(NavigationButtons)を表示 (#1017) …",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-05T01:20:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "56f47fe37fd47fee44710d38a42ea3e4e97aa8dc",
"body": "ブランチ(worktree)単位で管理できるチェックボックス式ToDoリストを追加。\nPC版はアクティビティバー、スマホ版はTools(NotesAndLogsPane)から利用でき、\nPC/スマホで共通の TodoPane コンポーネントを共有する。\n\n- DB: worktree_todos テーブル(migration v37, worktree_id FK, ON DELETE CASCADE)\n + worktree-todo-db(CRUD)。CURRENT_SCHEMA_VERSION 36→37\n- API: /api/worktrees/[id]/todos(GET/POS\n[…]\nb ラベル(parity テスト付き)\n- 既存のリポジトリ単位ToDo(repository_todos)とは独立して併存\n- テスト新規6本(DB / API / TodoPane / migration v37 / i18n parity / 既存追随)\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(worktree): ブランチ単位のToDoリスト(PC=アクティビティバー / スマホ=Tools)(#1015) (#1016)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-04T08:16:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "90c4b77a6b054110aa903c046a83adc3704d7f3d",
"body": null,
"is_bot": false,
"headline": "chore: merge release v0.8.0 to develop",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-07-03T10:44:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0cb49a9de296166260865df074f5f6c6ba3bf679",
"body": "release: v0.8.0",
"is_bot": false,
"headline": "Merge pull request #1013 from Kewton/release/v0.8.0",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-03T10:44:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3d5f2d4bcb4388d5bb1d6caa60e8aec14c3b8e31",
"body": null,
"is_bot": false,
"headline": "chore: release v0.8.0",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-07-03T10:37:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e000567f8b4f850452ef38a64faf3e1c08a5d75d",
"body": "…rkdown TOC 他) (#1012)\n\n* feat(files): toggleable file-tree metadata columns + hover tooltip (#969) (#972)\n\nPreviously each file row always rendered size and a relative birthtime\ninline, crowding the file name. This makes the inline metadata columns\n(size / created / modified) individually toggleabl\n[…]\nスの fireResize(500) -> fireResize(400)(新しきい値480未満)\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: develop の受け入れ済み変更を main へ反映(Antigravity対応 / CLIマルチセッション / Ma…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-03T10:03:20Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ced6c934bfd4971f389a4fbab942d2bb86a151d2",
"body": null,
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/main' into develop",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-07-03T09:52:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c0d80d60577359b4cc0f21dbe7f6a4c7d4b23ce1",
"body": "worktree詳細ページのインラインプレビューペインは既定の複数パネルレイアウトで\n約551px幅となり、従来のTOC表示しきい値640pxでは目次サイドバーが常に自動非表示に\nなっていた。しきい値を480pxへ下げ、サイドバーをw-56→w-48に縮小して本文の可読幅を\n確保することで、全画面化しなくても詳細ページのインラインプレビューで目次を表示できる\nようにする。\n\n- TOC_SIDEBAR_MIN_WIDTH_PX: 640 -> 480\n- TOCサイドバー幅: w-56(224px) -> w-48(192px)\n- テスト: 狭幅ケースの fireResize(500) -> fireResize(400)(新しきい値480未満)\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(ui): インラインMarkdownプレビューのTOC表示しきい値を480pxに調整 (#1009) (#1011)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-02T08:04:57Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f6b22f637eb282e627919db62135892bcd2c3a0d",
"body": "MarkdownPreview に rehype-slug を rehype-sanitize 後段で適用して見出しへ\nプレーンな id を付与し、MarkdownToc に root prop を追加してプレビュー\nペイン内のスクロールコンテナを基準にスクロールスパイできるようにした。\nMarkdownEditor のプレビューペインに ResizeObserver でコンテナ幅を判定\nする TOC サイドバー+トグルを追加し、表示状態は #1007 と同じ\nlocalStorage キー(commandmate:md-toc-visible)で共有する。\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(ui): worktree詳細ページのインラインMarkdownプレビューにサイドTOCを追加 (#1009) (#1010)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-02T07:48:27Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a1750ff116b641042c6dd2f5aa450ec58b394b56",
"body": "独立ファイルビューワーページ (src/app/worktrees/[id]/files/[...path]/page.tsx)\nのマークダウン表示にサイド TOC(目次)を PC 幅限定で追加する。\n\n- rehype-slug@^6 / github-slugger@^2 を導入し、見出しに id を付与\n- extractToc 純粋関数 (src/lib/markdown-toc.ts): ATX 見出しを抽出し\n github-slugger で rehype-slug と完全一致する id を生成\n (フェンス/インデントコード除外・ATX 制約・重複 suffix 対応、se\n[…]\n追加: extractToc(rehype-slug 実パイプラインとの id 一致検証含む)/\n MarkdownToc(jsdom + IntersectionObserver/scrollIntoView モック)/ toc.* i18n parity\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(ui): PC版マークダウンビューワーにサイドTOC(目次)を追加 (#1007) (#1008)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-02T05:15:39Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9b9acc5a9c2742f78be9327f9216911ff5e57ddf",
"body": "同一ブランチ名(develop等)が複数リポジトリに存在する環境で、worktree ID\nの前方一致により特定リポジトリの worktree を一意に絞り込めるようにする。\n既存の --branch フィルタと独立した AND 条件として適用可能。\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(cli): ls --id <prefix> で worktree ID 前方一致フィルタを追加 (#1005) (#1006)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-02T04:13:08Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "108c1926f0105ccacb33c043847a5edb7554ddb5",
"body": "worktrees テーブルに branch カラムを追加し、sync 時に実ブランチ名を\n保存・API/型で伝播する方針A を採用。ls --branch フィルタを name\n直接参照から (wt.branch ?? wt.name) の前方一致へ変更する。\n\n- v36 マイグレーション追加 (ALTER TABLE worktrees ADD COLUMN branch)\n - migrations/index.ts へ登録、CURRENT_SCHEMA_VERSION 35→36\n- Worktree / WorktreeItem 型に branch?: string を追加\n \n[…]\nィルタを branch 優先・name フォールバックに変更(後方互換)\n- テスト追加: v36 冪等/無損失、worktree-db round-trip、API branch 返却、\n ls --branch (branch != name) フィルタ\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(cli): ls --branch を実ブランチ名で絞り込む (#1003) (#1004)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-02T03:13:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4ec5645ddcf841e0456f3a2f3cd34d4a76a90d17",
"body": "- commandmate instances サブコマンドで roster + 稼働状況を一覧・add/remove/alias/kill 操作可能に\n- send --instance --register でアドホックセッションを roster に自動登録\n- ApiClient に PATCH サポートを追加、agentInstances を型定義(ls --json 含む)\n- 埋め込みdocs/user-guideにマルチセッション節を追加、--instance のヘルプにID規約例を追記",
"is_bot": false,
"headline": "feat(cli): 1エージェント複数セッションのCLI管理・ドキュメント整備 (#1000) (#1002)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-01T16:36:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "af945d4dee03adc3296642bc903353904a36c2f5",
"body": "…) (#1001)\n\nAuto-Yes never answered agy's \"Do you want to proceed?\" permission menu:\nthe poller ran (poller:started x4) but sent nothing (response-sent x0).\nTwo gaps, both fixed:\n\n1. Detection: buildDetectPromptOptions('antigravity') returned undefined\n (requireDefaultIndicator=true). agy highligh\n[…]\nr => \"1\"; sendPromptAnswer uses cursor nav (Enter / Down+Enter)\nfor antigravity. Other tools' detection and sending are unchanged.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(auto-yes): respond to Antigravity permission-approval menus (#999…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-01T16:15:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0cd6d7e55114013cd9455243a426fe619763634f",
"body": "…ermission-approval menu (#997) (#998)\n\nRelax ANTIGRAVITY_SELECTION_LIST_PATTERN (Option A) so the \"↑/↓ Navigate\"\nfooter alone is sufficient, dropping the \"enter Select\" requirement from #995.\nThe agy \"Do you want to proceed?\" permission-approval menu footer is\n\"↑/↓ Navigate · tab Amend · ctrl+g … ·\n[…]\ntion tests for the permission menu at\nboth the pattern and status-detector layers, including the thinking-priority\nordering guard.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(detection): broaden Antigravity selection-list pattern to cover p…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-01T11:29:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ced3b923875bfb64d68110b609021c5fd3c27705",
"body": "* feat(files): toggleable file-tree metadata columns + hover tooltip (#969) (#972)\n\nPreviously each file row always rendered size and a relative birthtime\ninline, crowding the file name. This makes the inline metadata columns\n(size / created / modified) individually toggleable and persisted, and\nadd\n[…]\n the pattern and the thinking-collision ordering.\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(agent): Antigravity CLI(agy)対応(Phase A/B/C)を main へ反映 (#994)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-01T06:45:22Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1d3ff44ee458971be9ceeffbde1c675adc113512",
"body": "…ttons show (#995) (#996)\n\nagy's \"Switch Model\" (and other) selection TUIs render an \"esc to cancel\"\nfooter that ANTIGRAVITY_THINKING_PATTERN also matches, so the selection\nscreen was misreported as running/thinking and NavigationButtons never\nappeared — leaving ↑↓/Enter model selection unreachable.\n[…]\nrroring the Copilot (0) / Codex (0.8) early-detection ordering.\n\nUnit tests cover the pattern and the thinking-collision ordering.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(detection): detect Antigravity selection-list TUI so NavigationBu…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-01T05:55:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6c1f2c0cde1e59033128acd2c60f064117caa455",
"body": "… C, #990) (#992)\n\nIntegrate Antigravity (`agy -p`) into all non-interactive execution paths,\nmirroring the existing claude/codex handling.\n\nAssistant Chat (non-interactive):\n- AssistantChatPanel: add antigravity to ASSISTANT_ALLOWED_TOOLS\n- tool-capabilities: add antigravity to NON_INTERACTIVE_TOOL\n[…]\n tool-capabilities, executor, report --tool, review-config,\nstandard-commands. Updated docs/module-reference.md. All 4 gates pass.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(agent): add Antigravity (agy) non-interactive integration (Phase…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-01T02:31:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "252d16db151472f07c53c490a663f958b83f7c4d",
"body": "…989) (#993)\n\nAdds Auto-Yes (--dangerously-skip-permissions) and --model support for the\nAntigravity (agy) CLI tool introduced in Phase A (#988), bringing it to\nfeature parity with other agents.\n\n- schedule-config/cmate-parser/cmate-validator: antigravity permission\n handling for the CMATE.md sched\n[…]\n_AGENTS 5->6, antigravity added\n to DEFAULT_SELECTED_AGENTS\n- CLI help text updated across send/respond/capture/auto-yes commands\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(agent): add Antigravity Auto-Yes and model selection (Phase B, #…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-07-01T02:30:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "074e36d60b205b5a8cc2e9b685ba53c2ee331272",
"body": "Register the Antigravity `agy` CLI (v1.0.14) as a selectable agent.\n\n- types/index/manager: add 'antigravity' to CLI_TOOL_IDS, the\n 'Antigravity' display name, and register AntigravityTool.\n- cli-tools/antigravity.ts: new AntigravityTool. agy is an INLINE TUI\n (scrollback retained, Codex-style — n\n[…]\n from source. Scope is Phase A (MVP) only: permission flags,\nmodel selection, and non-interactive `agy -p` are tracked separately.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(agent): add Antigravity (agy) CLI support (Phase A, #988) (#991)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-30T16:12:24Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "abb6216d093fd160d5ab76a8677816cc71644e3e",
"body": null,
"is_bot": false,
"headline": "chore: merge release v0.7.5 to develop",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-06-30T07:26:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "74c8bc1cc21b7a036cde6e9bca32e2b72fd2e1fa",
"body": "release: v0.7.5",
"is_bot": false,
"headline": "Merge pull request #986 from Kewton/release/v0.7.5",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-30T07:25:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "033e1f905b88a3df3696e8028f68af1f63ee727c",
"body": null,
"is_bot": false,
"headline": "chore: release v0.7.5",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-06-30T07:17:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a32bab6e83564a829d92032a89f2c902bd13cc68",
"body": "* feat(files): toggleable file-tree metadata columns + hover tooltip (#969) (#972)\n\nPreviously each file row always rendered size and a relative birthtime\ninline, crowding the file name. This makes the inline metadata columns\n(size / created / modified) individually toggleable and persisted, and\nadd\n[…]\nnd mermaid diagrams stay button-free.\n\nFixes #983\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": "chore: v0.7.4以降のUI改善・不具合修正を main へ反映 (#985)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-30T07:10:33Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c5975a6e7e019d874405ef9a395fc43b881218a7",
"body": "…de (#984)\n\nreact-markdown v10 no longer passes an `inline` prop to the `code`\ncomponent, so MermaidCodeBlock's inline check was always undefined. Every\ninline code span fell through to CodeBlockWithCopy, gaining a copy button\nand being forced onto its own line via the `as=\"span\"` block class.\n\nMove\n[…]\no line\nbreak, fenced blocks (with and without a language) get a working button,\nand mermaid diagrams stay button-free.\n\nFixes #983\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(markdown): attach code copy button at pre renderer, not inline co…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-29T14:06:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "247d9e4425e0c4f823b9ba54422ab764421a0146",
"body": "…982)\n\nAdds a copy-to-clipboard button to each non-mermaid code block in the\nmarkdown file preview render paths (PC + mobile).\n\n- Extract CopyButton into src/components/common/CopyButton.tsx, reused\n by AssistantMessageList (behavior unchanged) and the new wrapper.\n- Add CodeBlockWithCopy that wrap\n[…]\nsanitize cannot drop it.\n- Add unit tests for CopyButton, CodeBlockWithCopy/extractCodeText, and\n MermaidCodeBlock copy behavior.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(markdown): add copy button to file-preview code blocks (#981) (#…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-29T12:20:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fcebd67b3b4e4d8a2ed9c37bc779d999e20e7e4e",
"body": "…t/Equal widths/History/Files order (#977) (#980)\n\nRemove the `ml-auto` on the +Split button (which split the action bar into\nleft/right groups) and reorder the JSX so all buttons read left-to-right:\n+Split → -Split → Equal widths → History → Files. PC-only change\n(TerminalSplitContainer is rendered\n[…]\nes are unaffected. Button behavior, enabled/disabled conditions, and aria\nstate are unchanged. Adds order-verification unit tests.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(terminal): left-align PC terminal header buttons in +Split/-Spli…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-29T09:57:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "823e0c9d59c35702dd8b74827f748bcda574f0d5",
"body": "…r overlap (#976) (#979)\n\nWhen the sidebar is narrowed, the header's heading + action button group\n(ViewModeToggle / SortSelector / SyncButton / Repositories) overflowed\nhorizontally and overlapped the adjacent ActivityBar because the row was\nflex-nowrap with the default overflow:visible.\n\n- Sidebar\n[…]\nown.\n- tests: add 3 cases asserting flex-wrap on the header row and actions\n group, and min-w-0/truncate on the Branches heading.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(sidebar): wrap header buttons on narrow width to avoid ActivityBa…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-29T09:57:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e6275707196c1300a9f4d8881856ac9455bf8463",
"body": "…5) (#978)\n\nMerge the two independent file-row tooltips into a single styled bubble.\nPreviously a native `title` metadata tooltip (#969) and the custom name\nTruncationTooltip (#859) appeared separately, with different delays\n(~0.5-1s native vs 200ms custom) and styling.\n\n- TruncationTooltip: add opt\n[…]\nance criterion).\n- Sidebar usage is unaffected (the new prop is optional/additive).\n- Tests updated for the unified hover tooltip.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(files): unify file-tree tooltips into one (metadata + name) (#97…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-29T09:57:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "320335a0413cb2f383ac7294b400ed85d98174d5",
"body": "…p (#971) (#974)\n\nEliminate the sidebar's horizontal scrollbar caused by long repository\nnames overflowing the group header. Make the group header a min-w-0 flex\ncontainer so the existing truncate takes effect, wrap the repository name\nin TruncationTooltip to show the full name on hover only when cl\n[…]\nden to the branch list as a\nsafeguard, and constrain the DnD sortable wrapper with w-full min-w-0 to\nprevent overflow during drag.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(sidebar): remove horizontal scrollbar via truncate + hover toolti…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-29T00:51:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b24041630d7336867912927e4720b0e8ae857b02",
"body": "worktree 詳細画面の 4 つのドラッグ可能な仕切り(PaneResizer)が太く・濃く\n見える問題を解消する。共通コンポーネント 1 ファイルの修正で全境界に反映。\n\n- 線色を bg-gray-700 から bg-gray-200 dark:bg-gray-700 へ変更し、固定パネル\n 枠線と同色の控えめな 1px 線にする\n- ホバー時の線幅拡大(hover:w-2 / hover:h-2)を削除。常時 1px を維持し、\n ホバー/フォーカス時のみアクセント色(cyan-500)を表示\n- darkMode: 'class' では base の dark:bg-gray-\n[…]\ncus:ring-offset-white dark:...gray-900)\n- ドラッグ中のみ線幅拡大 + accent をライブフィードバックとして維持\n\nPaneResizer の単体テストに VS Code 風細線の挙動を固定する 6 ケースを追加。\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(ui): make PaneResizer dividers VS Code-style thin (#970) (#973)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-29T00:51:48Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a6604986e533aae0ab2d7bc76d119b939889bd26",
"body": "…969) (#972)\n\nPreviously each file row always rendered size and a relative birthtime\ninline, crowding the file name. This makes the inline metadata columns\n(size / created / modified) individually toggleable and persisted, and\nadds a formatted, locale-aware hover tooltip so timestamps stay\naccessibl\n[…]\nrings (parity)\n- tests: mtime backend, hook persistence/sync, TreeNode conditional\n render + tooltip, FileTreeView toolbar toggle\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(files): toggleable file-tree metadata columns + hover tooltip (#…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-29T00:51:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5cfb088940f56064651009de053dcab5cbdcce64",
"body": null,
"is_bot": false,
"headline": "chore: merge release v0.7.4 to develop",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-06-25T15:09:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "53eedd41e4b0696de5c5ba1fd9b8ad594ac9328d",
"body": "release: v0.7.4",
"is_bot": false,
"headline": "release: v0.7.4 (#968)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-25T15:09:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "621681f948e99439ee7b3bf47b5fd4bd3e9ebbec",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: release v0.7.4",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-06-25T15:01:05Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ad18e577d75bae7cade2b448f3b89768bf8de446",
"body": "4 perf quick-wins to reduce sidebar-click -> detail render latency:\n\n1. WorktreeSelectionContext: stale-while-revalidate. SELECT_WORKTREE seeds the\n detail pane from the already-loaded list cache and only shows the loading\n state on a cache miss; getById() overwrites with fresh detail in backgro\n[…]\n instead of after it; session detection still chains off listSessions().\n4. tmux-capture-cache: extend CACHE_TTL_MS 3000 -> 5000.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "perf(worktree): speed up sidebar click to detail view (#965) (#967)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-25T14:11:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "36e77825e9532b47d8bf454754948aa6b9be51ac",
"body": "Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(worktree): hide mobile agent tab header scrollbar (#964) (#966)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-25T14:06:57Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6862709b40ac938882ee8b4f09c0c3b5d250b54e",
"body": "…tool (#960) (#963)\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(worktree): resolve mobile agent status per instance, not per CLI …",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-24T15:01:55Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6a8f104b20151376ff9260eebd82c4a0351e84f8",
"body": "Auto-Yes stayed enabled for one extra polling tick after the countdown\nreached 00:00 because expiry used a strict `>` (now > expiresAt) while the\ndisplay clamps to 0 at now === expiresAt.\n\n- auto-yes-state: isAutoYesExpired now uses `>=` so the state expires at the\n exact instant the countdown show\n[…]\ne and component tests for the zero-countdown UI behaviour;\n correct the prior exact-expiry assertion that encoded the off-by-one.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(auto-yes): disable exactly when countdown reaches zero (#959) (#962)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-24T14:53:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "438efe399b4e5fcb3fce1bebbaaf0661715cbc11",
"body": "…#958) (#961)\n\nMobile header now pins the Auto Yes toggle on the left and the search +\nEnd (kill session) buttons on the right, with the agent instance tabs in\na horizontally scrollable middle region. Previously the right cluster\nheld both the tabs and the End button without overflow handling, so 3+\n[…]\nr-thin\n- Each tab button gets flex-shrink-0 whitespace-nowrap\n- Search + End buttons split into a right-pinned flex-shrink-0 group\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(worktree): make mobile agent tab header horizontally scrollable (…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-24T14:49:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f9823c9655e0edfd70a47e3b741bb9dc95169530",
"body": "…56) (#957)\n\nセッションクローズ確認ダイアログ(ヘッダーの「✕ End」)のタイトルが、\nインスタンスに付与したエイリアス(別名)ではなく CLI ツール名(Claude/Codex)\nを表示していた問題を修正。\n\n- 新規 getActiveInstanceLabel() を追加(cli-tools/types.ts)。activeInstanceId に\n 一致するインスタンスを getInstanceLabel でエイリアス優先解決し、見つからない/\n stale 時は CLI 表示名へフォールバック。\n- WorktreeDetailRefactored.tsx の c\n[…]\nbel に差し替え。\n タブ表示(getInstanceLabel 使用)との不整合を解消。\n- エイリアス未設定時はフォールバックにより従来挙動を維持(後方互換)。\n- ロケール文言は {tool} プレースホルダのみで変更不要。\n\nCloses #956\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(worktree): show instance alias in kill-session confirm dialog (#9…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-24T01:05:59Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ed028ff031e7c324544b7e5fdd76fc007fc02c71",
"body": null,
"is_bot": false,
"headline": "chore: merge release v0.7.3 to develop",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-06-23T00:41:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "efb7f9ca5b890f7210c1d8810800827c86497ea5",
"body": "release: v0.7.3",
"is_bot": false,
"headline": "release: v0.7.3 (#955)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-23T00:41:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d439eae3b0280fd67aebef92d7053d84cc75920c",
"body": null,
"is_bot": false,
"headline": "chore: release v0.7.3",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-06-23T00:33:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4023bb1f576fd2c81b6f94ff2021ee13a8577a22",
"body": "…rkspace/.playwright-mcp (#954)\n\n* fix(terminal-pane): clear residual PC terminal output after agent close + add ended placeholder (#843)\n\nIssue #842.\n\nA. Polling guard fix (root cause): useTerminalPanePolling cleared output only\n when it had content or the session was running, so the \"empty + sto\n[…]\n残る bloat とパスリークは許容(将来厳密化が必要なら別途 filter-repo を検討)。\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": "chore: propagate repo cleanup (#953) to main — untrack dev-reports/wo…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-22T15:14:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "32d36e3aa046e23f08f582b68ff211a798d2519a",
"body": "…-mcp & sanitize test fixtures (#953)\n\nリポジトリ肥大化(追跡 8,481 ファイル中 7,136=84% が dev-reports/ の AI エージェント\n自動生成ログ)と、ログに焼き込まれた絶対パス(contributor のローカルユーザー名)への対応。\n\n- git rm -r --cached で dev-reports / workspace / .playwright-mcp を追跡解除(計 7,169 件)。\n ローカルの実ファイルは保持(machine output は手元には残す)。\n- .gitignore に /dev-rep\n[…]\nxample)。検証ロジック(パス折り返し判定)は不変。\n\n履歴の書き換えは行わない(force-push なし・既存クローン/fork に無影響)。\n過去履歴に残る bloat とパスリークは許容(将来厳密化が必要なら別途 filter-repo を検討)。\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(repo): untrack auto-generated dev-reports/workspace/.playwright…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-22T14:55:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8f4667f323dba7e846e0d4aaaa775a08af6c282b",
"body": "…946 + Timer モーダル化 #945 + メモ並び替え #944 + Timer codex 送信修正 #947) (#952)\n\n* fix(terminal-pane): clear residual PC terminal output after agent close + add ended placeholder (#843)\n\nIssue #842.\n\nA. Polling guard fix (root cause): useTerminalPanePolling cleared output only\n when it had content or the se\n[…]\nnstanceId 伝播・no_session 時非送信・失敗時 failed)を検証するよう更新\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: develop → main (Timer/Schedule インスタンス選択 #942 + サイドバーアイコン拡大 #…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-22T14:34:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3a1730ec9afdcb25950fb8cc59b0fda9666b346d",
"body": "…irmation (#947) (#951)\n\nTimer 発火処理が tmux に直接 sendKeys(text+Enter 一括) を投入していたため、\ncodex の TUI がテキスト確定前に Enter を受け取り、メッセージが入力欄に\n残ったまま送信されない不具合があった。\n\n恒久対策として executeTimer の送信を cliTool.sendMessage(worktreeId,\nmessage, instanceId) に委譲。手動送信と完全に同じコードパス(CLIツール\nごとのテキスト/Enter 分離・待機)を通るため、claude/codex/gemini す\n[…]\nsionName 解決を除去\n- tests/unit/lib/timer-manager.test.ts: 送信委譲(sendMessage 呼び出し・\n instanceId 伝播・no_session 時非送信・失敗時 failed)を検証するよう更新\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(timer): delegate Timer send to cliTool.sendMessage for Enter conf…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-22T02:18:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "81f2cebc4ecbc301902ef3474f1e9c2fab081dbe",
"body": "- PATCH /api/worktrees/[id]/memos: validate + reorder memo positions\n- new src/lib/memo-reorder-validator.ts: pure validation (count/dup/foreign-id)\n- memoApi.reorder() client method\n- MemoCard ↑↓ move buttons (disabled at ends, backward-compat props)\n- MemoPane handleMove with optimistic update + rollback, disabled during search\n- i18n memoMoveUp/memoMoveDown (en/ja)\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memo): add ↑↓ reorder buttons to Activity Bar Notes (#944) (#950)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-22T01:49:04Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2c2671d828ad404aeb8d04192f881d3fec9ef763",
"body": "…alog (#945) (#949)\n\nReplace the always-visible inline Timer form with a \"+ Create Timer\" empty-state\nCTA / \"+ New Timer\" button that opens a modal dialog (PC=Modal, mobile=FullScreenModal),\nmirroring the Schedule UX. Extract formatDelayLabel into timers/timer-format.ts shared\nby pane and dialog. Li\n[…]\nistory/load-more are preserved and\npublic props are unchanged so callers (WorktreeDetailDesktop / NotesAndLogsPane) need no edits.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(timer): switch Timer input to \"+ Create Timer\" button + modal di…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-22T01:42:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f6bc868c2e4b24a6dec53362b4cf18c4ed039cb4",
"body": "…ity (#946) (#948)\n\nIntroduce a shared HEADER_ICON_CLASS ('w-4 h-4') for the five sidebar\nheader action icons (view-mode toggle, sort, sort-direction, sync,\nRepositories link), bumping them from 12px to 16px. SortSelectorBase\ngains an optional iconClassName prop (defaults to 'w-3 h-3') so other\nconsumers such as the Sessions page keep the original size.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(sidebar): enlarge top-row header action icons for better visibil…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-22T01:35:29Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "9488a58ef61151dea15711981086b61dccacd09a",
"body": "…ances\n\nfeat(timer): select registered agent instances in Timer and Schedule (#942)",
"is_bot": false,
"headline": "Merge pull request #943 from Kewton/fix/942-timer-schedule-agent-inst…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-22T00:13:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7b681482a5282bb55e977a74eecb486745bb9973",
"body": "…(#942)\n\nTimer (#534) and Schedule (#824-827) predate the AgentInstance system\n(#869), so their agent selectors were bound to the static CLI_TOOL_IDS list\nand could not target instances registered in the Agents panel.\n\nTimer — full instance support:\n- v35 migration adds a nullable timer_messages.ins\n[…]\nthreaded through WorktreeDetailDesktop (desktop) and\nNotesAndLogsPane (mobile) into TimerPane/ExecutionLogPane/ScheduleEditDialog.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(timer): select registered agent instances in Timer and Schedule …",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-06-21T16:23:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "58194c82933bad4ccca92397d52a7fc46f3e1a1b",
"body": null,
"is_bot": false,
"headline": "chore: merge release v0.7.2 to develop",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-06-21T14:47:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ac499383feccdc5b264dd87ecf76833233e65713",
"body": "release: v0.7.2",
"is_bot": false,
"headline": "release: v0.7.2 (#941)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-21T14:46:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4caf5c6c9e125df9314648fee48239b31c88555d",
"body": null,
"is_bot": false,
"headline": "chore: release v0.7.2",
"author_name": "kewton",
"author_login": "Kewton",
"committed_at": "2026-06-21T14:39:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce2d9b5b9259666a42b4e362eb11e80d7a741042",
"body": "…3 + ドキュメント整備 #924-929) (#940)\n\n* fix(terminal-pane): clear residual PC terminal output after agent close + add ended placeholder (#843)\n\nIssue #842.\n\nA. Polling guard fix (root cause): useTerminalPanePolling cleared output only\n when it had content or the session was running, so the \"empty + stop\n[…]\nt tests for the new hooks and the context/layout.\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: develop → main (PC表示サイズ #915/#919 + god-module リファクタ #920-92…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-21T08:16:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "82643596c39901860bcd8ab1bdb7e55e0438d505",
"body": "…ls + layout (#922) (#939)\n\nSplit the ~3.1k-line src/components/worktree/GitPane.tsx into a thin\ncoordinator that wires focused custom hooks (logic) to memo'd panel\ncomponents (presentation) via a shared layout — a behavior-preserving\nrefactor with the 112 existing GitPane tests as the safety net.\n\n\n[…]\nrnal props, data-testids, and runtime behavior are unchanged.\n- Added focused unit tests for the new hooks and the context/layout.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(worktree): decompose GitPane god-component into hooks + pane…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-20T17:10:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "118d7d8c75af556ffdffbeafa669b67a08e2c962",
"body": "…#928) (#938)\n\nIssue #928: コード構造ドキュメントが現行 src/ 構成から乖離していた問題を解消。\n\n- CLAUDE.md ディレクトリツリーに欠落していた主要ディレクトリを追記:\n app/{chat,login,proxy,worktrees}、cli/docs、components/{auth,error,\n external-apps,repository,ui}、lib/{assistant,browser-compat,external-apps,\n proxy}+lib/ws-server.ts/logger.ts(brief overview\n[…]\nib/assistant 非インタラクティブ実行群、lib/external-apps、lib/proxy、\n app/{chat,login,proxy} ルート。\n- CLAUDE.md は 16,632 bytes で 35,000 byte 上限内。\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: sync CLAUDE.md tree and module-reference.md with current src/ (…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-20T16:41:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3295209bc291f68156fbcd67a3bc46c4d398ea88",
"body": "…921) (#937)\n\nDecompose the 2327-line src/lib/git/git-utils.ts (37 exports) into\nsingle-concern modules, keeping git-utils.ts as a backward-compatible\nre-export barrel so all callers via the barrel are unchanged.\n\nNew modules (no circular dependencies):\n- git-errors.ts typed error classes + hand\n[…]\nriginal cases are preserved verbatim across 11 per-module files.\n\nGates: lint / tsc --noEmit / test:unit (7900) / build all green.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(git): split git-utils god-module into per-concern modules (#…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-20T16:32:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "138f38ea2330214957f410e9b3b684513b087b66",
"body": "… Phase 1) (#936)\n\n低リスク・無結合の3関心事を useWorktreeDetailController から独立サブフックへ抽出\n(純構造リファクタ・振る舞い不変):\n\n- useHistoryFilters: historySubTab / showArchived / historyUserOnly /\n historyDisplayLimit + localStorage 同期\n- useDiffViewerState: diffContent / diffFilePath + open/close(mobile は no-op)\n- useVisibilityRe\n[…]\nisplayLimitRef)は\npolling 関心(Phase 2/3 で対応)として controller に残置。本体は 1671→1514 行に縮小。\n各サブフックに focused unit test を追加(18 ケース)。\n\nRefs #923\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(worktree): useWorktreeDetailController god-hook をサブフックへ分解(P2…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-20T16:26:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d9785e04adfe6a37b47484821c84f12cfc8f1fca",
"body": "…#920) (#935)\n\nWorktreeDetailHeader.tsx had no render path — the real PC worktree\ndetail top bar is DesktopHeader in WorktreeDetailSubComponents.tsx.\nOnly its own unit test referenced it (test-backed dead code).\n\n- Delete src/components/worktree/WorktreeDetailHeader.tsx\n- Delete tests/unit/component\n[…]\neader.test.tsx\n\nVerified zero remaining references repo-wide (barrel index.ts never\nexported it). No behavior change.\n\nCloses #920\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(worktree): remove dead-code WorktreeDetailHeader component (…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-20T16:23:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c9b8f3b5b0762d958e2545f4bafb440feea4ef94",
"body": "…927) (#934)\n\n- report コマンド(generate/show/list)を cli-operations-guide.md(日英)に追記\n- start の不足フラグ(--issue/--auto-port/--auth/--auth-expire/--https/--cert/--key/--allow-http/--allowed-ips/--trust-proxy)を cli-setup-guide.md(日英)に追記\n- stop の --issue、status の --issue/--all を追記\n- CLAUDE.md の CLIコマンド節に report を追加(詳細はガイドへ集約、35KB制限内)\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add report command and start/stop/status flags to CLI guides (#…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-20T16:19:59Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "52a314c3266d58a47ecffde2c8a6a11145fcdc30",
"body": "…ty (#929) (#933)\n\nCreate docs/en/ counterparts for the 6 documents that previously had no\nEnglish version, closing the multilingual structure-parity gap (#929):\n\n- security-guide.md / security-identifiers.md (already English; add header)\n- user-guide/wsl2-setup.md (translate remaining JP comments/p\n[…]\n.\n\nAlso add reciprocal [English] / [日本語版] language-switch links to every\nJA↔EN pair, matching the existing translation convention.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(i18n): add English translations to achieve docs/ ↔ docs/en/ pari…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-20T16:19:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d622853934ea0677a14a43e5e2563f9e868431ec",
"body": "… (#932)\n\nimplementation-history.md(JA/EN)の破損した design-policy リンクを修正。\n\n- #469: リンク先を実在ファイル issue-469-file-auto-update-design-policy.md に修正\n- #588 / #379 / #294 / #138: dev-reports/design/ に対応設計書が存在しないためリンク解除(`-` 化)\n- JA/EN 両ファイルで相対リンクが全て解決することを確認(破損リンク 0 件)\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: fix broken design-policy links in implementation-history (#926)…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-20T16:19:51Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "9c566427d472d9062f87db50cc3b3abcb95d9d56",
"body": "docs/architecture.md の環境変数表記を旧プレフィックス MCBD_ から\n実コード(src/lib/env.ts)の正である CM_* に統一。\n\n- CM_BIND / CM_PORT / CM_ROOT_DIR / CM_DB_PATH / CM_LOG_LEVEL へ統一\n- レガシー MCBD_* fallback の注記を Configuration 節に追加\n (ENV_MAPPING / getEnvWithFallback による後方互換を明示)\n- src/lib/env.ts の変数名と最終突合済み\n\nCloses #925\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(architecture): 環境変数表記を MCBD_ から CM_ に統一 (#925) (#931)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-20T16:19:47Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "c5144e71ef57b0f7ba540ed0ec7d22536ad10618",
"body": "… (#930)\n\n.claude/commands/ 配下のスラッシュコマンド定義に残存していた旧リポジトリ名\nKewton/MyCodeBranchDesk(gh --repo 引数)を正しい Kewton/CommandMate に一括置換。\nGitHub のリネームリダイレクト依存を解消し、コマンド実行の信頼性・可読性を改善。\n\n対象 5 ファイル / 計22箇所:\n- .claude/commands/pr-merge-pipeline.md (8)\n- .claude/commands/uat-fix-loop.md (5)\n- .claude/commands/orchestra\n[…]\n.md (4)\n- .claude/commands/cause-analysis.md (3)\n- .claude/commands/current-situation.md (2)\n\n移行ガイド等の意図的な MyCodeBranchDesk 参照は対象外。\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: 旧リポジトリ名 Kewton/MyCodeBranchDesk を Kewton/CommandMate に修正 (#924)…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-20T16:19:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d46d65b356670d5887871754c1da8925e5da1356",
"body": "… localize labels (#919)\n\nIssue #915 added the PC display-size selector to the global Header, but two\nfollow-up problems remained:\n\n- #917: /worktrees/[id] suppresses the global Header (useLayoutConfig\n showGlobalNav:false), so the selector was unreachable on the worktree detail\n page. Surface it \n[…]\nsktopHeader renders the selector and that option\nlabels come from the i18n dictionary (not raw Japanese).\n\nCloses #917\nCloses #918\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(display): show PC display-size selector on worktree detail page +…",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-20T15:20:03Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ec264659eef59ac086f8113dab477d4e62fd2d58",
"body": "案A(rem カスケード)で PC 専用の表示サイズ切替を実装。\n\n- usePcDisplaySize: localStorage(mcbd-pc-display-size, 既定=medium, 検証付き)で\n サイズを永続化。サイズ係数表・ターミナルfontSize・rootフォントサイズをメタ定義。\n- PcDisplaySizeContext/Provider: 単一の真実源。PC(!isMobile)時のみ\n <html data-pc-size> を付与して rem カスケードを適用。モバイル/アンマウント時は除去。\n- globals.css: html[data-pc-s\n[…]\n。変更時は term.options.fontSize 更新+fit()で\n 再フィット(再接続なし)。terminal ページが選択サイズに応じた値を配線。\n\nモバイル(<768px)では非適用(従来通り)。ユニット/型/lint/build 全Pass。\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(display): PC版に表示サイズ切替(大/中/小/極小)を追加(既定=中・remカスケード)(#915) (#916)",
"author_name": "Kewton",
"author_login": "Kewton",
"committed_at": "2026-06-20T14:51:37Z",
"body_truncated": true,
"is_coding_agent": true
}
],
"releases_count": 88,
"commits_last_year": 1751,
"latest_release_at": "2026-07-20T00:38:18Z",
"latest_release_tag": "v0.11.4",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 32,
"days_since_latest_release": 2,
"mean_days_between_releases": 0.4
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 100,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "commandmate",
"exists": true,
"license": null,
"keywords": [
"claude-code",
"codex-cli",
"gemini-cli",
"agent-cli",
"cli-orchestration",
"ai-coding",
"git-worktree",
"coding-agent",
"session-manager",
"tmux",
"cli",
"developer-tools"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/commandmate",
"is_deprecated": false,
"latest_version": "0.11.4",
"repository_url": "https://github.com/Kewton/CommandMate",
"versions_count": 84,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 3909,
"first_published_at": "2026-01-31T15:11:13.139000Z",
"latest_published_at": "2026-07-20T00:49:25.025000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 2
}
]
},
"popularity": {
"forks": 4,
"stars": 38,
"watchers": 0,
"fork_history": {
"days": [
{
"date": "2026-02-19",
"count": 1
},
{
"date": "2026-02-21",
"count": 1
},
{
"date": "2026-03-11",
"count": 1
},
{
"date": "2026-05-06",
"count": 1
}
],
"complete": true,
"collected": 4,
"total_forks": 4
},
"star_history": {
"days": [
{
"date": "2026-02-19",
"count": 1
},
{
"date": "2026-02-21",
"count": 1
},
{
"date": "2026-02-22",
"count": 1
},
{
"date": "2026-03-02",
"count": 1
},
{
"date": "2026-03-07",
"count": 1
},
{
"date": "2026-03-11",
"count": 3
},
{
"date": "2026-03-12",
"count": 1
},
{
"date": "2026-03-13",
"count": 2
},
{
"date": "2026-03-14",
"count": 1
},
{
"date": "2026-03-16",
"count": 1
},
{
"date": "2026-03-17",
"count": 1
},
{
"date": "2026-03-18",
"count": 3
},
{
"date": "2026-03-19",
"count": 2
},
{
"date": "2026-03-21",
"count": 1
},
{
"date": "2026-03-22",
"count": 1
},
{
"date": "2026-03-23",
"count": 1
},
{
"date": "2026-03-25",
"count": 2
},
{
"date": "2026-03-30",
"count": 1
},
{
"date": "2026-03-31",
"count": 1
},
{
"date": "2026-04-04",
"count": 2
},
{
"date": "2026-04-12",
"count": 1
},
{
"date": "2026-04-16",
"count": 1
},
{
"date": "2026-04-29",
"count": 1
},
{
"date": "2026-05-02",
"count": 1
},
{
"date": "2026-05-05",
"count": 1
},
{
"date": "2026-05-06",
"count": 1
},
{
"date": "2026-05-13",
"count": 1
},
{
"date": "2026-05-19",
"count": 1
},
{
"date": "2026-05-21",
"count": 1
},
{
"date": "2026-05-25",
"count": 1
}
],
"complete": true,
"collected": 38,
"total_stars": 38
},
"open_issues_and_prs": 24
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 127698,
"source_files_sampled": 1422,
"oversized_source_files": 6,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 17804
},
"dependencies": {
"manifests": [
"package.json"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"npm"
],
"dependencies": [
{
"name": "@dnd-kit/core",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^6.3.1"
},
{
"name": "@dnd-kit/sortable",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^10.0.0"
},
{
"name": "@dnd-kit/utilities",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^3.2.2"
},
{
"name": "@marp-team/marp-core",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.3.0"
},
{
"name": "@radix-ui/react-checkbox",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.3.7"
},
{
"name": "@radix-ui/react-dropdown-menu",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^2.1.20"
},
{
"name": "@radix-ui/react-radio-group",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.4.3"
},
{
"name": "@radix-ui/react-select",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^2.3.3"
},
{
"name": "@radix-ui/react-switch",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.3.3"
},
{
"name": "@radix-ui/react-tabs",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.1.17"
},
{
"name": "@radix-ui/react-tooltip",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.2.12"
},
{
"name": "@tanstack/react-virtual",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^3.13.26"
},
{
"name": "ansi-to-html",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.7.2"
},
{
"name": "better-sqlite3",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^12.4.1"
},
{
"name": "class-variance-authority",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.7.1"
},
{
"name": "clsx",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^2.1.1"
},
{
"name": "cmdk",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.1.1"
},
{
"name": "commander",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^14.0.2"
},
{
"name": "croner",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^10.0.1"
},
{
"name": "date-fns",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.1.0"
},
{
"name": "dotenv",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^17.2.3"
},
{
"name": "geist",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.7.2"
},
{
"name": "github-slugger",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^2.0.0"
},
{
"name": "gray-matter",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.0.3"
},
{
"name": "http-proxy",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.18.1"
},
{
"name": "isomorphic-dompurify",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^2.35.0"
},
{
"name": "jsdom",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^28.1.0"
},
{
"name": "lucide-react",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.554.0"
},
{
"name": "mermaid",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^11.12.2"
},
{
"name": "next",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^15.5.20"
},
{
"name": "next-intl",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.8.2"
},
{
"name": "next-themes",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.4.6"
},
{
"name": "postcss",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^8.5.6"
},
{
"name": "react",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^19.2.7"
},
{
"name": "react-dom",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^19.2.7"
},
{
"name": "react-markdown",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^10.1.0"
},
{
"name": "react-qr-code",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^2.0.18"
},
{
"name": "rehype-highlight",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^7.0.2"
},
{
"name": "rehype-raw",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^7.0.0"
},
{
"name": "rehype-sanitize",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^6.0.0"
},
{
"name": "rehype-slug",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^6.0.0"
},
{
"name": "remark-gfm",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.0.1"
},
{
"name": "safe-regex2",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^5.0.0"
},
{
"name": "tailwind-merge",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^3.6.0"
},
{
"name": "uuid",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^13.0.0"
},
{
"name": "web-push",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^3.6.7"
},
{
"name": "ws",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^8.18.3"
},
{
"name": "xterm",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^5.3.0"
},
{
"name": "xterm-addon-fit",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.8.0"
},
{
"name": "xterm-addon-web-links",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.9.0"
}
],
"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": 799,
"open_issues": 24,
"closed_ratio": 0.963,
"closed_issues": 617,
"closed_unmerged_prs": 20
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "Kewton",
"commits": 1751,
"avatar_url": "https://avatars.githubusercontent.com/u/11370858?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci-pr.yml",
"pages.yml",
"publish.yml"
],
"has_docs_dir": true,
"linter_configs": [
".eslintrc.json"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"package-lock.json"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": null,
"reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "23 out of 23 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/23 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 0,
"reason": "project has 0 contributing companies or organizations -- score normalized to 0",
"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 30 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 2,
"reason": "dependency not pinned by hash detected -- score normalized to 2",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 9,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "57 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "ad1579473c98b0b9268c0be2f68b10726f9fa1ec",
"ran_at": "2026-07-22T04:41:31Z",
"aggregate_score": 4.5,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-20T00:49:29Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-07-22T00:44:07Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 1227,
"created_at": "2026-07-15T16:08:36Z",
"last_comment_at": "2026-07-21T02:11:13Z",
"last_comment_author": "Kewton"
},
{
"number": 1242,
"created_at": "2026-07-15T16:11:31Z",
"last_comment_at": "2026-07-20T15:28:11Z",
"last_comment_author": "Kewton"
},
{
"number": 1243,
"created_at": "2026-07-15T16:11:52Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1244,
"created_at": "2026-07-15T16:12:02Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1245,
"created_at": "2026-07-15T16:12:12Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1246,
"created_at": "2026-07-15T16:12:22Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1247,
"created_at": "2026-07-15T16:12:27Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1248,
"created_at": "2026-07-15T16:12:37Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1249,
"created_at": "2026-07-15T16:12:47Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1250,
"created_at": "2026-07-15T16:13:03Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1251,
"created_at": "2026-07-15T16:13:08Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1252,
"created_at": "2026-07-15T16:13:15Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1253,
"created_at": "2026-07-15T16:13:23Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1254,
"created_at": "2026-07-15T16:13:31Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1255,
"created_at": "2026-07-15T16:13:38Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1256,
"created_at": "2026-07-15T16:13:43Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1257,
"created_at": "2026-07-15T16:13:49Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1258,
"created_at": "2026-07-15T16:14:03Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1259,
"created_at": "2026-07-15T16:14:08Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1260,
"created_at": "2026-07-15T16:14:14Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/Kewton/CommandMate",
"host": "github.com",
"name": "CommandMate",
"owner": "Kewton"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 69,
"inputs": {
"security": 45,
"vitality": 92,
"community": 59,
"governance": 55,
"engineering": 90
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 92,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 86,
"inputs": {
"commits_last_year": 1751,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 32
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "32/52 weeks with commits",
"points": 22.2,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 32
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "1751 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 1751
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"releases_count": 88,
"latest_release_tag": "v0.11.4",
"releases_from_tags": false,
"days_since_latest_release": 2,
"mean_days_between_releases": 0.4
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "88 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 88
}
}
],
"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 ~0.4 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 0.4
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 2,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 2 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 2
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 59,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 29,
"inputs": {
"forks": 4,
"stars": 38,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "below_threshold"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "38 stars",
"points": 25.4,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 38
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "4 forks",
"points": 4,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 4
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "excellent",
"name": "Community health",
"note": null,
"notes": [],
"value": 92,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 13.5,
"status": "met",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 6.3,
"status": "met",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 60,
"inputs": {
"packages": [
"commandmate"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 3909
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "3,909 downloads/month across npm",
"points": 47.9,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 3909,
"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": 55,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 10,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 1,
"top_contributor_share": 1
},
"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 100% of commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "1 contributors",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 1
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"merged_prs": 799,
"open_issues": 24,
"closed_issues": 617,
"issue_closed_ratio": 0.963,
"closed_unmerged_prs": 20
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "96% of issues closed",
"points": 45,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 96
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "799/819 decided PRs merged",
"points": 37.3,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 799,
"decided": 819
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/23 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": "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": 47,
"inputs": {
"followers": 2,
"owner_type": "User",
"is_verified": null,
"owner_login": "Kewton",
"public_repos": 43,
"account_age_days": 4154
},
"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": "2 followers of Kewton",
"points": 3.4,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 2,
"login": "Kewton"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "43 public repos, account ~11 yr old",
"points": 24,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 43
}
},
{
"code": "account_age_years",
"params": {
"years": 11
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"commandmate"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 2
},
"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 2 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 2
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "84 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 84
}
}
],
"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": "excellent",
"name": "Engineering Quality",
"value": 90,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 84,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "3 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 3
}
}
],
"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": ".eslintrc.json",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".eslintrc.json"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "23 out of 23 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"topics": [
"claude-code",
"developer-tools",
"git-worktree",
"terminal",
"tmux",
"commandmate",
"ai-coding",
"codex-cli",
"mobile-development",
"session-manager",
"autonomous-coding",
"claude-mobile",
"vibe-coding",
"web-ui"
],
"has_wiki": true,
"homepage": "https://www.npmjs.com/package/commandmate",
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://www.npmjs.com/package/commandmate",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "14 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 14
}
}
],
"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": "at_risk",
"name": "Security",
"value": 45,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 45,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"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": "23 out of 23 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/23 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"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 30 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 2",
"points": 1,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 4.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "57 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "good",
"name": "AI Readiness",
"value": 73,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.99,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 17804
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "99 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 99,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 66,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"package-lock.json"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"tsconfig.json"
],
"agent_commit_share": 0.7,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": ".eslintrc.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".eslintrc.json"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "70 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 70,
"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 2",
"points": 2,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 127698,
"source_files_sampled": 1422,
"oversized_source_files": 6
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "6/1422 source files over 60KB",
"points": 54.8,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 1422,
"oversized": 6
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"deps.dev does not index npm:commandmate@0.11.4; advisories assessed against the repository dependency graph instead"
],
"report_type": "repository",
"generated_at": "2026-07-22T04:41:52.672692Z",
"schema_version": "0.26.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/k/Kewton/CommandMate.svg",
"full_name": "Kewton/CommandMate",
"license_state": "standard",
"license_spdx": "MIT"
}