Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [
"claude-code",
"gateway",
"agent",
"llm",
"orches",
"orchestration"
],
"is_fork": false,
"size_kb": 57964,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 9401066,
"CSS": 390,
"HTML": 366,
"NSIS": 13446,
"Shell": 15542,
"Python": 227110,
"Makefile": 2297,
"Dockerfile": 5079,
"JavaScript": 99835,
"TypeScript": 3208896
},
"pushed_at": "2026-07-28T00:40:51Z",
"created_at": "2025-11-21T02:32:46Z",
"owner_type": "Organization",
"updated_at": "2026-07-27T10:04:13Z",
"description": "Your Intelligence, Orchestrated. Every builder. Every team. Every agent. For Everyone.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MPL-2.0",
"default_branch": "main",
"license_spdx_raw": "MPL-2.0",
"primary_language": "Go",
"significant_languages": [
"Go",
"TypeScript"
]
},
"owner": {
"blog": null,
"name": "tingly.dev",
"type": "Organization",
"login": "tingly-dev",
"company": null,
"location": null,
"followers": 5,
"avatar_url": "https://avatars.githubusercontent.com/u/245295631?v=4",
"created_at": "2025-11-21T02:19:46Z",
"is_verified": null,
"public_repos": 28,
"account_age_days": 248
},
"license": {
"state": "standard",
"spdx_id": "MPL-2.0",
"raw_spdx": "MPL-2.0",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.260723.1",
"kind": "patch",
"published_at": "2026-07-24T04:00:30Z"
},
{
"tag": "v0.260723.0-rc3",
"kind": "prerelease",
"published_at": "2026-07-23T08:13:47Z"
},
{
"tag": "v0.260723.0-rc2",
"kind": "prerelease",
"published_at": "2026-07-22T07:04:04Z"
},
{
"tag": "v0.260723.0-rc1",
"kind": "prerelease",
"published_at": "2026-07-21T13:11:51Z"
},
{
"tag": "v0.260716.1",
"kind": "patch",
"published_at": "2026-07-19T11:35:52Z"
},
{
"tag": "v0.260717.0-rc1",
"kind": "prerelease",
"published_at": "2026-07-17T07:02:58Z"
},
{
"tag": "v0.260716.0-rc3",
"kind": "prerelease",
"published_at": "2026-07-15T08:34:37Z"
},
{
"tag": "v0.260716.0-rc2",
"kind": "prerelease",
"published_at": "2026-07-13T03:45:12Z"
},
{
"tag": "v0.260716.0-rc1",
"kind": "prerelease",
"published_at": "2026-07-11T15:31:34Z"
},
{
"tag": "v0.260709.1",
"kind": "patch",
"published_at": "2026-07-09T10:12:08Z"
},
{
"tag": "v0.260709.0-rc1",
"kind": "prerelease",
"published_at": "2026-07-06T08:06:57Z"
},
{
"tag": "v0.260702.1",
"kind": "patch",
"published_at": "2026-07-03T00:58:28Z"
},
{
"tag": "v0.260702.0-rc2",
"kind": "prerelease",
"published_at": "2026-07-01T11:16:43Z"
},
{
"tag": "v0.260702.0-rc1",
"kind": "prerelease",
"published_at": "2026-06-30T03:37:50Z"
},
{
"tag": "v0.260625.1",
"kind": "patch",
"published_at": "2026-06-26T10:31:10Z"
},
{
"tag": "v0.260625.0-rc4",
"kind": "prerelease",
"published_at": "2026-06-24T09:47:29Z"
},
{
"tag": "v0.260625.0-rc3",
"kind": "prerelease",
"published_at": "2026-06-23T09:59:01Z"
},
{
"tag": "v0.260625.0-rc2",
"kind": "prerelease",
"published_at": "2026-06-21T10:50:38Z"
},
{
"tag": "v0.260625.0-rc1",
"kind": "prerelease",
"published_at": "2026-06-19T05:03:59Z"
},
{
"tag": "v0.260618.0-rc1",
"kind": "prerelease",
"published_at": "2026-06-17T09:43:23Z"
},
{
"tag": "v0.260611.2",
"kind": "patch",
"published_at": "2026-06-12T04:15:26Z"
},
{
"tag": "v0.260611.1",
"kind": "patch",
"published_at": "2026-06-11T08:18:29Z"
},
{
"tag": "v0.260611.0-rc5",
"kind": "prerelease",
"published_at": "2026-06-10T09:31:30Z"
},
{
"tag": "v0.260611.0-rc4",
"kind": "prerelease",
"published_at": "2026-06-10T07:42:09Z"
},
{
"tag": "v0.260611.0-rc3",
"kind": "prerelease",
"published_at": "2026-06-10T01:14:13Z"
},
{
"tag": "v0.260611.0-rc2",
"kind": "prerelease",
"published_at": "2026-06-09T04:10:04Z"
},
{
"tag": "v0.260611.0-rc1",
"kind": "prerelease",
"published_at": "2026-06-08T14:11:31Z"
},
{
"tag": "v0.260604.2",
"kind": "patch",
"published_at": "2026-06-04T08:07:27Z"
},
{
"tag": "v0.260604.1",
"kind": "patch",
"published_at": "2026-06-04T03:25:58Z"
},
{
"tag": "v0.260604.0-rc4",
"kind": "prerelease",
"published_at": "2026-06-03T08:40:21Z"
},
{
"tag": "v0.260604.0-rc3",
"kind": "prerelease",
"published_at": "2026-06-01T15:40:00Z"
},
{
"tag": "v0.260604.0-rc2",
"kind": "prerelease",
"published_at": "2026-05-31T09:22:48Z"
},
{
"tag": "npx-0.260604.0-rc1",
"kind": "other",
"published_at": "2026-05-28T08:45:32Z"
},
{
"tag": "v0.260604.0-rc1",
"kind": "prerelease",
"published_at": "2026-05-28T08:14:25Z"
},
{
"tag": "npx-0.260531.2",
"kind": "other",
"published_at": "2026-05-27T05:50:41Z"
},
{
"tag": "v0.260531.2",
"kind": "patch",
"published_at": "2026-05-27T04:40:38Z"
},
{
"tag": "npx-0.260531.1",
"kind": "other",
"published_at": "2026-05-25T06:50:16Z"
},
{
"tag": "v0.260531.1",
"kind": "patch",
"published_at": "2026-05-25T05:46:25Z"
},
{
"tag": "npx-0.260531.0-rc7",
"kind": "other",
"published_at": "2026-05-22T07:51:29Z"
},
{
"tag": "v0.260531.0-rc7",
"kind": "prerelease",
"published_at": "2026-05-22T07:45:07Z"
},
{
"tag": "npx-0.260531.0-rc6",
"kind": "other",
"published_at": "2026-05-20T12:22:14Z"
},
{
"tag": "v0.260531.0-rc6",
"kind": "prerelease",
"published_at": "2026-05-20T12:20:00Z"
},
{
"tag": "npx-0.260531.0-rc5",
"kind": "other",
"published_at": "2026-05-20T03:31:32Z"
},
{
"tag": "v0.260531.0-rc5",
"kind": "prerelease",
"published_at": "2026-05-20T03:13:43Z"
},
{
"tag": "npx-0.260531.0-rc4",
"kind": "other",
"published_at": "2026-05-19T10:25:25Z"
},
{
"tag": "v0.260531.0-rc4",
"kind": "prerelease",
"published_at": "2026-05-19T09:57:14Z"
},
{
"tag": "v0.260531.0-rc3",
"kind": "prerelease",
"published_at": "2026-05-17T14:33:58Z"
},
{
"tag": "npx-0.260514.4",
"kind": "other",
"published_at": "2026-05-17T08:04:54Z"
},
{
"tag": "v0.260514.4",
"kind": "patch",
"published_at": "2026-05-17T07:18:43Z"
},
{
"tag": "npx-0.260514.3",
"kind": "other",
"published_at": "2026-05-17T02:05:35Z"
},
{
"tag": "v0.260514.3",
"kind": "patch",
"published_at": "2026-05-17T01:57:55Z"
},
{
"tag": "npx-0.260514.2",
"kind": "other",
"published_at": "2026-05-16T15:14:07Z"
},
{
"tag": "v0.260514.2",
"kind": "patch",
"published_at": "2026-05-16T15:05:02Z"
},
{
"tag": "npx-0.260531.0-rc2",
"kind": "other",
"published_at": "2026-05-16T14:53:16Z"
},
{
"tag": "v0.260531.0-rc2",
"kind": "prerelease",
"published_at": "2026-05-16T14:50:50Z"
},
{
"tag": "v0.260531.0-rc1",
"kind": "prerelease",
"published_at": "2026-05-16T13:00:34Z"
},
{
"tag": "npx-0.260514.1",
"kind": "other",
"published_at": "2026-05-14T05:49:58Z"
},
{
"tag": "v0.260514.0-rc4",
"kind": "prerelease",
"published_at": "2026-05-14T05:42:12Z"
},
{
"tag": "v0.260514.1",
"kind": "patch",
"published_at": "2026-05-14T05:41:57Z"
},
{
"tag": "npx-0.260514.0-rc3",
"kind": "other",
"published_at": "2026-05-13T07:46:42Z"
},
{
"tag": "v0.260514.0-rc3",
"kind": "prerelease",
"published_at": "2026-05-13T05:29:21Z"
},
{
"tag": "npx-0.260514.0-rc2",
"kind": "other",
"published_at": "2026-05-11T13:29:18Z"
},
{
"tag": "v0.260514.0-rc2",
"kind": "prerelease",
"published_at": "2026-05-11T13:07:11Z"
},
{
"tag": "npx-0.260514.0-rc1",
"kind": "other",
"published_at": "2026-05-10T16:25:06Z"
},
{
"tag": "v0.260514.0-rc1",
"kind": "prerelease",
"published_at": "2026-05-10T16:23:40Z"
},
{
"tag": "npx-0.260507.1",
"kind": "other",
"published_at": "2026-05-07T11:33:56Z"
},
{
"tag": "v0.260507.1",
"kind": "patch",
"published_at": "2026-05-07T10:10:26Z"
},
{
"tag": "npx-0.260507.0-rc5",
"kind": "other",
"published_at": "2026-05-05T06:33:02Z"
},
{
"tag": "v0.260507.0-rc5",
"kind": "prerelease",
"published_at": "2026-05-05T06:12:56Z"
},
{
"tag": "npx-0.260507.0-rc4",
"kind": "other",
"published_at": "2026-05-05T05:08:05Z"
},
{
"tag": "v0.260507.0-rc4",
"kind": "prerelease",
"published_at": "2026-05-05T04:02:37Z"
},
{
"tag": "npx-0.260507.0-rc3",
"kind": "other",
"published_at": "2026-05-02T01:25:35Z"
},
{
"tag": "v0.260507.0-rc3",
"kind": "prerelease",
"published_at": "2026-05-02T01:23:58Z"
},
{
"tag": "npx-0.260507.0-rc2",
"kind": "other",
"published_at": "2026-05-01T04:39:37Z"
},
{
"tag": "v0.260507.0-rc2",
"kind": "prerelease",
"published_at": "2026-05-01T04:36:07Z"
},
{
"tag": "v0.260507.0-rc1",
"kind": "prerelease",
"published_at": "2026-05-01T03:10:38Z"
},
{
"tag": "v0.260430.1",
"kind": "patch",
"published_at": "2026-05-01T04:51:59Z"
},
{
"tag": "npx-0.260430.0-rc3",
"kind": "other",
"published_at": "2026-04-26T08:53:22Z"
},
{
"tag": "v0.260430.0-rc3",
"kind": "prerelease",
"published_at": "2026-04-26T08:51:39Z"
},
{
"tag": "npx-0.260430.0-rc2",
"kind": "other",
"published_at": "2026-04-26T07:33:07Z"
},
{
"tag": "v0.260430.0-rc2",
"kind": "prerelease",
"published_at": "2026-04-26T07:25:46Z"
},
{
"tag": "npx-0.260430.0-rc1",
"kind": "other",
"published_at": "2026-04-26T03:18:00Z"
},
{
"tag": "v0.260430.0-rc1",
"kind": "prerelease",
"published_at": "2026-04-26T03:13:29Z"
},
{
"tag": "npx-0.260430.0-rc",
"kind": "other",
"published_at": "2026-04-26T00:32:29Z"
},
{
"tag": "v0.260430.0-rc",
"kind": "prerelease",
"published_at": "2026-04-26T00:17:29Z"
},
{
"tag": "npx-0.260423.0",
"kind": "other",
"published_at": "2026-04-23T02:52:00Z"
},
{
"tag": "v0.260423.0",
"kind": "minor",
"published_at": "2026-04-23T02:43:27Z"
},
{
"tag": "v0.260423.0-rc",
"kind": "prerelease",
"published_at": "2026-04-21T14:40:16Z"
},
{
"tag": "npx-0.260418.2230-hotfix",
"kind": "other",
"published_at": "2026-04-18T14:39:27Z"
},
{
"tag": "v0.260418.2230-hotfix",
"kind": "prerelease",
"published_at": "2026-04-18T14:32:43Z"
},
{
"tag": "npx-0.260418.2222-hotfix",
"kind": "other",
"published_at": "2026-04-18T14:18:02Z"
},
{
"tag": "v0.260418.2222-hotfix",
"kind": "prerelease",
"published_at": "2026-04-18T14:17:05Z"
},
{
"tag": "npx-0.260418.2200",
"kind": "other",
"published_at": "2026-04-18T13:40:30Z"
},
{
"tag": "v0.260418.2200",
"kind": "patch",
"published_at": "2026-04-18T13:39:20Z"
},
{
"tag": "npx-0.260415.1045-hotfix",
"kind": "other",
"published_at": "2026-04-15T03:08:48Z"
},
{
"tag": "v0.260415.1045-hotfix",
"kind": "prerelease",
"published_at": "2026-04-15T02:50:25Z"
},
{
"tag": "npx-0.260414.2000",
"kind": "other",
"published_at": "2026-04-14T12:06:17Z"
},
{
"tag": "v0.260414.2000",
"kind": "patch",
"published_at": "2026-04-14T11:58:44Z"
},
{
"tag": "npx-0.260413.1130-hotfix",
"kind": "other",
"published_at": "2026-04-13T03:48:28Z"
},
{
"tag": "v0.260413.1130-hotfix",
"kind": "prerelease",
"published_at": "2026-04-13T03:39:41Z"
}
],
"recent_commits": [
{
"oid": "30afbd4a856764f0d79ede27d2ffd2ae3137a6dc",
"body": "…e over-implementation, fix two data races (#1448)\n\nRestructures the flat ~30-file `internal/remote_control/bot` package\nalong the resource/purpose seam from `.design/bot-arch.md`, deletes\nconfirmed-dead code and speculative surface, and fixes two data races\nsurfaced along the way. Net **−830 lines*\n[…]\ne](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01U4HzoSXoQHeYpwkupm3rcp\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>\nCo-authored-by: FFengIll <fengyouzheng@gmail.com>",
"is_bot": false,
"headline": "refactor(remote/bot): split into host + remoteagent submodules, remov…",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-27T10:02:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b84db0e831bab7222fba2899645723057df71b95",
"body": "… it; drop remote/audit (#1447)\n\n## Summary\n\n- **`/clear` now archives instead of deletes for @tb (SmartGuide).**\n@cc's `/clear` already closed the old session and let a new one lazily\nappear on the next message, keeping the old row + transcript as history.\n@tb's `/clear` was the outlier: it hard-de\n[…]\nith [Claude Code](https://claude.com/claude-code)\n\n\n---\n_Generated by [Claude\nCode](https://claude.ai/code/session_01CvgLpoC9naLjwZFsN5xQBw)_\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(remote): /clear archives the @tb session instead of deleting…",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-27T06:43:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "21704b6ea9c53df7ec7318b3fa8dd4e047ec5c8f",
"body": "…tore (#1446)\n\n## Why\n\nRemote kept chats and sessions in JSON files next to a SQLite database\nthat already held bot settings. The defect wasn't \"files\" — it was **one\nfile holding every record, rewritten whole on each write**. Three live\nbugs:\n\n- **Concurrent bots erased each other's chats.** Each b\n[…]\nplayability, cross-connection visibility, and GORM's zero-value\n`Updates` trap.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01SJxpt2hAaroXgSaaUtqVvh",
"is_bot": false,
"headline": "refactor(remote): move chat + session state off the whole-file JSON s…",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-27T04:12:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "469d548f4ee721ca497d2bef4cbec11b1520ae64",
"body": "pkg/jsonstore held every record of a type in one file and rewrote the whole\nfile on each change, with no reload — the shape that let concurrent holders\nerase each other's writes. Its last two users (remote's chat and session\nstores) moved to the database in the previous commit.\n\nPure deletion; the i\n[…]\nitself, so\nmigrating an existing install does not depend on this package.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01SJxpt2hAaroXgSaaUtqVvh",
"is_bot": false,
"headline": "chore(pkg): remove jsonstore, now that nothing uses it",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-27T03:43:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ecbbad39b54ed3ad23e7710f72c053d08d366c92",
"body": "…ite, transcripts in files\n\nRemote kept its state in JSON files beside a SQLite database that already\nheld bot settings. The defect was never \"files\": it was ONE file holding\nevery chat or every session, rewritten whole on each write. Each holder\nloaded it at open and clobbered the others, every que\n[…]\nd\n.design/remote-storage.md records the neutral-package fix as follow-up.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01SJxpt2hAaroXgSaaUtqVvh",
"is_bot": false,
"headline": "refactor(remote): split remote state by access pattern — index in SQL…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-27T03:43:15Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1a40ce7e0b85e2fd98e2cc418082719b28648241",
"body": "Three independent data-integrity bugs in the remote subsystem's JSON-file\nstorage. Each is fixed here without touching the schema, so this ships on\nits own ahead of the SQLite migration planned in .design/remote-storage.md.\n\n1. Concurrent bots erased each other's chats. runBotWithSettings opened a\n \n[…]\nndalone bot vs server) is out of scope here — that needs\nthe SQLite move.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01SJxpt2hAaroXgSaaUtqVvh",
"is_bot": false,
"headline": "fix(remote): stop losing chat/session state and close a path traversal",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-26T13:53:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a23523be05c5a1be855aa206ae9961b27edecbe0",
"body": "## Why\n\nThe IM Notify page answered a question nobody asks — *\"which scenario\nroutes point at this bot?\"* — and answered it read-only, with a `No\nroutes` chip that read as broken and a disabled `+ Attach a route\n(soon)` affordance.\n\nThe question an operator actually has is: **\"what can I send to, ri\n[…]\nrcisable in mock mode offline.\n\n## Verification\n\n- `pnpm exec tsc --noEmit` — clean\n- `pnpm exec vitest run` — 34 passed\n- `pnpm lint` — no new warnings\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(notify): turn the IM Notify page into a bot control surface (#1444)",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-26T09:47:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cafbfff55c663bc8e87a3e0643036677439e95ce",
"body": "## Why\n\nAn operator can connect a bot but has no way to drive it from anything\nother than a chat window. `/tingly/:scenario/*` is the Claude-Code hook\npath — scenario-scoped, `ModelAuthMiddleware`-gated gateway traffic — so\nit is the wrong door for \"my CI wants to ping my bot\".\n\n## The API\n\nA contro\n[…]\ntouched file\n\nDesign notes: `.design/bot-interaction-api.md`.\n\n---\n_Generated by [Claude\nCode](https://claude.ai/code/session_01UfSRr4ZqVvEowS6RSgTTpP)_\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(notify): add the authenticated bot interaction API (#1443)",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-26T09:44:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "86bcfa960d747d66e25ab43ffaea7daeaac98cb9",
"body": "## Why\n\nThe bot list was a stack of cards while every other resource in the\nproduct (API keys, providers) is a table — and the card had nowhere to\nput the bot's **UUID**, the value the `/api/v1/bots/:bot/*` endpoints\ntake in their path. An identifier the operator cannot see is an API they\ncannot cal\n[…]\nnew warnings\n- `go build ./internal/... ./remote/...` — clean\n\n---\n_Generated by [Claude\nCode](https://claude.ai/code/session_01UfSRr4ZqVvEowS6RSgTTpP)_\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(bots): replace the bot cards with a resource table (#1442)",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-26T09:44:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7e7204be75e944733ef3b485f01656f1cbb31962",
"body": "## What\n\n`chat_id` was the wire name for two unrelated things:\n\n- **`BotSetting.ChatIDLock`** — an operator-imposed restriction: \"only\naccept messages from this chat\".\n- **`Chat.ChatID`** — the channel-native identifier of an actual\nconversation.\n\nOne word, two meanings. This is the name collision `\n[…]\npm exec tsc --noEmit` — clean\n- `pnpm lint` — no new warnings\n\n---\n_Generated by [Claude\nCode](https://claude.ai/code/session_01UfSRr4ZqVvEowS6RSgTTpP)_\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(bots): serialize ChatIDLock as chat_id_lock (#1441)",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-26T09:39:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2e570ffea44311c5db77d859e85b8714a49d4ff1",
"body": "… format (#1439)\n\nPhase 2b of `.design/imbot-platform-seams.md` — the one step that\ntouches the callback protocol, which is why it was split out from #1435.\n\n## The problem\n\nButtons were identified by `callback_data`: a colon-joined string capped\nat 64 bytes. That is Telegram's transport encoding. T\n[…]\nt a regression risk.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01QbXSY3DYEhpre9hrVQagkt\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(imbot) 2b: button identity is a payload, not Telegram's wire…",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-26T08:29:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "24555a2420f66ed963e20ee86bdc3ef00a0ec318",
"body": "…(#1440)\n\n## Summary\n\n- Removed the \"Models by Token Usage\" side panel from the main Usage\nDashboard — it duplicated the \"Usage by Model\" table below it (same\n`group_by=model` query, same per-model granularity), just as a ranked\nbar view instead of a table with more columns. Chart pane is now full\nw\n[…]\nctor didn't change\nbehavior\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\n\nhttps://claude.ai/code/session_019ykZbsGfgQzNKG4iHT5hS1\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(UI): Fix and redesign the usage dashboard's Team Usage page …",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-26T03:33:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "afa7b8e5bcbd3823a91cf27b098299382ca5b6ad",
"body": "…438)\n\n## Summary\n\n**Paste & detect** (paste a `.env`/curl/JSON blob → box extracts the URL\nand key candidates → pre-fill the provider form) was stuck in\nonboarding's tab.\n\nThis PR surfaces it as a card in the **Connect AI** picker so the\nshortcut works wherever a provider is added. No backend or ex\n[…]\neal backend (`/api/v1/onboarding/extract`); in\nmock mode it shows the error UI by design.\n- Verified: picker tests pass, `oxlint` + `tsc` clean. Manual E2E\nagainst real backend is the remaining check.",
"is_bot": false,
"headline": "feat(connect-ai): surface Paste & detect in the Connect AI picker (#1…",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T07:02:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "027f381c7879f89b01390289981a3e18d8024d99",
"body": "**Stack 3 of 3, last one.** Based on `main`.\n\n1. ~~#1434 — ownership moves~~ ✅ merged\n2. ~~#1435 — neutral outbound actions~~ ✅ merged\n3. **this PR** — capability table and message restating\n\n## Capability table\n\n`core.PlatformDescriptor` gains a `Behavior` record\n(`RequiresPairingByDefault`, `Suppr\n[…]\ne four\nintended subtrees appears in the diff. #1434 and #1435 were assembled\nfrom explicit file lists and were never affected — verified against\n`main`.\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(imbot) 3/3: capability table and message restating (#1436)",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-25T06:51:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b203cb8af4f8b456108e2967c97f43276ef0622b",
"body": "…ugh (#1437)\n\n## Summary\n\nSmall OpenAI, Anthropic, and Google-style badges on routing-graph\nservice nodes previously used semi-transparent backgrounds\n(`alpha(color, 0.1)`). Since the badges are positioned absolutely over\nthe node’s own provider name text, that text showed through the\nbadge—making i\n[…]\n` (no\nalpha channel) in every theme—for example, sunlit OpenAI: `rgb(220, 245,\n249)`, sunlit Anthropic: `rgb(250, 234, 229)`.\n- Visual screenshots confirm solid backgrounds with no text\nbleed-through.",
"is_bot": false,
"headline": "fix(ui): make API-style badges opaque so node text doesn't bleed thro…",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T06:44:25Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "db8735318b124001edcc3f4546174c085f76a74f",
"body": "…(#1435)\n\n**Stack 2 of 3.**\n\n1. ~~#1434 — ownership moves~~ ✅ merged\n2. **this PR** — neutral outbound actions (now based on `main`)\n3. #1436 — capability table and message restating (based on this PR)\n\n## Root cause\n\n> imbot abstracts **inbound** messages (`core.Message` normalisation)\nand the **se\n[…]\n. That decoding existed only\nbecause `remote_control` pre-rendered a Telegram payload for every\nplatform, so the behaviour it pinned is gone on purpose.\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(imbot) 2/3: neutral outbound actions, rendered per platform …",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-25T06:06:20Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ea31d965be95181b7452b6e4e6cb1c5cca134178",
"body": "…#1434)\n\n**Stack 1 of 3.** Splits the platform-seam work into reviewable units;\neach depends on the one before because the dependencies are real.\n\n1. **this PR** — ownership moves\n2. #1435 — neutral outbound actions (needs the Feishu renderer moved\nhere)\n3. #1436 — capability table and message resta\n[…]\nf the stack: `imbot/tests/` sits behind the\n`e2e` build tag, so a plain `go test ./...` does not compile it and can\nlook green while the tree is broken.\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(imbot) 1/3: move platform-owned code out of remote_control (…",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-25T05:58:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "35d5bdaff915d9488b085d1c388c0071be6026ad",
"body": "…and 1M toggle (#1432)\n\n## Summary\n\nIn two cases, the Codex and Claude Code config modals silently discarded\nthe user's applied settings: the Codex modal reset to defaults every\ntime it opened (it had no way to read back the applied settings), and\ntoggling 1M context on a rule reopened the modal sho\n[…]\nip test that pins\nthe preference read/write pair against drift), frontend build and lint\nclean, and the test suites verified to leave the developer's actual\n`~/.claude` and `~/.codex` files untouched.",
"is_bot": false,
"headline": "fix(config): scenario modals preserve applied settings across reopen …",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T02:42:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "576a77932a8fda35b1959b45e62e862d3616ff72",
"body": "… helper (#1422)\n\n## Summary\n\nThe `agentboot` package previously included a parallel callback\nparadigm, a Claude-specific root dependency (session store, config\nfields, permission constants), duplicate launch contracts, and unused\nlegacy control plumbing — all remnants of speculative generality\nintr\n[…]\noved. Importers that used\n`agentboot.Event` directly should switch to `common.Event`.\n- The 21-commit history includes incremental design doc updates\nalongside code; squashing on merge is recommended.",
"is_bot": false,
"headline": "refactor(agentboot): provider-neutral runtime with Claude composition…",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:20:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "778809150ef951aaf9f1ab8d2fb4c4deda36d6d2",
"body": null,
"is_bot": false,
"headline": "doc: update stream-json schema.",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bedda61bcc2caab6d568f0e07f6274f3cdedbc00",
"body": null,
"is_bot": false,
"headline": "docs: define profile and session control precedence",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "38e5932ab327ec38a913302b1b3c23812c79ed7d",
"body": null,
"is_bot": false,
"headline": "fix: synchronize default agent resolution",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86eb84464fcdde9fdb2b98e3386c1426b2b0d2b8",
"body": null,
"is_bot": false,
"headline": "fix: preserve terminal success during cleanup",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2c4c2622cd64ebbe351186114e389ccc2b3a6c3f",
"body": null,
"is_bot": false,
"headline": "fix: preserve Claude profile execution semantics",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3e2a5eaf765452511dcb3bf47ea9f0c23c03edc6",
"body": null,
"is_bot": false,
"headline": "docs: finalize provider-neutral agentboot layout",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9eb0938a6a2a8e7ef7cc08213518765170564636",
"body": null,
"is_bot": false,
"headline": "refactor: use one raw agent event contract",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2eca4b537201e32e8f0d4ea849290b143a9abad5",
"body": null,
"is_bot": false,
"headline": "refactor: remove provider assumptions from agent core",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "32baa0fa2e6f81575da60557e22daa8c8db3967a",
"body": null,
"is_bot": false,
"headline": "docs: record completed agentboot boundaries",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cac338bf2e97c1fbba3c73f7e78de9ad5849adbe",
"body": null,
"is_bot": false,
"headline": "refactor: remove legacy Claude launcher path",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d22a0c7cfe16c4157bbc18cf1a4e43868fd50960",
"body": null,
"is_bot": false,
"headline": "refactor: keep registry operations behind service",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f6274d252c6c42fdb3afe7808f6d56312f67fd95",
"body": null,
"is_bot": false,
"headline": "refactor: unify agent runtime contracts",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f44bcdf45df8ce649b895f7e2478a8541eea3709",
"body": null,
"is_bot": false,
"headline": "refactor: inject agent session history",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a7d507670beaa7b183a361f7232a8c1a73dd3bd0",
"body": null,
"is_bot": false,
"headline": "docs: describe the agentboot runtime layout",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dd731cfa11721399e493c1727f8e275ac1f0861b",
"body": null,
"is_bot": false,
"headline": "test: run Claude builder coverage by default",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3cd5d11dafc882fa16d550be525ce2001bcd9cd0",
"body": null,
"is_bot": false,
"headline": "refactor: separate Claude message responsibilities",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8fed4c85ac082612354337bf7a1798fbcc9a7a8c",
"body": null,
"is_bot": false,
"headline": "refactor: separate Claude CLI discovery helpers",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3ad4796e5f5385c1b5ebe663f76618b1ac6b2e4e",
"body": null,
"is_bot": false,
"headline": "refactor: separate runner execution layout",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86a6c70926d169c92547cd5836ffa2afbace4cc2",
"body": null,
"is_bot": false,
"headline": "refactor: organize agentboot public models",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T01:14:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e294b56709fb28c9cfb5c0a1074e8a3872b04b2f",
"body": null,
"is_bot": false,
"headline": "config: add claude opus 5 (#1431)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-25T00:37:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "958cee311b2cbe733184effd71848b0ab5256a07",
"body": "…env-boot cost (#1430)\n\n## Summary\n\n`internal/protocoltest`'s CLI matrix (`cli/harness matrix`) had five\nsections — single-hop, transitive, idempotent, flags, content_shapes —\neach re-implementing the same env-per-scenario/case scaffolding, and the\nCLI's `--mode` dispatch was a manually-maintained i\n[…]\ness-matrix.md` updated to document the section-driver\narchitecture and the perf changes\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nhttps://claude.ai/code/session_01H5tX87SHvPT1y1D2MWjg5U",
"is_bot": false,
"headline": "refactor+perf(harness): dedupe CLI matrix sections, parallelize, cut …",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-24T11:28:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3c2cf7a157331854e1207225a5be8b478ad4d1a0",
"body": "…plit (#1426)\n\n## Summary\nSplit the Claude Code statusline into two semantic rows:\n- Row 1 (routing + session): ruleModel @ profile, cwd\n(middle-collapsed), session title\n- Row 2 (real model + consumption): realModel @ provider | context bar |\ncost | cache | usage\n\n## Changes\n- Capture session_name \n[…]\n## Preview\n```\n cc[1m] @ default 📁 ~/.../tingly-box \"statusline-two-row-layout\" 125522 tokens\n glm-5.2 @ GLM | ▓░░░░░░░ 13% | $6.23 | Cache: 99% | Usage: 15/100 9/100 33/4000\n```",
"is_bot": false,
"headline": "feat(statusline): two-row layout with cwd, session title, and model s…",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T09:45:02Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6df30c43443255d50544a934ca5fcd120adc351e",
"body": "…nverters (#1429)\n\n## Summary\n\nFixes #1427: several OpenAI Chat Completions protocol converters read\nonly the `OfString` variant of a content union and silently dropped the\narray-of-text-blocks form (`[{\"type\":\"text\",\"text\":\"...\"}]` — valid per\nthe OpenAI spec, emitted by several agent frameworks) o\n[…]\n --mode=content_shapes` passes all 7\ncases; `--mode=all` still wires cleanly.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "bugfix(protocol): Fix array-of-text content forwarding in protocol co…",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-24T08:59:20Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bd433ff7f32a47ee889b56a6d04c46c39c67d0d6",
"body": "Code-review pass on PR #1429 (4 parallel angles: reuse, simplification,\nefficiency, altitude). Efficiency and altitude came back clean; applying the\nlow-risk, contained findings from the other two:\n\n- internal/protocoltest/content_shapes.go: collapsed the 7 test cases' repeated\n \"send → get LastReq\n[…]\ne a case or converter changes; points at contentShapeCases()\n instead.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012nLdnWi7pYZVTKt7HywuNz",
"is_bot": false,
"headline": "refactor: simplify content_shapes suite and dedup text-join helper",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-24T08:46:39Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c38257658d943740bc7941aeec930c137661760c",
"body": "…r one Remote rail icon (#1428)\n\n## Summary\n\nThe previously-hidden bot config page is now integrated into the main\nnav, restructured around three questions instead of one flat page:\n\n- **Bots** (resource) — every connected bot across every platform, in\none list. The only place credentials get typed/\n[…]\nff-state hatch overlay, brand icon color toggling)\n\n---\n_Generated by [Claude\nCode](https://claude.ai/code/session_0149Q62mEuYmpyTn9Jx5oEvZ)_\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(frontend): Rework bot IA: Bots / Remote Control / IM Notify unde…",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-24T08:39:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "26d580f3a1dc52b0105ef4c30c158bc906e1ad71",
"body": "…round-trip\n\nConvertAnthropicV1ToBetaRequest did a field-by-field Go struct copy that only\ncovered the fields smart-routing context extraction was known to read — which\nis how it silently dropped tool_result content (fixed last commit) and, as\nit turns out, image data too (OfImage was rebuilt with n\n[…]\nfor the scalar\nfields (model, thinking, system) and the nil-input case.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012nLdnWi7pYZVTKt7HywuNz",
"is_bot": false,
"headline": "refactor(protocol): replace hand-written v1→beta converter with JSON …",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-24T08:05:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6167a0fe5cd7ed287e144c8c917c91c02158f475",
"body": "…d tool_result content in v1→beta\n\nThe protocol matrix (internal/protocoltest) validates conversion fidelity by\nvarying the mocked upstream *response* shape per scenario, but every request\nit sends is the same fixed single-turn plain-string prompt (buildRequest /\nharnessPrompt) regardless of scenari\n[…]\narray form. Fixed by joining the\nresult's text blocks, with unit tests.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012nLdnWi7pYZVTKt7HywuNz",
"is_bot": false,
"headline": "test(harness): add request content-shape regression suite; fix droppe…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-24T07:58:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2d2c227d5e8fe1e4c24a43ee18863508c0a7e796",
"body": "…easoning_effort\n\nOpenAI Chat Completions messages whose content is an array of text blocks\n(allowed by the spec, emitted by several agent frameworks) were dropped and\nforwarded upstream as an empty string, so the model saw empty tool results —\npresenting as badly degraded agent performance (#1427).\n[…]\nrray-content forms and reasoning_effort forwarding for\nboth converters.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012nLdnWi7pYZVTKt7HywuNz",
"is_bot": false,
"headline": "fix(protocol): forward array-form tool/system/assistant content and r…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-24T07:40:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0927dddb0f9e88d9d7cd68d6cfa06a9b90033f2e",
"body": null,
"is_bot": false,
"headline": "doc: add donation section. (#1425)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T06:12:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4913c9a38d11f83a0c20fd305ad4e1f8d052f988",
"body": "…n edit mode (#1424)\n\nIn the provider edit dialog, clicking a preset chip would replace the\nprovider's name with the preset's alias/name. The name autofill gate\n(nameIsAutoFilled) starts true on open, so in edit mode — where the name\nalready belongs to the user — selecting a preset silently overwrote it.\n\nRestrict name auto-fill to add mode; in edit mode a preset selection\nonly affects the URL/protocol configuration and leaves the name\nuntouched.",
"is_bot": false,
"headline": "fix(frontend): stop preset selection from overwriting provider name i…",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T06:00:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "34c1b2b26c9532ffbda3165fe46e6d797ea837d4",
"body": "… and accessibility across pages (#1423)\n\n## Summary\n\nA systematic frontend refactoring improves component reuse,\naccessibility, and visual consistency across the UI. Three new shared\ncomponents are introduced, a proper heading hierarchy is established on\nevery page, and throwaway inline patterns ar\n[…]\ne codebase.\n- **TypeScript config**: Adds a `@/bindings` path alias and excludes\ngenerated `src/client` from compilation.\n- **Test types**: Vitest mock types use the cleaner `Mock` / `Mocked`\nimports.",
"is_bot": false,
"headline": "refactor(frontend): standardize shared components, heading semantics,…",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T03:50:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9f90a92bcec7270d05cae00cebdcbc61c357959c",
"body": "Accessibility:\n- ApiKeyTable, OAuthTable: add aria-labels on icon buttons\n- PageLayout loading: add role='status' aria-label\n\nStyle cleanup:\n- UserUsagePage: migrate color/fontWeight inline props to sx\n- QuotaInlineDisplay / QuotaRawResponseDialog: migrate Stack align props to sx\n\nMisc:\n- ModelsPanel: replace raw alert() with notify.warning()\n- useProviderModels.test: use vitest Mock/Mocked type imports\n- tsconfig: add @/bindings path alias, exclude src/client",
"is_bot": false,
"headline": "chore: accessibility, style cleanup, and misc improvements",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T03:47:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b1677192b173cd10d071439b4f97dd84eabf66ad",
"body": "…log a11y across pages\n\nPage structure:\n- GuardrailsPage / AgentOverviewPage: replace inline header with PageHeader\n- All scenario Use* pages: add titleHeadingLevel={1} for proper <h1> hierarchy\n- Onboarding, SharingKeys, Groups, History, Rules, Experimental, System,\n MCPLocalMode, MCPRegisteredSer\n[…]\nider cards\n- Replace hardcoded badge colors with MUI tone palette (primary/success/warning/error)\n- Fix typo: 'preseted' → 'pre-configured'\n- Add aria-labelledby on dialog, aria-labels on icon buttons",
"is_bot": false,
"headline": "refactor: adopt PageHeader, heading semantics, and ConnectProviderDia…",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T03:47:25Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1fa48d16da27e0ed5a90529d405a099dddd2c1a0",
"body": "- Delete EmptyStateGuide.tsx (legacy component with hardcoded hero icon)\n- Switch all consumers to EmptyState with primaryAction prop API\n- Affected pages: CredentialPage, VirtualModelsPage, PlatformBotPage,\n PlatformRemoteAgentPage, RulesPage, TemplatePage",
"is_bot": false,
"headline": "refactor: replace EmptyStateGuide with EmptyState across all pages",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T03:47:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "67ee168334e55707df6ec73ab2375e7494969fb1",
"body": "…DialogHeader\n\n- Extract skillGrouping utilities (formatFileSize, getRelativePath, getTwoLevelDisplayName, groupSkillsIntelligently) to separate module\n- Add DeleteSkillLocationDialog to replace raw confirm() prompts\n- SkillPage: adopt PageHeader for header section\n- AddSkillLocationDialog / AutoDiscoveryDialog: adopt DialogHeader for consistent dialog headers",
"is_bot": false,
"headline": "refactor: extract SkillPage grouping logic, add delete dialog, adopt …",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T03:47:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c77314677f0da92ac4d48f5a877bf39b82a5734d",
"body": "…ifiedCard (heading semantics)\n\n- PageHeader: add optional icon prop, render title as <h1>\n- PageLayout: delegate header rendering to PageHeader, add loading role='status'\n- UnifiedCard: add titleHeadingLevel prop for proper heading hierarchy",
"is_bot": false,
"headline": "feat: enhance PageHeader (icon), PageLayout (uses PageHeader), and Un…",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T03:47:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c12e285aca3294a10fe74d92d1fff837d01ea77",
"body": "- EmptyState: reusable empty-state placeholder (replaces EmptyStateGuide)\n- ConfirmDialog: generic confirmation dialog\n- DialogHeader: unified dialog title bar with close button\n- All components include unit tests",
"is_bot": false,
"headline": "feat: add EmptyState, ConfirmDialog, DialogHeader shared components",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T03:46:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "446eb6a3bee12df45f1a78c42e199a98f8bd6edd",
"body": "## Summary\n\nStreaming responses that ended without a protocol terminal marker could\npreviously be presented as successful, allowing clients to accept\npartial text or tool calls. This change preserves the failure across\npassthrough and protocol-conversion paths and makes the harness verify\nthe behavi\n[…]\nmine the turn outcome.\n- **Partial output**: Clients may have rendered partial text before\nreceiving the error. They must not execute incomplete tool calls or\ntreat the turn as successfully completed.",
"is_bot": false,
"headline": "bugfix(harness): surface truncated streams as failures (#1418)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T03:33:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "aec06b04d6622c1869a4fb6964fe4e355be273e6",
"body": "…#1421)\n\n## Summary\n\nClaude Code executions now keep mutable protocol state isolated per run\nand handle terminal, process, and protocol failures predictably. This\nprevents overlapping bot chats from influencing each other while making\nCLI discovery and permission behavior match the real Claude Code\n\n[…]\nouts, decoder failures, CLI discovery, and permission-mode\nhandling.\n\n## Notes\n\n- **Working tree artifacts**: Local untracked files are intentionally\nexcluded from this branch comparison and PR scope.",
"is_bot": false,
"headline": "refactor(agentboot): isolate Claude executions and harden lifecycle (…",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T02:24:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7d058daf34755516b57cbc9994ad2e9e1b39820c",
"body": null,
"is_bot": false,
"headline": "fix: preserve Claude permission semantics",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T00:30:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0acf7d1a5891b695da98f841febf9a6b17cd5a53",
"body": null,
"is_bot": false,
"headline": "fix: align Claude Code protocol constants",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T00:30:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5b0069898f977c72fdb87f610597f113afde2cc9",
"body": null,
"is_bot": false,
"headline": "fix: verify Claude Code CLI discovery",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T00:30:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "970c0bd29ba33cb6687f71f97ec5300da908fc27",
"body": null,
"is_bot": false,
"headline": "fix: propagate agentboot execution failures",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T00:30:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "88218c9195e23c0600c5549f3475118fe4079234",
"body": null,
"is_bot": false,
"headline": "refactor: isolate agentboot execution state",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-24T00:30:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "412060827e1667fe41d0c490e507fc47e3191823",
"body": "…ion (#1419)\n\n## Summary\n\nExtends the remote @cc agent to support Claude Code profiles, allowing\nusers to route remote executions through a named profile (with its own\nrouting rules, unified/separate mode, and env overrides) instead of\nalways using the main `claude_code` scenario. This mirrors the l\n[…]\nvoids the flicker loop that occurred when tall content\ncollided with viewport edges.\n\nhttps://claude.ai/code/session_012ohyr8RK6FUTYBCcp5UPez\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(remote): Add Claude Code profile selection for remote @cc execut…",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-23T12:41:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9a63a8fad9db157aaf5b27a87f24b4593d8b04b6",
"body": null,
"is_bot": false,
"headline": "feat(UI): improve team usage dashboard (#1417)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-23T08:53:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dfa3330e677860a468a23e8e621b57daf1c37d31",
"body": "…s — decouple lifecycle, remote agent, and notify (#1405)\n\n## Problem\n\nA bot was hard-wired to one purpose: remote control of Claude Code.\n`bot.Manager` required the agent service + session manager, and the\n`remote.channel.Channel` serving `/tingly/:scenario/notify` scenario\nplugins was a side effec\n[…]\nsed onto main (`9d414da` — includes the zero-argument tool schema\nfix for @tb).\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01Gj8ap5Hpqg7bjXwwv4SRLe",
"is_bot": false,
"headline": "refactor(bot): bot = resource, channel = surface, consumers = purpose…",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-23T07:56:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1ff3ff2dfb7dcafec0285ad421061aeedd3a4990",
"body": "The consolidated design record for the bot subsystem: the three-layer model\n(bot resource → host-owned channel → consumer purposes) with all ASCII\ndiagrams (big map, switch ladder enabled→mounted→attached→running,\nfour-state mount table, Scenarios column anatomy, both round-trip flows,\ndispatch orde\n[…]\nthe frontend IA including the\nBots-hidden state and its graduation plan.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Gj8ap5Hpqg7bjXwwv4SRLe",
"is_bot": false,
"headline": "docs(design): bot architecture record (bot-arch.md)",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-23T07:43:15Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4930c4ad1423993045b7b239140b5a79e0568820",
"body": "…ts nav hidden\n\nMirror the backend resource/purpose split in the IA as two sections with\nIDENTICAL per-platform pagination, then show only the one that answers\ntoday's user question:\n\n- Remote (/remote-agent/:platform, nav label \"Remote\"/\"远程\"): the purpose\n pages, with the full original composition\n[…]\nverflow menu,\npairing panel, direct /bots/* access with the nav hidden).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Gj8ap5Hpqg7bjXwwv4SRLe",
"is_bot": false,
"headline": "feat(frontend): twin Bots/Remote sections; Remote self-sufficient, Bo…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-23T07:42:59Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "895b1b3b91214247dc60a7c876ba2c62dfc51289",
"body": "…concile\n\nExpose the mount switch over the API and keep the two switches feeling like\none:\n\n- CreateRequest/UpdateRequest gain remote_agent (*bool). Honored on BOTH\n create and update via binding.SetScenarioEnabled; turning the mount on\n cascades Enabled=true so one flip lights the bot up.\n- Updat\n[…]\n the bot manager.\n- openapi.json regenerated for the new request fields.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Gj8ap5Hpqg7bjXwwv4SRLe",
"is_bot": false,
"headline": "feat(imbot): remote_agent mount API with enable cascade; any-mount re…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-23T07:42:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4f62e009cf8f023142a48d9666094d0cd21d4ff2",
"body": "…consumer purposes\n\nThe bot lifecycle was fused to remote control: bot.Manager required the\nagent service + session manager, the remote.channel.Channel serving\n/tingly/:scenario/notify was a side effect of the remote-agent handler, and\nreply routing was buried in its HandleMessage. Restructure into \n[…]\n still registers/unregisters its\nchannel), and the mount-gate lifecycle.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Gj8ap5Hpqg7bjXwwv4SRLe",
"is_bot": false,
"headline": "refactor(bot): three-layer split — bot resource, host-owned channel, …",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-23T07:41:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e6e93b30e10096848328fcf60451e881681e05b9",
"body": "Bindings gain an Enabled switch so the per-bot Scenarios list can carry\npurpose mounts alongside scenario routes:\n\n- Binding.Enabled (*bool): nil means \"on\" so bindings written before the\n switch existed keep working; explicit false turns a mount off.\n- RemoteAgentScenario (\"remote_agent\"): the inb\n[…]\nts unknown fields verbatim.\n\nTruth-table tests for all three predicates.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Gj8ap5Hpqg7bjXwwv4SRLe",
"is_bot": false,
"headline": "feat(binding): per-bot mount switches for purposes",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-23T07:41:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9d414da046daaf298628d39b6791be5d62b249e7",
"body": "## Summary\n\nFix Smart Guide requests failing with an invalid schema error when\nforwarding zero-argument tools such as `get_status` through an\nOpenAI-compatible provider.\n\n## Root Cause\n\nSmart Guide defines `get_status` as a zero-argument Anthropic tool.\nDuring Anthropic → OpenAI conversion, the empt\n[…]\nl`.\n\nThese providers require the function schema to be a JSON object or\nboolean and reject the request with:\n\n```text\nInvalid schema for function 'get_status': null is not of types \"boolean\", \"object\"",
"is_bot": false,
"headline": "bugfix(smart-guide): fix zero-argument tool schema forwarding (#1415)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-23T07:08:59Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bf4785fd68ce8aa4085734ab01bdefafe5152ccf",
"body": null,
"is_bot": false,
"headline": "fix(statusline): use canonical cache usage fields in tests (#1414)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-23T06:40:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e4108acdb4ba9bb97d6c472744975430985ba29c",
"body": "…faults (#1411)\n\n## What & why\n\nAdds a **sequence** virtual model to `vmodel` — a synthetic provider\nthat walks a configured program of per-request outcomes (e.g. `200, 200,\n429`) to simulate a *flaky* upstream. This is the temporal complement to\nthe existing always-fail error mocks: those fail ever\n[…]\n/server` LB/failover/breaker/affinity suite green.\n\n---\n_Generated by [Claude\nCode](https://claude.ai/code/session_01W6htkA7bPMTg9k1ph3rQVt)_\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(vmodel): configurable sequence virtual model + config-driven lb …",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-23T06:38:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "767e69e675a431c548b827cfc9fee63eccf3491e",
"body": "…g in parallel with the unified quota. (#1413)\n\n<img width=\"1115\" height=\"489\" alt=\"image\"\nsrc=\"https://github.com/user-attachments/assets/a08183ac-09f3-4fa1-9ca5-832b91a07c6f\"\n/>",
"is_bot": false,
"headline": "feat(quota): store quota fetcher raw response as details for reviewin…",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-23T06:23:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e5a936a96d9c681d9255d681034572bffe716629",
"body": "ref:\nhttps://github.com/MoonshotAI/kimi-code/blob/527d485d9296fe20f473a4a578d9e6a499c20cd9/packages/oauth/src/managed-usage.ts",
"is_bot": false,
"headline": "feat(quota): add kimi code oauth quota fetcher (#1412)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-23T06:12:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f3d3251b6cef9f471269fda44afaa67d35faef7c",
"body": "… (#1410)\n\n## Summary\n\nRefactor `internal/servertest` to reuse the shared `vmodel/benchmark`\ninfrastructure, eliminate unsafe developer-config access, and keep test\nruntime deterministic and bounded.\n\n## Changes\n\n### Shared benchmark infrastructure\n\n- Add exact URL-path hit counting and request capt\n[…]\n## Validation\n\n```text\ngo test ./vmodel/benchmark ./internal/testguard -count=1 -timeout=20s\nok github.com/tingly-dev/tingly-box/vmodel/benchmark\nok github.com/tingly-dev/tingly-box/internal/testguard",
"is_bot": false,
"headline": "refactor(test): unify servertest mocks and isolate test configuration…",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-23T04:54:18Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "531e6593eb4fabacd15b1546fedabaa0b9648129",
"body": "## Summary\n\nThe Image Playground previously disabled generation while a request was\nrunning, forcing users to wait between experiments. This change allows\nmultiple image generations to run concurrently while keeping each\nrequest and result clearly identifiable.\n\n## Key Changes\n\n- **Parallel generati\n[…]\nses the active\nrequest count.\n- Verified both requests complete independently without changing\nsubmission order.\n- Verified the Playground panels remain 300px and aligned during\nconcurrent generation.",
"is_bot": false,
"headline": "feat(imagegen): allow parallel playground generations (#1409)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-23T04:06:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1b70159b032da1ca4a3400069c54ef00f26f1f4f",
"body": "## Summary\n\nAdd a User Usage page to the dashboard for inspecting usage across every\nregistered user, including the primary account and sharing users.\n\n## What changed\n\n- Add User Usage navigation and routing.\n- Display all registered users, including a synthesized primary-account\nentry.\n- Show per-\n[…]\n src/pages/UserUsagePage.tsx`\n- [x] `pnpm build:dev`\n- [x] `git diff --check`\n- [x] Verified wide desktop layout\n- [x] Verified mobile layout and detail navigation\n- [x] Verified light and dark themes",
"is_bot": false,
"headline": "feat(dashboard): add per-user usage insights (#1408)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-23T04:04:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b7c8d3da6609cfef5c284e55e9de56ecf7895d46",
"body": null,
"is_bot": false,
"headline": "bugfix(UI): constrain image playground layout (#1407)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-23T03:38:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4d77cd831aba6bcdbefdbaaae4a2b0bf0a2b7a63",
"body": "…tanceSpec contract (#1406)\n\n## Summary\n\nRefactors the parent↔child boot contract for duo test instances from a\nscatter of `TINGLY_DUO_*` environment variables to a single JSON-encoded\n`duoInstanceSpec` carried in `TINGLY_DUO_SPEC`. This makes the duo boot\nparameters explicit and type-safe, mirrorin\n[…]\npdated `.design/harness-duo.md` to document the new typed contract\nand its benefits.\n\nhttps://claude.ai/code/session_01GMkUmjGr8FkKMUKcKX9nff\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(harness, duo): Replace duo env-var scatter with typed duoIns…",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-23T00:57:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "13d330ca6b09468c9e46087f0be468f7a95d1564",
"body": "…(#1404)\n\n## Summary\n\nThe Wails3 desktop GUI window opened blank because client-side routes\nlike `/login/<token>` had no matching file in the embedded frontend\nbundle. The Wails asset server returned a 404, leaving the webview\nempty.\n\nAdditionally, the GUI module no longer built after the\n`internal/\n[…]\nssets for `alpha2.114`.\n- **Build polish**: Excluded `*_test.go` from dev-mode watched/copy\nglobs; updated copyright to `© 2026, Tingly Dev`.\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "bugfix(gui): fix wails3 desktop GUI blank page and restore the build …",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-22T14:33:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fb62ed87e375b9af55a76528711f2a35018b45b0",
"body": "…esponses (#1403)\n\n## Summary\n- Replace the full-page blank spinner shown while\n`useScenarioPageInternal` loads (providers + rules) with a\nshape-matching `ScenarioPageSkeleton`, wired into all 13 \"Use `<Agent>`\"\npages (claude_code, codex, vscode, xcode, openai, anthropic, opencode,\nembed, imagegen, \n[…]\nms+ delay — a fast (<200ms) mock response shows\nnothing before the real content\n\n---\n\nhttps://claude.ai/code/session_016cuovPiw8kZ3ACkVk63fqk\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(scenario-pages): skeleton loading + avoid loading-flash on fast r…",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-22T14:25:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "36940bfc4fe033dc5c483f736a2f2e13d650355a",
"body": "…t (#1384) (#1385)\n\n## Summary\nFixes issue #1384 where Server-Sent Events (SSE) streams were being\nprematurely terminated when they exceeded the HTTP server's\n`WriteTimeout`. The connection deadline was being enforced from request\nstart, killing long-running streams before they could send their\nterm\n[…]\nady fail on the unmodified branch.\n\nhttps://claude.ai/code/session_018A5uEv7k9RUDMSLkNM88Br\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>\nCo-authored-by: FFengIll <fengyouzheng@gmail.com>",
"is_bot": false,
"headline": "fix(server): stop killing long SSE streams at http.Server WriteTimeou…",
"author_name": "andreasfoo",
"author_login": "andreasfoo",
"committed_at": "2026-07-22T14:08:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ca200d7ed0836955ada8cbebf487a909630d5c4e",
"body": null,
"is_bot": false,
"headline": "ci: update github action. (#1402)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-22T11:43:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "47da73a1003dcbb7dc998477d195e943b77e6ec9",
"body": "## Summary\n\nAdd persistent, profile-specific Claude Code configuration overrides\nwhile keeping generated settings files as rebuildable runtime artifacts.\n\n## What changed\n\n- Persist only the delta between inherited Claude Code settings and\nprofile overrides, including explicit removals.\n- Resolve pr\n[…]\nlled executable.\n\n## Testing\n\n- `go test ./internal/agent ./internal/server/config\n./internal/server/module/configapply ./internal/server/module/scenario`\n- `pnpm test -- claudeCodePrefsState.test.ts`",
"is_bot": false,
"headline": "feat(cc): add persistent Claude Code profile overrides (#1382)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-22T06:23:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0f5553036b3308384f5d774658fb60e88c6721c7",
"body": "…(#1400)\n\n## Summary\n\nReplace hand-rolled \"use this value if it's set, else fall back\"\nconditionals with the standard library `cmp.Or` (Go 1.21+) across the\ncode that builds and applies Claude Code's statusline, and clean up a\nfew adjacent rough edges found while touching these files.\n\n## Changes\n\n-\n[…]\nlectConfigFiles` fix, both showing\ncorrect output before merging into the tree.\n\n---\n\nhttps://claude.ai/code/session_016fcoX43aN5gomP5qnEmD5N\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(cc): simplify Claude Code statusline apply path with cmp.Or …",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-22T04:39:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d92d4474290176f3b37714aa866e3e36946320d4",
"body": "## Background\n\nIn a user-reported deep-research session (workflow `wf_0d5129cb-8d6`), 3\nout of 37 `mcp_web_search` calls returned \"silently empty\" results — the\noutput contained only the `# Web Search Results for: ...` header line\nwith no result entries, and `is_error` was not set.\n\nSession-transcri\n[…]\nhappens elsewhere in the gateway chain\nand deserves a separate investigation.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(mcp): stop web search from silently returning empty results (#1398)",
"author_name": "andreasfoo",
"author_login": "andreasfoo",
"committed_at": "2026-07-22T03:03:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "156a535cc62442a64d036ec8e6db5ba0cac3fc9f",
"body": "…1399)\n\n<img width=\"2382\" height=\"1470\" alt=\"image\"\nsrc=\"https://github.com/user-attachments/assets/43a56cb0-69d8-4efc-aaac-837b70c9718e\"\n/>",
"is_bot": false,
"headline": "bugfix: in codex hybrid, should set `requires_openai_auth = true`. (#…",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-21T12:58:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fa39dfdd2df86b3a0a49ab3fa8518cdb477ace80",
"body": "## Summary\nThe Quick Start card (`AgentSetupCard`, shared by Claude Code / Codex /\nVS Code / OpenCode) rendered the active step as a taller,\nbordered/tinted \"card\" while other steps stayed flat single-line rows —\nvisually inconsistent and noisier than needed.\n\n## Changes\n- Removed the border/backgro\n[…]\nVerified in mock mode across the 1/4, 2/4, and 3/4 progress states;\n`oxlint` and `tsc --noEmit` show no new issues introduced by this\nchange.\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refine(ui): flatten Quick Start step rows (#1397)",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-21T09:36:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "472656d222676058aff3f01cfaf0abd789406ec5",
"body": "## Summary\n\nOptimize and clean up the `pkg/` subpackages: auth, daemon, jsonstore,\nlock, network, notify, obs.\n\n**`pkg/*` is importable by any external Go module** (unlike\n`internal/*`, which the Go toolchain enforces as private), so exported\nsymbols and accepted config values are treated as a real \n[…]\nated to this branch)\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_013FfaHtzYnz1dKP6ZofAXzg\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(pkg): Optimize and clean up non-otel pkg subpackages (#1377)",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-21T09:35:03Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "118a13bf31d09103543e795cf1845a6153be297e",
"body": "…tead of font-weight (#1396)\n\n## Summary\nPrevents visual layout shift in tab buttons when selected by replacing\ndynamic `fontWeight` toggling with a `textShadow` technique that\nsimulates bold text without affecting glyph metrics.\n\n## Changes\n- **Fixed layout stability**: Changed `fontWeight` from dy\n[…]\ndth remains stable while maintaining the visual\ndistinction between active and inactive states.\n\nhttps://claude.ai/code/session_01NUn3tNk2W8hzs5V8zEgvH9\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "bugfix(UI): Fix tab label shift on selection by using text-shadow ins…",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-21T09:04:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "75c5a0c9b944b0106dcae1ab1e2f58c093b6e67e",
"body": "OPENAI_GO_VERSION: \"tingly-dev-v3.44.0\"\nANTHROPIC_SDK_GO_VERSION: \"tingly-dev-v1.58.0\"\nGO_GENAI_VERSION: \"upstream-v1.64.0\"",
"is_bot": false,
"headline": "libs: update (#1395)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-21T08:05:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "836cfb58d11e80055287339e26ed8c997f3ddc04",
"body": "…ansport (#1394)\n\nMoves `context-1m` beta injection out of a dedicated transport and into\nthe Anthropic clients’ request methods, controlled by the existing\n`WithContext1M` context value—the same pattern used for `User-Agent`.\n\n## Why\n\n`context1mBetaTransport` was attached to every `NewAnthropicClie\n[…]\n `context-1m`.\n\nThe injection logic is now centralized in the request layer instead of\nbeing split into a transport that did not cover all client paths.\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(client): inject context-1m via ctx kv, drop the dedicated tr…",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-21T07:16:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5662dbe3e373988517f4fb1f48d9c852803c34c5",
"body": null,
"is_bot": false,
"headline": "ci: fix frontend build error. (#1393)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-21T06:20:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8e2613f3ac80db3a15348f379e5fc9acbc9f27fe",
"body": "…A (#1391)\n\n## Summary\n\nRestructure outbound User-Agent handling to respect the real caller's\nidentity on generic clients while keeping vendor-specialized clients'\npinned handshake UAs decisive and unconfigurable.\n\n**Core change:** The generic pass-through clients (OpenAI, non-OAuth\nAnthropic) now r\n[…]\nest chain\nensures it cannot be accidentally polluted by rule flags or client UA.\n\n**\n\nhttps://claude.ai/code/session_01M2NSPuQE4UbyBFCHLuNY4n\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Refactor User-Agent handling: forward inbound client UA, pin vendor U…",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-21T04:14:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "72abfc3d294d955781c2af0e6e8c1f10640fd0e6",
"body": null,
"is_bot": false,
"headline": "build: update frontend package and lock. (#1392)",
"author_name": "FFengIll",
"author_login": "FFengIll",
"committed_at": "2026-07-21T03:27:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9b4d862d34ede013cc22c1f0e8b4364b1ce27342",
"body": "… (#1389)\n\nRemoves the `provider.UserAgent` field and its plumbing. Outbound\nUser-Agent is a request-path concern, not provider config.\n\n**Why:** `provider.UserAgent` was injected into the transport chain (via\n`wrapWithUserAgent`, incl. `createSessionBoundTransport` — the base of\nevery vendor/OAuth \n[…]\nnd `.design/rule-flags.md`\n§8/§11.\n\n**Compat:** providers are JSON with no `user_agent` DB column — a stale\nkey is ignored on load, no migration needed.\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(client, provider): remove provider-level User-Agent override…",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-21T03:09:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "10893225599b51e2be92c99570dfd50a5a61e5df",
"body": "## Summary\n- Retook all 9 `docs/images/` product screenshots + 3 theme previews +\n`output.gif` at 1440×900, on a fresh branch off latest `main`, in\nproduct-story order: dashboard → agents → connect-ai → model-select →\nclaude-code → routing → remote → guardrails → heatmap.\n- Fixed the \"Connect AI\" bu\n[…]\np renders the Activity calendar)\n- [x] Regenerated `output.gif` from the 9 shots, confirmed 9 frames in\norder\n\n---\n_Generated by [Claude\nCode](https://claude.ai/code/session_016HvDjTqYfqLtgTjfoiJg1W)_",
"is_bot": false,
"headline": "chore: retake docs screenshots, fix broken routes and mock data (#1390)",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-21T03:05:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6f48387169a8543339962eefc972265250cde729",
"body": "## Summary\n\nComb through and refactor the `imbot` module. `imbot/` is a standalone\nGo module (wired into the main module via a `replace` directive) and a\ndeliberately-public library, so the guiding principle here is: **remove\ninternal duplication and dead code, collapse scattered metadata into a\nsin\n[…]\nel/imchannel`\n- `gofmt` / `go vet` clean\n- ~400 net lines of source removed\n\nNo `task codegen` needed (no API/swagger/frontend changes).\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)",
"is_bot": false,
"headline": "refactor(imbot): comb through and de-duplicate the imbot module (#1388)",
"author_name": "Caster",
"author_login": "0x0079",
"committed_at": "2026-07-21T02:28:48Z",
"body_truncated": true,
"is_coding_agent": true
}
],
"releases_count": 100,
"commits_last_year": 2552,
"latest_release_at": "2026-07-24T04:00:30Z",
"latest_release_tag": "v0.260723.1",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 36,
"days_since_latest_release": 3,
"mean_days_between_releases": 1.6
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "github.com/tingly-dev/tingly-box",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/tingly-dev/tingly-box",
"is_deprecated": false,
"latest_version": "v0.260723.1",
"repository_url": "https://github.com/tingly-dev/tingly-box",
"versions_count": 204,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-24T03:50:29Z",
"latest_version_yanked": null,
"days_since_latest_publish": 3
}
]
},
"popularity": {
"forks": 35,
"stars": 332,
"watchers": 0,
"fork_history": {
"days": [
{
"date": "2026-01-04",
"count": 1
},
{
"date": "2026-01-06",
"count": 1
},
{
"date": "2026-01-07",
"count": 1
},
{
"date": "2026-01-09",
"count": 1
},
{
"date": "2026-01-16",
"count": 1
},
{
"date": "2026-01-18",
"count": 2
},
{
"date": "2026-01-26",
"count": 1
},
{
"date": "2026-01-27",
"count": 1
},
{
"date": "2026-02-06",
"count": 2
},
{
"date": "2026-02-27",
"count": 1
},
{
"date": "2026-03-11",
"count": 1
},
{
"date": "2026-03-23",
"count": 1
},
{
"date": "2026-03-31",
"count": 1
},
{
"date": "2026-04-12",
"count": 1
},
{
"date": "2026-04-20",
"count": 1
},
{
"date": "2026-04-21",
"count": 2
},
{
"date": "2026-04-25",
"count": 2
},
{
"date": "2026-04-27",
"count": 1
},
{
"date": "2026-04-28",
"count": 1
},
{
"date": "2026-05-15",
"count": 1
},
{
"date": "2026-05-16",
"count": 1
},
{
"date": "2026-05-18",
"count": 1
},
{
"date": "2026-05-19",
"count": 1
},
{
"date": "2026-05-30",
"count": 1
},
{
"date": "2026-06-15",
"count": 1
},
{
"date": "2026-06-26",
"count": 1
},
{
"date": "2026-07-04",
"count": 1
},
{
"date": "2026-07-08",
"count": 1
},
{
"date": "2026-07-19",
"count": 1
},
{
"date": "2026-07-23",
"count": 1
},
{
"date": "2026-07-26",
"count": 1
}
],
"complete": true,
"collected": 35,
"total_forks": 35
},
"star_history": null,
"open_issues_and_prs": 54
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"example",
"examples"
],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": true,
"bootstrap_files": [
"Taskfile.yml",
"build/Taskfile.yml",
"build/darwin/Taskfile.yml",
"build/linux/Taskfile.yml",
"build/windows/Taskfile.yml",
"imbot/Makefile"
],
"api_schema_files": [
"openapi.json"
],
"has_devcontainer": false,
"typecheck_configs": [
"frontend/tsconfig.json"
],
"toolchain_manifests": [
"afk/go.mod",
"agentboot/go.mod",
"ai/go.mod",
"go.mod",
"gui/wails3/go.mod",
"imbot/go.mod",
"swagger/go.mod"
],
"largest_source_bytes": 146889,
"source_files_sampled": 1813,
"oversized_source_files": 7,
"agent_instruction_files": [
"CLAUDE.md"
],
"agent_instruction_max_bytes": 4148
},
"dependencies": {
"manifests": [
"afk/go.mod",
"agentboot/go.mod",
"ai/go.mod",
"frontend/package.json",
"go.mod",
"imbot/go.mod",
"swagger/go.mod",
"tests/requirements.txt"
],
"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": [
"go",
"npm",
"pypi"
],
"dependencies": [
{
"name": "github.com/anthropics/anthropic-sdk-go",
"manifest": "afk/go.mod",
"ecosystem": "go",
"version_constraint": "v1.57.0"
},
{
"name": "github.com/pkg/errors",
"manifest": "afk/go.mod",
"ecosystem": "go",
"version_constraint": "v0.9.1"
},
{
"name": "github.com/sirupsen/logrus",
"manifest": "afk/go.mod",
"ecosystem": "go",
"version_constraint": "v1.9.4"
},
{
"name": "github.com/stretchr/testify",
"manifest": "afk/go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "gopkg.in/yaml.v3",
"manifest": "afk/go.mod",
"ecosystem": "go",
"version_constraint": "v3.0.1"
},
{
"name": "github.com/anthropics/anthropic-sdk-go",
"manifest": "agentboot/go.mod",
"ecosystem": "go",
"version_constraint": "v1.57.0"
},
{
"name": "github.com/google/uuid",
"manifest": "agentboot/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/sirupsen/logrus",
"manifest": "agentboot/go.mod",
"ecosystem": "go",
"version_constraint": "v1.9.4"
},
{
"name": "github.com/stretchr/testify",
"manifest": "agentboot/go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "go.uber.org/goleak",
"manifest": "agentboot/go.mod",
"ecosystem": "go",
"version_constraint": "v1.3.0"
},
{
"name": "github.com/golang-jwt/jwt/v5",
"manifest": "ai/go.mod",
"ecosystem": "go",
"version_constraint": "v5.3.1"
},
{
"name": "github.com/google/uuid",
"manifest": "ai/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/openai/openai-go/v3",
"manifest": "ai/go.mod",
"ecosystem": "go",
"version_constraint": "v3.42.0"
},
{
"name": "github.com/sirupsen/logrus",
"manifest": "ai/go.mod",
"ecosystem": "go",
"version_constraint": "v1.9.4"
},
{
"name": "github.com/tingly-dev/tingly-box",
"manifest": "ai/go.mod",
"ecosystem": "go",
"version_constraint": "v0.260423.0"
},
{
"name": "golang.org/x/net",
"manifest": "ai/go.mod",
"ecosystem": "go",
"version_constraint": "v0.56.0"
},
{
"name": "gorm.io/driver/sqlite",
"manifest": "ai/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "gorm.io/gorm",
"manifest": "ai/go.mod",
"ecosystem": "go",
"version_constraint": "v1.31.2"
},
{
"name": "@ant-design/x-markdown",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^2.8.0"
},
{
"name": "@lobehub/icons-static-svg",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^1.94.0"
},
{
"name": "@mui/icons-material",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^9.2.0"
},
{
"name": "@mui/material",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^9.2.0"
},
{
"name": "@mui/x-date-pickers",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^9.10.0"
},
{
"name": "@tabler/icons",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^3.45.0"
},
{
"name": "@tabler/icons-react",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^3.45.0"
},
{
"name": "@types/react",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^19.2.17"
},
{
"name": "@types/react-transition-group",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^4.4.12"
},
{
"name": "date-fns",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^4.4.0"
},
{
"name": "devicons-react",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^1.5.0"
},
{
"name": "i18next",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^26.3.6"
},
{
"name": "i18next-browser-languagedetector",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^8.2.1"
},
{
"name": "openai",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^6.48.0"
},
{
"name": "openapi-fetch",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^0.17.0"
},
{
"name": "prism-react-renderer",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^2.4.1"
},
{
"name": "qrcode.react",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^4.2.0"
},
{
"name": "react",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^19.2.7"
},
{
"name": "react-dom",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^19.2.7"
},
{
"name": "react-i18next",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^17.0.10"
},
{
"name": "react-router-dom",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^7.18.1"
},
{
"name": "react-transition-group",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^4.4.5"
},
{
"name": "recharts",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^3.10.0"
},
{
"name": "uuid",
"manifest": "frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^14.0.1"
},
{
"name": "github.com/tingly-dev/tingly-box/afk",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-00010101000000-000000000000"
},
{
"name": "github.com/tingly-dev/tingly-box/agentboot",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-00010101000000-000000000000"
},
{
"name": "github.com/tingly-dev/tingly-box/ai",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-00010101000000-000000000000"
},
{
"name": "github.com/tingly-dev/tingly-box/imbot",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-00010101000000-000000000000"
},
{
"name": "github.com/tingly-dev/tingly-box/swagger",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-00010101000000-000000000000"
},
{
"name": "github.com/anthropics/anthropic-sdk-go",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.57.0"
},
{
"name": "github.com/openai/openai-go/v3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v3.42.0"
},
{
"name": "google.golang.org/genai",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.63.0"
},
{
"name": "github.com/alecthomas/kong",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.15.0"
},
{
"name": "github.com/bmatcuk/doublestar/v4",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v4.10.0"
},
{
"name": "github.com/charmbracelet/bubbles",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.0.0"
},
{
"name": "github.com/charmbracelet/bubbletea",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.3.10"
},
{
"name": "github.com/charmbracelet/lipgloss",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.1.1-0.20250404203927-76690c660834"
},
{
"name": "github.com/fsnotify/fsnotify",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.1"
},
{
"name": "github.com/gen2brain/beeep",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.11.2"
},
{
"name": "github.com/gin-gonic/gin",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.12.0"
},
{
"name": "github.com/gobwas/glob",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.2.3"
},
{
"name": "github.com/golang-jwt/jwt/v5",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v5.3.1"
},
{
"name": "github.com/google/uuid",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/larksuite/oapi-sdk-go/v3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v3.9.7"
},
{
"name": "github.com/mark3labs/mcp-go",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.55.1"
},
{
"name": "github.com/mattn/go-sqlite3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.14.47"
},
{
"name": "github.com/modelcontextprotocol/go-sdk",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.1"
},
{
"name": "github.com/pelletier/go-toml/v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.4.3"
},
{
"name": "github.com/pkg/browser",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20240102092130-5ac0b6a4141c"
},
{
"name": "github.com/sirupsen/logrus",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.9.4"
},
{
"name": "github.com/spf13/cobra",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.2"
},
{
"name": "github.com/stretchr/testify",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "github.com/tidwall/gjson",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.19.0"
},
{
"name": "github.com/tidwall/sjson",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.2.5"
},
{
"name": "github.com/tiktoken-go/tokenizer",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.8.0"
},
{
"name": "go.opentelemetry.io/otel",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.44.0"
},
{
"name": "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.44.0"
},
{
"name": "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.44.0"
},
{
"name": "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.44.0"
},
{
"name": "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.44.0"
},
{
"name": "go.opentelemetry.io/otel/metric",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.44.0"
},
{
"name": "go.opentelemetry.io/otel/sdk",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.44.0"
},
{
"name": "go.opentelemetry.io/otel/sdk/metric",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.44.0"
},
{
"name": "go.opentelemetry.io/otel/trace",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.44.0"
},
{
"name": "go.opentelemetry.io/proto/otlp",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.0"
},
{
"name": "golang.org/x/crypto",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.53.0"
},
{
"name": "golang.org/x/net",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.56.0"
},
{
"name": "golang.org/x/sync",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.21.0"
},
{
"name": "golang.org/x/sys",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.46.0"
},
{
"name": "google.golang.org/protobuf",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.36.11"
},
{
"name": "gopkg.in/natefinch/lumberjack.v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.2.1"
},
{
"name": "gopkg.in/yaml.v3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v3.0.1"
},
{
"name": "gorm.io/driver/sqlite",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "gorm.io/gorm",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.31.2"
},
{
"name": "github.com/bwmarrin/discordgo",
"manifest": "imbot/go.mod",
"ecosystem": "go",
"version_constraint": "v0.29.0"
},
{
"name": "github.com/go-telegram/bot",
"manifest": "imbot/go.mod",
"ecosystem": "go",
"version_constraint": "v1.20.0"
},
{
"name": "github.com/larksuite/oapi-sdk-go/v3",
"manifest": "imbot/go.mod",
"ecosystem": "go",
"version_constraint": "v3.9.7"
},
{
"name": "github.com/open-dingtalk/dingtalk-stream-sdk-go",
"manifest": "imbot/go.mod",
"ecosystem": "go",
"version_constraint": "v0.9.1"
},
{
"name": "github.com/slack-go/slack",
"manifest": "imbot/go.mod",
"ecosystem": "go",
"version_constraint": "v0.19.0"
},
{
"name": "github.com/stretchr/testify",
"manifest": "imbot/go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "github.com/tingly-dev/weixin",
"manifest": "imbot/go.mod",
"ecosystem": "go",
"version_constraint": "v0.2.0"
},
{
"name": "github.com/yuin/goldmark",
"manifest": "imbot/go.mod",
"ecosystem": "go",
"version_constraint": "v1.7.16"
},
{
"name": "golang.org/x/net",
"manifest": "imbot/go.mod",
"ecosystem": "go",
"version_constraint": "v0.56.0"
},
{
"name": "github.com/gin-gonic/gin",
"manifest": "swagger/go.mod",
"ecosystem": "go",
"version_constraint": "v1.12.0"
},
{
"name": "github.com/stretchr/testify",
"manifest": "swagger/go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
}
],
"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": 24,
"merged_prs": 1151,
"open_issues": 30,
"closed_ratio": 0.852,
"closed_issues": 173,
"closed_unmerged_prs": 45
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "FFengIll",
"commits": 1682,
"avatar_url": "https://avatars.githubusercontent.com/u/7359555?v=4"
},
{
"type": "User",
"login": "0x0079",
"commits": 290,
"avatar_url": "https://avatars.githubusercontent.com/u/235246507?v=4"
},
{
"type": "User",
"login": "claude",
"commits": 278,
"avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
},
{
"type": "User",
"login": "andreasfoo",
"commits": 148,
"avatar_url": "https://avatars.githubusercontent.com/u/11532557?v=4"
},
{
"type": "User",
"login": "seviezhou",
"commits": 112,
"avatar_url": "https://avatars.githubusercontent.com/u/15180789?v=4"
},
{
"type": "User",
"login": "KrabsWong",
"commits": 15,
"avatar_url": "https://avatars.githubusercontent.com/u/12368943?v=4"
},
{
"type": "User",
"login": "richardxx",
"commits": 11,
"avatar_url": "https://avatars.githubusercontent.com/u/1880553?v=4"
},
{
"type": "User",
"login": "Chee-0806",
"commits": 8,
"avatar_url": "https://avatars.githubusercontent.com/u/188958937?v=4"
},
{
"type": "User",
"login": "huajiankan",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/95409452?v=4"
},
{
"type": "User",
"login": "PawiX25",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/81538700?v=4"
}
],
"contributors_sampled": 12,
"top_contributor_share": 0.659
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"docker-npx.yml",
"harness-matrix.yml",
"homepage.yml",
"npm.yml",
"release.yml"
],
"has_docs_dir": true,
"linter_configs": [
"eslint.config.js"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum",
"package-lock.json",
"pnpm-lock.yaml"
],
"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": 0,
"reason": "0 out of 16 merged PRs checked by a CI test -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/16 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 5 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "11 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "30afbd4a856764f0d79ede27d2ffd2ae3137a6dc",
"ran_at": "2026-07-28T00:47:04Z",
"aggregate_score": 3.6,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-27T10:10:06Z",
"oldest_open_prs": [
{
"number": 401,
"created_at": "2026-03-03T12:31:56Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 568,
"created_at": "2026-03-26T06:57:10Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 588,
"created_at": "2026-03-29T09:07:10Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 604,
"created_at": "2026-04-01T04:51:14Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 747,
"created_at": "2026-04-21T03:02:55Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 864,
"created_at": "2026-05-07T06:12:09Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 871,
"created_at": "2026-05-07T14:23:39Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 923,
"created_at": "2026-05-13T10:15:39Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 995,
"created_at": "2026-05-19T14:10:37Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1005,
"created_at": "2026-05-20T09:32:08Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1024,
"created_at": "2026-05-22T02:02:26Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1109,
"created_at": "2026-06-03T03:42:14Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1112,
"created_at": "2026-06-03T06:28:03Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1134,
"created_at": "2026-06-04T15:32:22Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1136,
"created_at": "2026-06-05T06:20:38Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1137,
"created_at": "2026-06-05T06:47:34Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1192,
"created_at": "2026-06-10T06:53:58Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1262,
"created_at": "2026-06-24T07:22:21Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1294,
"created_at": "2026-07-02T08:28:32Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1373,
"created_at": "2026-07-16T06:37:06Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-07-27T10:02:21Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 107,
"created_at": "2025-12-30T06:32:40Z",
"last_comment_at": "2026-01-19T13:38:40Z",
"last_comment_author": "richardxx"
},
{
"number": 269,
"created_at": "2026-01-31T02:03:15Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 288,
"created_at": "2026-02-03T06:24:11Z",
"last_comment_at": "2026-02-03T12:00:19Z",
"last_comment_author": "seviezhou"
},
{
"number": 369,
"created_at": "2026-02-24T06:08:54Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 415,
"created_at": "2026-03-05T05:36:01Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 456,
"created_at": "2026-03-12T06:10:46Z",
"last_comment_at": "2026-03-28T10:14:31Z",
"last_comment_author": "m13v"
},
{
"number": 487,
"created_at": "2026-03-17T00:39:53Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 503,
"created_at": "2026-03-18T14:08:46Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 523,
"created_at": "2026-03-21T04:22:01Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 534,
"created_at": "2026-03-23T07:27:40Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 560,
"created_at": "2026-03-26T01:45:58Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 564,
"created_at": "2026-03-26T03:58:21Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 678,
"created_at": "2026-04-11T11:18:34Z",
"last_comment_at": "2026-05-26T15:40:32Z",
"last_comment_author": "FFengIll"
},
{
"number": 737,
"created_at": "2026-04-19T11:12:46Z",
"last_comment_at": "2026-04-19T11:13:10Z",
"last_comment_author": "FFengIll"
},
{
"number": 828,
"created_at": "2026-05-02T13:45:59Z",
"last_comment_at": "2026-05-31T09:53:03Z",
"last_comment_author": "FFengIll"
},
{
"number": 878,
"created_at": "2026-05-08T13:41:55Z",
"last_comment_at": "2026-05-18T10:53:33Z",
"last_comment_author": "0x0079"
},
{
"number": 892,
"created_at": "2026-05-09T13:41:12Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 901,
"created_at": "2026-05-11T09:48:45Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 929,
"created_at": "2026-05-14T08:07:59Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 994,
"created_at": "2026-05-19T10:00:17Z",
"last_comment_at": "2026-05-19T10:02:35Z",
"last_comment_author": "FFengIll"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/tingly-dev/tingly-box",
"host": "github.com",
"name": "tingly-box",
"owner": "tingly-dev"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 66,
"inputs": {
"security": 36,
"vitality": 89,
"community": 61,
"governance": 63,
"engineering": 72
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 89,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 89,
"inputs": {
"commits_last_year": 2552,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 36
},
"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": "36/52 weeks with commits",
"points": 24.9,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 36
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "2552 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 2552
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"releases_count": 100,
"latest_release_tag": "v0.260723.1",
"releases_from_tags": false,
"days_since_latest_release": 3,
"mean_days_between_releases": 1.6
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "100 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 100
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 3 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 3
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~1.6 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 1.6
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 0,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 0 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 0
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 61,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "moderate",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 54,
"inputs": {
"forks": 35,
"stars": 332,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "332 stars",
"points": 40.9,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 332
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "35 forks",
"points": 12.8,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 35
}
}
],
"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": "good",
"name": "Community health",
"note": null,
"notes": [],
"value": 70,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MPL-2.0)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MPL-2.0"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 63,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "at_risk",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 12,
"top_contributor_share": 0.659
},
"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 66% of commits",
"points": 7.7,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 66
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "12 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 12
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 5 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"merged_prs": 1151,
"open_issues": 30,
"closed_issues": 173,
"issue_closed_ratio": 0.852,
"closed_unmerged_prs": 45
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "85% of issues closed",
"points": 39.8,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 85
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "1151/1196 decided PRs merged",
"points": 36.8,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 1151,
"decided": 1196
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/16 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 48,
"inputs": {
"followers": 5,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "tingly-dev",
"public_repos": 28,
"account_age_days": 248
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "5 followers of tingly-dev",
"points": 5.6,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 5,
"login": "tingly-dev"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "28 public repos, account ~0 yr old",
"points": 12,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 28
}
},
{
"code": "account_age_years",
"params": {
"years": 0
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"github.com/tingly-dev/tingly-box"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 3
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on go",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "go"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 3 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 3
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "204 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 204
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 72,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 64,
"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": "5 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 5
}
}
],
"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": "eslint.config.js",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.js"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "0 out of 16 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"topics": [
"claude-code",
"gateway",
"agent",
"llm",
"orches",
"orchestration"
],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "6 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 6
}
}
],
"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": 36,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 36,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 3.6
},
"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": "0 out of 16 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/16 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 5 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "11 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 7
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "excellent",
"name": "AI Readiness",
"value": 88,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 1,
"agent_instruction_files": [
"CLAUDE.md"
],
"agent_instruction_max_bytes": 4148
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 100,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum",
"package-lock.json",
"pnpm-lock.yaml"
],
"has_dockerfile": true,
"typed_language": true,
"bootstrap_files": [
"Taskfile.yml",
"build/Taskfile.yml",
"build/darwin/Taskfile.yml",
"build/linux/Taskfile.yml",
"build/windows/Taskfile.yml",
"imbot/Makefile"
],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"frontend/tsconfig.json"
],
"agent_commit_share": 0.43,
"toolchain_manifests": [
"afk/go.mod",
"agentboot/go.mod",
"ai/go.mod",
"go.mod",
"gui/wails3/go.mod",
"imbot/go.mod",
"swagger/go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Taskfile.yml, build/Taskfile.yml, build/darwin/Taskfile.yml, build/linux/Taskfile.yml, build/windows/Taskfile.yml, imbot/Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Taskfile.yml, build/Taskfile.yml, build/darwin/Taskfile.yml, build/linux/Taskfile.yml, build/windows/Taskfile.yml, imbot/Makefile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": "eslint.config.js",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.js"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "frontend/tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "frontend/tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile, lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "43 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 43,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 146889,
"source_files_sampled": 1813,
"oversized_source_files": 7
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Go (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "7/1813 source files over 60KB",
"points": 54.8,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 1813,
"oversized": 7
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "excellent",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"example_dirs": [
"example",
"examples"
],
"has_mcp_signal": true,
"api_schema_files": [
"openapi.json"
]
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": "openapi.json",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "openapi.json"
}
}
],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 20,
"status": "met",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "example, examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "example, 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": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-28T00:47:26.779315Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/t/tingly-dev/tingly-box.svg",
"full_name": "tingly-dev/tingly-box",
"license_state": "standard",
"license_spdx": "MPL-2.0"
}