Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 20123,
"has_wiki": true,
"homepage": "https://openabdev.github.io/openab/",
"languages": {
"HCL": 3269,
"Ruby": 1763,
"Rust": 3987471,
"Shell": 2766,
"Python": 19135,
"Dockerfile": 5061,
"Go Template": 7499
},
"pushed_at": "2026-07-25T05:00:08Z",
"created_at": "2026-04-03T12:15:54Z",
"owner_type": "Organization",
"updated_at": "2026-07-27T22:00:06Z",
"description": "A lightweight, secure, cloud-native ACP harness that bridges Discord and any ACP-compatible coding CLI.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "Rust",
"significant_languages": [
"Rust"
]
},
"owner": {
"blog": null,
"name": null,
"type": "Organization",
"login": "openabdev",
"company": null,
"location": null,
"followers": 32,
"avatar_url": "https://avatars.githubusercontent.com/u/274127192?v=4",
"created_at": "2026-04-06T22:44:46Z",
"is_verified": null,
"public_repos": 5,
"account_age_days": 112
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "oabctl-pre-beta",
"kind": "other",
"published_at": "2026-07-25T04:32:04Z"
},
{
"tag": "openab-0.10.0-beta.2",
"kind": "other",
"published_at": "2026-07-23T23:36:37Z"
},
{
"tag": "openab-0.10.0-beta.1",
"kind": "other",
"published_at": "2026-07-22T02:25:48Z"
},
{
"tag": "openab-0.9.0",
"kind": "other",
"published_at": "2026-07-20T02:47:46Z"
},
{
"tag": "openab-0.9.0-beta.12",
"kind": "other",
"published_at": "2026-07-19T18:55:10Z"
},
{
"tag": "openab-0.9.0-beta.11",
"kind": "other",
"published_at": "2026-07-18T13:33:58Z"
},
{
"tag": "openab-0.9.0-beta.10",
"kind": "other",
"published_at": "2026-07-14T03:15:43Z"
},
{
"tag": "openab-0.9.0-beta.9",
"kind": "other",
"published_at": "2026-07-11T10:30:11Z"
},
{
"tag": "openab-0.9.0-beta.8",
"kind": "other",
"published_at": "2026-07-06T21:01:57Z"
},
{
"tag": "openab-0.9.0-beta.7",
"kind": "other",
"published_at": "2026-07-04T03:45:03Z"
},
{
"tag": "pre-seed-utils-v2.35.13-ghp0.3.2",
"kind": "other",
"published_at": "2026-07-01T01:42:42Z"
},
{
"tag": "openab-0.9.0-beta.6",
"kind": "other",
"published_at": "2026-06-30T04:08:56Z"
},
{
"tag": "pre-seed-utils-v2.35.12-ghp0.3.2",
"kind": "other",
"published_at": "2026-06-29T21:43:12Z"
},
{
"tag": "openab-0.9.0-beta.5",
"kind": "other",
"published_at": "2026-06-29T13:07:39Z"
},
{
"tag": "openab-0.9.0-beta.4",
"kind": "other",
"published_at": "2026-06-28T04:47:04Z"
},
{
"tag": "openab-0.9.0-beta.3",
"kind": "other",
"published_at": "2026-06-25T20:56:48Z"
},
{
"tag": "openab-0.9.0-beta.2",
"kind": "other",
"published_at": "2026-06-23T22:51:11Z"
},
{
"tag": "openab-0.9.0-beta.1",
"kind": "other",
"published_at": "2026-06-21T03:06:29Z"
},
{
"tag": "openab-0.8.5",
"kind": "other",
"published_at": "2026-06-20T22:12:38Z"
},
{
"tag": "openab-0.8.5-beta.13",
"kind": "other",
"published_at": "2026-06-19T17:17:13Z"
},
{
"tag": "openab-line-0.1.0",
"kind": "other",
"published_at": "2026-06-18T00:33:30Z"
},
{
"tag": "openab-0.8.5-beta.12",
"kind": "other",
"published_at": "2026-06-18T00:33:28Z"
},
{
"tag": "openab-0.8.5-beta.11",
"kind": "other",
"published_at": "2026-06-16T18:04:19Z"
},
{
"tag": "openab-0.8.5-beta.10",
"kind": "other",
"published_at": "2026-06-16T11:39:20Z"
},
{
"tag": "gateway-v0.6.0-rc.9",
"kind": "other",
"published_at": "2026-06-15T04:04:08Z"
},
{
"tag": "gateway-v0.6.0-rc.8",
"kind": "other",
"published_at": "2026-06-15T03:59:44Z"
},
{
"tag": "gateway-v0.6.0-rc.7",
"kind": "other",
"published_at": "2026-06-15T03:53:40Z"
},
{
"tag": "gateway-v0.6.0-rc.6",
"kind": "other",
"published_at": "2026-06-15T03:48:54Z"
},
{
"tag": "gateway-v0.6.0-rc.5",
"kind": "other",
"published_at": "2026-06-15T03:42:17Z"
},
{
"tag": "gateway-v0.6.0-rc.4",
"kind": "other",
"published_at": "2026-06-15T03:34:24Z"
},
{
"tag": "gateway-v0.6.0-rc.3",
"kind": "other",
"published_at": "2026-06-15T03:32:09Z"
},
{
"tag": "gateway-v0.6.0-rc.2",
"kind": "other",
"published_at": "2026-06-15T03:11:44Z"
},
{
"tag": "gateway-v0.6.0-rc.1",
"kind": "other",
"published_at": "2026-06-15T01:33:33Z"
},
{
"tag": "gateway-vpr1106",
"kind": "other",
"published_at": "2026-06-14T15:31:14Z"
},
{
"tag": "openab-0.8.5-beta.9",
"kind": "other",
"published_at": "2026-06-13T13:15:17Z"
},
{
"tag": "openab-0.8.5-beta.8",
"kind": "other",
"published_at": "2026-06-11T05:50:03Z"
},
{
"tag": "openab-0.8.5-beta.7",
"kind": "other",
"published_at": "2026-06-10T22:20:48Z"
},
{
"tag": "openab-0.8.5-beta.6",
"kind": "other",
"published_at": "2026-06-09T01:11:10Z"
},
{
"tag": "openab-0.8.5-beta.5",
"kind": "other",
"published_at": "2026-06-08T03:57:53Z"
},
{
"tag": "openab-0.8.5-beta.4",
"kind": "other",
"published_at": "2026-06-08T00:24:04Z"
},
{
"tag": "gateway-v0.5.4",
"kind": "other",
"published_at": "2026-06-07T20:01:43Z"
},
{
"tag": "gateway-v0.5.3",
"kind": "other",
"published_at": "2026-06-06T14:20:51Z"
},
{
"tag": "openab-0.8.5-beta.3",
"kind": "other",
"published_at": "2026-06-06T14:12:20Z"
},
{
"tag": "openab-0.8.5-beta.2",
"kind": "other",
"published_at": "2026-06-06T04:36:30Z"
},
{
"tag": "openab-0.8.5-beta.1",
"kind": "other",
"published_at": "2026-06-03T21:41:41Z"
},
{
"tag": "gateway-v0.5.2",
"kind": "other",
"published_at": "2026-06-03T19:06:07Z"
},
{
"tag": "openab-0.8.4",
"kind": "other",
"published_at": "2026-06-02T02:17:04Z"
},
{
"tag": "openab-0.8.4-beta.11",
"kind": "other",
"published_at": "2026-06-02T00:51:43Z"
},
{
"tag": "openab-0.8.4-beta.10",
"kind": "other",
"published_at": "2026-06-01T16:20:54Z"
},
{
"tag": "openab-0.8.4-beta.9",
"kind": "other",
"published_at": "2026-05-31T20:27:43Z"
},
{
"tag": "openab-0.8.4-beta.8",
"kind": "other",
"published_at": "2026-05-31T14:15:06Z"
},
{
"tag": "openab-0.8.4-beta.7",
"kind": "other",
"published_at": "2026-05-28T04:02:13Z"
},
{
"tag": "openab-0.8.4-beta.6",
"kind": "other",
"published_at": "2026-05-27T21:32:46Z"
},
{
"tag": "openab-0.8.4-beta.5",
"kind": "other",
"published_at": "2026-05-26T21:41:53Z"
},
{
"tag": "openab-feishu-0.1.0",
"kind": "other",
"published_at": "2026-05-26T01:51:02Z"
},
{
"tag": "openab-0.8.4-beta.4",
"kind": "other",
"published_at": "2026-05-26T01:51:01Z"
},
{
"tag": "openab-0.8.4-beta.3",
"kind": "other",
"published_at": "2026-05-22T23:11:56Z"
},
{
"tag": "openab-0.8.4-beta.2",
"kind": "other",
"published_at": "2026-05-22T03:56:47Z"
},
{
"tag": "openab-telegram-0.1.0",
"kind": "other",
"published_at": "2026-05-21T21:49:53Z"
},
{
"tag": "openab-0.8.4-beta.1",
"kind": "other",
"published_at": "2026-05-21T21:49:51Z"
},
{
"tag": "openab-0.8.3",
"kind": "other",
"published_at": "2026-05-20T23:21:30Z"
},
{
"tag": "openab-0.8.3-beta.13",
"kind": "other",
"published_at": "2026-05-20T23:04:51Z"
},
{
"tag": "gateway-v0.5.1",
"kind": "other",
"published_at": "2026-05-20T22:46:52Z"
},
{
"tag": "openab-0.8.3-beta.12",
"kind": "other",
"published_at": "2026-05-19T23:51:21Z"
},
{
"tag": "gateway-v0.5.0",
"kind": "other",
"published_at": "2026-05-19T23:56:17Z"
},
{
"tag": "openab-0.8.3-beta.11",
"kind": "other",
"published_at": "2026-05-17T03:26:47Z"
},
{
"tag": "openab-0.8.3-beta.10",
"kind": "other",
"published_at": "2026-05-16T06:39:51Z"
},
{
"tag": "openab-0.8.3-beta.9",
"kind": "other",
"published_at": "2026-05-13T20:28:55Z"
},
{
"tag": "openab-0.8.3-beta.8",
"kind": "other",
"published_at": "2026-05-11T18:04:24Z"
},
{
"tag": "openab-0.8.3-beta.7",
"kind": "other",
"published_at": "2026-05-11T01:50:14Z"
},
{
"tag": "openab-0.8.3-beta.6",
"kind": "other",
"published_at": "2026-05-09T18:20:28Z"
},
{
"tag": "openab-0.8.3-beta.5",
"kind": "other",
"published_at": "2026-05-09T14:30:39Z"
},
{
"tag": "openab-0.8.3-beta.4",
"kind": "other",
"published_at": "2026-05-06T20:54:01Z"
},
{
"tag": "gateway-v0.4.0",
"kind": "other",
"published_at": "2026-05-06T01:31:40Z"
},
{
"tag": "openab-0.8.3-beta.3",
"kind": "other",
"published_at": "2026-05-05T21:58:15Z"
},
{
"tag": "openab-0.8.3-beta.2",
"kind": "other",
"published_at": "2026-05-03T23:22:56Z"
},
{
"tag": "openab-0.8.3-beta.1",
"kind": "other",
"published_at": "2026-05-03T04:40:14Z"
},
{
"tag": "openab-0.8.2",
"kind": "other",
"published_at": "2026-05-01T22:39:53Z"
},
{
"tag": "openab-0.8.2-beta.8",
"kind": "other",
"published_at": "2026-05-01T16:30:06Z"
},
{
"tag": "openab-0.8.2-beta.7",
"kind": "other",
"published_at": "2026-05-01T04:55:56Z"
},
{
"tag": "openab-0.8.2-beta.6",
"kind": "other",
"published_at": "2026-05-01T01:40:17Z"
},
{
"tag": "openab-0.8.2-beta.5",
"kind": "other",
"published_at": "2026-04-30T21:37:57Z"
},
{
"tag": "openab-0.8.2-beta.4",
"kind": "other",
"published_at": "2026-04-30T13:21:10Z"
},
{
"tag": "openab-0.8.2-beta.3",
"kind": "other",
"published_at": "2026-04-29T00:37:21Z"
},
{
"tag": "openab-0.8.2-beta.2",
"kind": "other",
"published_at": "2026-04-28T20:04:11Z"
},
{
"tag": "openab-0.8.2-beta.1",
"kind": "other",
"published_at": "2026-04-27T20:24:44Z"
},
{
"tag": "openab-0.8.1",
"kind": "other",
"published_at": "2026-04-26T14:49:22Z"
},
{
"tag": "openab-0.8.1-beta.8",
"kind": "other",
"published_at": "2026-04-26T07:07:44Z"
},
{
"tag": "openab-0.8.1-beta.7",
"kind": "other",
"published_at": "2026-04-25T18:56:18Z"
},
{
"tag": "openab-0.8.1-beta.6",
"kind": "other",
"published_at": "2026-04-25T05:58:36Z"
},
{
"tag": "openab-0.8.1-beta.5",
"kind": "other",
"published_at": "2026-04-24T22:54:42Z"
},
{
"tag": "gateway-v0.3.0",
"kind": "other",
"published_at": "2026-04-24T20:34:34Z"
},
{
"tag": "gateway-v0.2.0",
"kind": "other",
"published_at": "2026-04-24T18:38:08Z"
},
{
"tag": "gateway-v0.1.0",
"kind": "other",
"published_at": "2026-04-24T17:21:59Z"
},
{
"tag": "openab-0.8.1-beta.4",
"kind": "other",
"published_at": "2026-04-24T05:36:57Z"
},
{
"tag": "openab-0.8.1-beta.3",
"kind": "other",
"published_at": "2026-04-23T06:45:17Z"
},
{
"tag": "openab-0.8.1-beta.2",
"kind": "other",
"published_at": "2026-04-22T07:32:51Z"
},
{
"tag": "openab-0.8.1-beta.1",
"kind": "other",
"published_at": "2026-04-21T17:42:46Z"
},
{
"tag": "openab-0.8.0",
"kind": "other",
"published_at": "2026-04-20T11:28:33Z"
},
{
"tag": "openab-0.8.0-beta.1",
"kind": "other",
"published_at": "2026-04-20T11:22:30Z"
}
],
"recent_commits": [
{
"oid": "53061d696148106b2b7529f9d6c5dd802dff4545",
"body": "* docs(adr): define OAB MCP adapter MVP\n\n* docs(adr): clarify OAB MCP facade boundary\n\n* docs(adr): use ASCII architecture diagrams\n\n* docs(adr): show MCP and plugin capability paths\n\n* docs(adr): clarify OpenWork capability vision\n\n* docs(adr): show OAB pod boundary\n\n* docs(adr): make pod boundary \n[…]\n— shipped outcomes vs §5/§10 assumptions\n\n---------\n\nCo-authored-by: chaodu-agent <274062505+chaodu-agent@users.noreply.github.com>\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": true,
"headline": "docs(adr): OAB MCP adapter (#1446)",
"author_name": "chaodu-obk[bot]",
"author_login": "chaodu-obk[bot]",
"committed_at": "2026-07-25T05:00:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0e8b10e0cb09fd1be781cae1b4c6905e466cb00e",
"body": "Google issues a client secret to Desktop-type clients and requires it at\nthe token endpoint (it is merely not treated as confidential) — a\nsecret-less exchange fails with invalid_request. The validated path is\nWeb application + secret; Desktop works only with both env vars set.\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "docs(gmail-native): correct the Desktop OAuth client claim (#1455)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-25T04:41:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "28a87177825623e2bb9724b30cf79f7ce8b49c53",
"body": "* feat(facade): session-aware in-process capability sources\n\n- sources module: CapabilitySource trait (optional SessionCtx per call,\n requires_session gating), SessionTokens registry (broker mints one\n opaque token per agent session, constant-time resolve, revoke on\n evict), per-request identity \n[…]\nnes now carry args_sha256 like the meta_tool\n dispatcher's — one audit shape across both dispatch paths.\n\n* style: fmt\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(facade): session-aware in-process capability sources (#1454)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-25T04:11:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2f93ad9c51010a92f3926d8f12406ecf327cb7bf",
"body": "…for subsystems (#1452)\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "docs: CLI conventions — top-level verbs for the bot, noun namespaces …",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-25T02:02:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "10d0463b1f93efaf03041b0d903ad39be84b26b3",
"body": "* docs: OAB MCP Facade operator guide\n\nDocuments the #1448 feature: enablement (broker [mcp] / standalone),\nthe two-tool surface, audit lines, client registration (incl. the kiro\n--agent config gotcha), trust model, and the pod-vs-fleet positioning\nrelative to octobroker (ADR §4.1).\n\n* docs: add mer\n[…]\nhitecture diagram to the facade guide\n\n* docs: describe facade-only run mode (replaces removed openab-agent mcp-facade)\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "docs: OAB MCP Facade operator guide (#1450)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-25T02:01:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ee49aae66b3493c0889afb776e4729d4cb58c4ad",
"body": "…alid (#1453)\n\nCloses #1451. An adapter-less config with [mcp] present now runs just the\nOAB MCP Facade listener in the foreground (one entrypoint, config-driven)\ninstead of bailing with 'no adapter configured'. The bail message now\nmentions the [mcp] option. Removes the openab-agent mcp-facade\nsubc\n[…]\nserving surfaces do not belong on the coding-agent binary\n(nothing shipped depends on it; #1449 established the openab-side home).\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(mcp): facade-only run mode — adapter-less config with [mcp] is v…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-25T02:01:11Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "189c12d4c1e06848b6f4abd7bb4777664959bcc2",
"body": "…MCP server (#1449)\n\n* feat(mcp): native Gmail adapter — six-tool §6.5 profile over Gmail REST as stdio MCP server\n\nCapability Plugin per ADR §5.3/§6.1 and rollout step 5, motivated by live\nvalidation (PR #1448): hosted Gmail MCP gates tools/call behind Workspace\nDeveloper Preview enrollment and its\n[…]\nonfig-driven\n([mcp] + openab run). Standalone/dev serving and interactive logins are\nthe namespace's job.\n\n* style: fmt\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(mcp): native Gmail adapter — §6.5 profile over GA REST as stdio …",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-25T01:56:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3149c1d327bb1e59111fb8dab93cf18acef9c9b6",
"body": "…back HTTP server (#1448)\n\n* feat(agent): OAB MCP Facade MVP — mcp-facade stdio server + tool_filter enforcement\n\nImplements the OAB MCP Adapter ADR (#1446) MVP slice in openab-agent:\n\n- New 'openab-agent mcp-facade' subcommand: inbound stdio MCP server\n exposing exactly search_capabilities / execu\n[…]\nre (incl.\nDockerfile.gateway/builder/native/agentcore, which share the pattern\nbut are outside this PR's smoke matrix).\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(mcp): OAB MCP Facade MVP — shared openab-mcp crate + broker loop…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-24T22:39:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "967270087ab74b32bcba9f6bc89a402e7abc3aca",
"body": "Co-authored-by: openab-app[bot] <274185012+openab-app[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "release: v0.10.0-beta.2 (#1445)",
"author_name": "openab-app[bot]",
"author_login": "openab-app[bot]",
"committed_at": "2026-07-23T23:36:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2c5b549245f59ee3cae1b5dafafe04e9afef8283",
"body": "* feat(acp): revive ACP server over WebSocket (#1260)\n\nRestore the ACP server adapter from the auto-closed #1260, rebased onto\nmain. Exposes OAB as an ACP server over WebSocket at `GET /acp`, gated by\nthe `acp` feature + `OPENAB_ACP_ENABLED`. Prompts are bridged to\n`GatewayEvent` and replies streame\n[…]\nan id -> -32600 (no empty-success frame); notification -> no frame + fires.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(acp): ACP server over WebSocket (revives #1260) (#1418)",
"author_name": "Brett Chien",
"author_login": "brettchien",
"committed_at": "2026-07-23T23:11:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "421f3ce27c84376c7a5f9f6d954e78e8221f985f",
"body": "* fix(feishu): start websocket in unified mode\n\n(cherry picked from commit a248a33381e6433a4e6cdcacfa0dac38aad2922a)\n\n* fix(review): address Feishu lifecycle and docs findings\n\n* fix(feishu): bound unified identity resolution\n\n* refactor(feishu): name identity timeout\n\n* fix(feishu): cfg-gate timeout constant\n\n---------\n\nCo-authored-by: SunnyYYLin <sunnylinyy@outlook.com>\nCo-authored-by: chaodu-agent <274062505+chaodu-agent@users.noreply.github.com>",
"is_bot": true,
"headline": "fix(feishu): start websocket in unified mode (#1443)",
"author_name": "chaodu-obk[bot]",
"author_login": "chaodu-obk[bot]",
"committed_at": "2026-07-23T20:43:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "136554ed1bcf90caae3a7a894d769e97f94f5cae",
"body": "* docs: document maintainer take-over of fork PRs\n\nApp installation tokens cannot push to fork branches, so maintainers\nmay take over a reviewed fork PR: cherry-pick to preserve authorship,\ncredit @username in the replacement PR description, finish remaining\nnits, merge, and close the original with \n[…]\nholder instead of real username in take-over example\n\n* docs: use noreply-email form for Co-authored-by trailer example\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "docs: document maintainer take-over of fork PRs (#1444)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-23T19:05:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fc22758322eee87ad2cd9cd26d4ae7427882500a",
"body": "…s (#1442)\n\npull_request_review runs triggered by fork PRs get a read-only\nGITHUB_TOKEN, so the label add/remove calls fail with 403\n\"Resource not accessible by integration\" (e.g. every review\nsubmitted on #1440).\n\nGuard the job: only handle pull_request_review when the PR head\nrepo is this repo. Fork PR labels stay eventually-consistent via\nthe hourly schedule / workflow_dispatch reconciliation, which runs\nwith a full token.\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "fix(ci): skip pending-maintainer label writes on fork PR review event…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-23T18:27:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "685973307bf79d6848c21b33a5bd55b6aea1c433",
"body": "Co-authored-by: openab-app[bot] <274185012+openab-app[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "release: v0.10.0-beta.1 (#1433)",
"author_name": "openab-app[bot]",
"author_login": "openab-app[bot]",
"committed_at": "2026-07-22T02:25:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a79f5e803432532a9ae812d79b11dff24c75f9f9",
"body": "PR #1429 added the kimi agent to Dockerfile.unified and to the pre-beta\nworkflow's ALL_AGENTS, but Dockerfile.package (used by pre-beta-build.yml)\nnever got the stage. Every pre-beta run since then fails both kimi build\njobs with 'target stage \"kimi\" could not be found', so\nghcr.io/openabdev/openab:\n[…]\nPY --from=bins instead of the builder stage).\n\nFixes the failed kimi jobs in runs 29776844194, 29791564121, 29830138174.\n\nCo-authored-by: chaodu-agent <274062505+chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "fix(build): add missing kimi stage to Dockerfile.package (#1432)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-21T22:09:58Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3ac3e31df66a9a504818b9aae4d89d6ff51b2aeb",
"body": null,
"is_bot": false,
"headline": "chore: upgrade Grok CLI to version 0.2.106 and update checksums (#1430)",
"author_name": "Eric Chen",
"author_login": "fshiori",
"committed_at": "2026-07-21T11:32:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d8d4bf15ca9a6e7380a5683a87527b93f527badb",
"body": "* chore: bump safe coding CLI pins\n\n* chore: bump Devin CLI to 3000.2.17\n\n* fix: close CLI pin review gaps\n\n* fix: resolve Copilot package dynamically in smoke test\n\n* fix(ci): harden CLI version smoke assertions\n\n* chore: bump kiro-cli 2.8.1 -> 2.13.0\n\nVerified on Linux x86_64 headless (Ubuntu 24.0\n[…]\ninstalled Kiro CLI version in standalone and unified images\n\n---------\n\nCo-authored-by: chaodu-agent <274062505+chaodu-agent@users.noreply.github.com>\nCo-authored-by: thepagent <hehsieh1010@gmail.com>",
"is_bot": false,
"headline": "chore: bump safe Coding CLI pins (#1427)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-21T00:52:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "654bf977f89cfcd3bf0bc1a3011e263451cf605d",
"body": "* feat: add Kimi Code CLI backend\n\n* docs: add Kimi to runtime diagrams\n\n* fix: use 'kimi login' as auth command\n\n* fix: address review findings F1-F3\n\n- align standalone Kimi image packages with unified target (add bubblewrap, socat, git)\n- correct OAuth ADR agent variant inventory (16 variants, add devin)\n- fix Kimi credential guidance: config.toml only, no shell env fallback\n\n---------\n\nCo-authored-by: chaodu-agent <274062505+chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat: add Kimi Code CLI backend (#1429)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-20T20:18:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "359001e532ba04a2c8aa07737c09d4028aafb5a8",
"body": "Co-authored-by: openab-app[bot] <274185012+openab-app[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "release: v0.9.0 (#1426)",
"author_name": "openab-app[bot]",
"author_login": "openab-app[bot]",
"committed_at": "2026-07-20T02:47:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7a88aba1ebba6a32c235e846eddad4edf9970ecb",
"body": "Co-authored-by: openab-app[bot] <274185012+openab-app[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "release: v0.9.0-beta.12 (#1425)",
"author_name": "openab-app[bot]",
"author_login": "openab-app[bot]",
"committed_at": "2026-07-19T18:51:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7faa937220fea9004542c2422579dc331faef4e2",
"body": "…a device-code OAuth (#1424)\n\n* feat(openab-agent): xAI subscription login via OAuth device-code vendor\n\nAdds SuperGrok / X Premium subscription sign-in to openab-agent:\n\n- auth.rs: XaiVendor descriptor (namespace xai-oauth) + a generic\n RFC 8628 device-code login driver shared by all DeviceCode-gr\n[…]\nl auth command\n\n* refactor: remove xai-device auth alias\n\n* fix(openab-agent): apply rustfmt to xAI auth test\n\n---------\n\nCo-authored-by: chaodu-agent <274062505+chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(openab-agent): xAI subscription login (SuperGrok / X Premium) vi…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-19T18:50:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f8e91565a4e044892515067532be9ad3100dd2b6",
"body": "Co-authored-by: chaodu-agent <274062505+chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "docs(review): add Review Contract policy (#1422)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-18T15:07:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4727ddb3d0e819ddb366bc17c94b7f4da879da19",
"body": "Co-authored-by: openab-app[bot] <274185012+openab-app[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "release: v0.9.0-beta.11 (#1421)",
"author_name": "openab-app[bot]",
"author_login": "openab-app[bot]",
"committed_at": "2026-07-18T13:33:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2e3292bc3e3e01f0fb203dc38003ad4c9afc7ca5",
"body": "…ge (#1419)\n\n* docs(claude-code): add troubleshooting for OAuth login 400 error\n\n* build(claude): bump claude-agent-acp 0.59.0 + claude-code 2.1.212\n\n* fix(claude): default OPENAB_AGENT_COMMAND to claude-agent-acp\n\nBare `claude` is the interactive REPL — it has no ACP mode and replies\nto the JSON-RP\n[…]\nefault and document --sso as an explicit\nopt-in via OPENAB_AGENT_AUTH_COMMAND override for SSO organizations.\n\n---------\n\nCo-authored-by: chaodu-agent <274062505+chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "fix(claude): ACP default command, version bumps, auth docs, CI covera…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-18T02:36:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7bead66b1de39c3e90ff011b2e69ad64317e4173",
"body": "* ci(issues)!: close unlinked stale issues instead of report-only\n\nMaintainer decision: an open issue with no linked PR after 14 days\nsignals insufficient priority. Replace the report-only triage scan\nwith comment-and-close (state_reason: not_planned).\n\n- Comment tells the reporter to reopen or file\n[…]\nad of warning.\n\n* fix(ci): roll back cancelled stale closes\n\n* fix(ci): direct stale follow-ups to new issues\n\n---------\n\nCo-authored-by: chaodu-agent <274062505+chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "ci(issues)!: close unlinked stale issues instead of report-only (#1417)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-18T02:04:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "30bc145233a202754d205b21e8529491d97b1a7c",
"body": "* ci(issues): auto-close open issues >14d old with no linked PR\n\nDaily scheduled workflow using the search qualifier\n'is:issue state:open -linked:pr created:<@today-14d'. Each match gets\na closing comment and is closed as not_planned. Safety cap of 50\ncloses per run; workflow_dispatch for manual runs.\n\n* fix(ci): make stale issue scan report-only\n\n---------\n\nCo-authored-by: chaodu-agent <274062505+chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "ci(issues): report stale issues with no linked PR (#1414)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-16T22:21:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a6bc8f147b25f0d76304817dd4c1b84722fb2ad",
"body": "…1413)\n\nThe 👀 ack on /review comments 403s with pull-requests: read\n(gh: Resource not accessible by integration) because reactions on PR\ncomments are pull-request scope. Verified in run 29466027132 — the\nreview pipeline itself worked; only the ack was silently dropped via\n|| true.",
"is_bot": false,
"headline": "fix(pr-review): grant pull-requests write for /review ack reaction (#…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-16T02:16:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a36b1ef95adf0a71fe94d48390080f908d8b583a",
"body": "…412)\n\nThe event-driven pull_request path is skipped for fork PRs (read-only\nGITHUB_TOKEN), leaving them dependent on the */5 cron schedule — which\nGitHub does not guarantee to run on time (or at all under load).\n\nAdd an issue_comment trigger: a maintainer (OWNER/MEMBER/COLLABORATOR)\ncomments \"/revi\n[…]\ner-PR concurrency group so commands don't cancel the poller\n- comment body is never interpolated into shell; only the numeric\n issue number is used\n\nThe cron schedule remains as a catch-all backstop.",
"is_bot": false,
"headline": "ci(pr-review): add /review comment command for targeted PR review (#1…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-16T02:12:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9940337c18311e15bec55477fabd59ededde7b70",
"body": "* refactor(oabctl): split operator into library + thin CLI binary\n\nExpose the operator's provisioning primitives as a library crate so\ndownstream control planes can reuse them in-process instead of shelling\nout to the CLI:\n\n- src/lib.rs: pub mods (apply, bootstrap, config, create, delete, get,\n ing\n[…]\n(operator): preserve cleanup diagnostics\n\n---------\n\nCo-authored-by: chaodu-agent <274062505+chaodu-agent@users.noreply.github.com>\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "refactor(oabctl): split operator into library + thin CLI binary (#1404)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-15T20:15:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9e1fd2f8f5b587eb4c43d0ac9342385f851ac2bd",
"body": "Co-authored-by: masami-agent <masami-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "docs: add openab-dashboard to AWESOME.md (#1406)",
"author_name": "Masami",
"author_login": "masami-agent",
"committed_at": "2026-07-15T20:11:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dab9be027b8e618f9ca5e226d2be9cbe364048d6",
"body": "…(#1408)\n\n* docs(teams): add Unified Mode section to enterprise deployment guide\n\nAdds the recommended v0.9.0+ Unified Mode deployment path:\n- No separate gateway container needed\n- OAB pod serves /webhook/teams directly on :8080\n- Helm configToml format with [teams] section\n- User trust configurati\n[…]\n(teams): fix device auth command quoting\n\n---------\n\nCo-authored-by: masami-agent <masami-agent@users.noreply.github.com>\nCo-authored-by: chaodu-agent <274062505+chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "docs(teams): add Unified Mode section to enterprise deployment guide …",
"author_name": "Masami",
"author_login": "masami-agent",
"committed_at": "2026-07-15T20:06:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3686694ab68d93cb51595209c725b4bbaef17131",
"body": "… (#1397)\n\n* fix(slack): collapse consecutive duplicate tool lines in Full display\n\nWhen claude-agent-acp calls the same tool several times in a row (e.g.\n`ToolSearch` three times to look up related MCP tools), `compose_display`\nin `ToolDisplay::Full` mode rendered one line per invocation, so Slack\n\n[…]\ncs-only. PR body updated\nseparately via the GitHub API to match the current implementation\n(`group_entries` / `render_group` split, 15 `compose_display` tests, v3\nimage digest) rather than v1 wording.",
"is_bot": false,
"headline": "fix(slack): collapse consecutive duplicate tool lines in Full display…",
"author_name": "Yen",
"author_login": "antigenius0910",
"committed_at": "2026-07-15T11:26:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f26f99a93bf624e2b26ea2bf947cce6e22ddb594",
"body": "* docs: add Kiro defined agents reference architecture\n\n* docs: add Kiro multi-agent delegation pattern\n\n* docs(kiro): add GPT-5.6 named agents\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "docs: add Kiro defined agents reference architecture (#1403)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-14T20:51:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42053108e3b7259d17c1656e384d451464f89c84",
"body": "Co-authored-by: openab-app[bot] <274185012+openab-app[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "release: v0.9.0-beta.10 (#1399)",
"author_name": "openab-app[bot]",
"author_login": "openab-app[bot]",
"committed_at": "2026-07-14T03:15:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2eb5ce1f71e8afa3f9f5dbcde2fca9b46ae98543",
"body": "…cap (#1398)\n\nDiscord rejects the entire interaction response with Invalid Form Body\nwhen any select menu option label or description exceeds 100 characters,\nsurfacing to users as 'The application did not respond'. Hit in the wild\non /models when a backend model description (claude-fable-5, ~140 cha\n[…]\nxt is cut. Applied to both label\nand description. Regression tests cover the exact in-the-wild case plus\nCJK char-boundary safety.\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "fix(discord): truncate select menu option text to Discord's 100-char …",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-14T02:50:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d85f454a87cd3e5e466329c559de85f2f3dacf63",
"body": "The reusable workflow interpolated ${{ inputs.pr_number }} and\n${{ inputs.decision }} directly into the github-script JS source:\n\n const prNumber = ${{ inputs.pr_number }};\n const decision = '${{ inputs.decision }}';\n\ninputs.decision is a free-form string (only documented by a comment as\n\"main\n[…]\n process.env values are never eval'd as code regardless\nof content, closing the injection regardless of the input's declared\ntype.\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "fix(ci): eliminate script injection in pending-decision.yml (#1395)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-13T23:25:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "65cad17090dad77305df992760ee93bceccd964b",
"body": "Found during a follow-up audit after #1393. Pins the five third-party\n(non-actions/*, non-docker/*) GitHub Actions used across this repo's\nworkflows to the commit SHA their mutable tag currently resolves to:\n\n- dtolnay/rust-toolchain@stable -> @4be7066a (branch, not a tag)\n- azure/setup-helm@v4 -> @\n[…]\n audit, verified via the GitHub API tags list\nendpoint (returns commit SHA directly, avoiding annotated-tag object\nSHA confusion).\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "ci: pin third-party actions to commit SHA (#1396)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-13T23:23:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "dd5ae46f763a4c084fd4fc11250df7a1380a9c30",
"body": "* fix(ci): harden release-pr workflow against expression injection\n\nThe `Resolve version` step directly interpolated the free-form\n`inputs.version` string into a shell script via `${{ inputs.version }}`.\nBecause GitHub Actions expands `${{ }}` before bash sees the script, a\ncrafted version input suc\n[…]\n with actionlint (only pre-existing\nfinding remains) and a scanner asserting zero tainted interpolations\nin run blocks.\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "fix(ci): harden release-pr workflow against expression injection (#1393)",
"author_name": "Yen",
"author_login": "antigenius0910",
"committed_at": "2026-07-13T22:19:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4f981966791be5a8e5c3cce63599193084102f9f",
"body": "…query (#1392)\n\n* feat(discord): add /usage slash command backed by kiro-cli ACP usage query\n\nAdds a Discord /usage slash command that reports the backend agent's\naccount-level usage and billing (plan, credits consumed vs limit,\noverage charges, billing cycle reset).\n\n- protocol.rs: UsageReport/Usag\n[…]\nimal embed as the green/red color strip with the billing-cycle\nfooter. Pinned by usage_reply_body_in_content_not_embed.\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(discord): add /usage slash command backed by kiro-cli ACP usage …",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-13T22:01:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ef12dcd1fdf7a4c179565f7237489ffdb803784d",
"body": "…e (#1391)\n\n* feat(gateway)!: route standalone WS path through the shared trust gate\n\nPhase 1c prerequisite (#1356): the standalone-gateway WebSocket path\n(run_gateway_adapter) now enforces L2 (channel scope) and L3 (identity)\nvia the same per-platform trust registry as the unified path, instead\nof \n[…]\nied path (axum/bridge task context) awaits it directly as\nbefore. Rationale documented on the enum and both call sites.\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(gateway)!: route standalone WS path through the shared trust gat…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-13T19:33:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f89e9feee60a4ca82b9aa94a7e39935c87c8f73b",
"body": null,
"is_bot": false,
"headline": "fix(googlechat): enable config-only startup (#1390)",
"author_name": "Can",
"author_login": "canyugs",
"committed_at": "2026-07-13T18:28:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e1aaabf1dd61a0626c9e881b5484b542ae5c75b7",
"body": null,
"is_bot": false,
"headline": "fix(wecom): enable config-only unified startup (#1389)",
"author_name": "Can",
"author_login": "canyugs",
"committed_at": "2026-07-13T16:36:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a249d0dd9a6bc7b1cf4963d77b47e9c4e3c96b7",
"body": "* feat(cron): support Google Chat platform for scheduled messages\n\n* fix(cron): googlechat enablement check is config-first\n\nThe platform-configured check read only the GOOGLE_CHAT_ENABLED env\nvar, so a deployment enabling the platform via `[googlechat] enabled =\ntrue` (first-class section, #1383) w\n[…]\nilure is pre-existing on main, unrelated.)\n\n---------\n\nCo-authored-by: shaun-agent <265093149+shaun-agent@users.noreply.github.com>\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(cron): support Google Chat platform for scheduled messages (#1374)",
"author_name": "shaun-agent",
"author_login": "shaun-agent",
"committed_at": "2026-07-13T12:05:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "024666498b538bf6b6127991c72c5e68df347307",
"body": "* docs(adr): first-class per-platform config & trust-none default\n\nPropose promoting all gateway-connected platforms (Telegram, LINE,\nFeishu, WeCom, Google Chat, MS Teams) to top-level config sections,\nmatching the existing [discord] and [slack] structure.\n\nKey decisions:\n- Per-platform [telegram], \n[…]\ns-platform-config.md link in\nthe already-merged identity-trust-none ADR.\n\n---------\n\nCo-authored-by: 超渡法師 <chaodu-agent@openab.dev>\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "docs(adr): first-class per-platform configuration (#1263)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-13T11:13:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "024f98930ed71ebefcb242be4c1463ff5d31fadd",
"body": "* docs(adr): revise identity-trust-none to three-layer architecture\n\nReceiver → Trust Gate → Handler replaces the previous\n'gate at handle_message()' design. Addresses all findings\nfrom the PR #1263 mob review (howie + 3 LLM reviewers).\n\nKey changes:\n- §4.2: Trust Gate is a dedicated ingress layer u\n[…]\ntandalone WS path still on should_skip_event, tracked on #1356).\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@openab.dev>\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "docs(adr): revise identity-trust-none — three-layer architecture (#1291)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-13T11:12:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bb335d1f8dda1eefb3fc35dec5aee95385520543",
"body": "* test(gateway): config-first conformance guard (#1375)\n\nCloses the last open item on the config-first parity umbrella: a\nsource-scan conformance test (same pattern as the platform-schema\nsuite) asserting every platform env var referenced in this crate is in\nthe canonical covered set — i.e. has a co\n[…]\nents flag conservatively, prose fails the charset\n filter, escaped-quote mis-pairs produce garbage that is filtered).\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "test(gateway): config-first conformance guard (#1375) (#1387)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-13T10:59:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e1c1a276d6d5b3853dc0eca1666d0598e0a4f6cc",
"body": "…id formats, is_bot no-op (#1386)\n\nThree findings from canyugs/openab#18, all verified:\n\n- Callback mode is DM-only (channel_type always \"direct\", per-user\n channel id) — L2 scoping via allowed_channels is meaningless for\n WeCom; verified at wecom.rs:1059-1071.\n- allowed_users format caveat: plain\n[…]\nrs for WeCom; SenderInfo.is_bot is the ready source when bot\n detection lands.\n\nRefs #1358 (tracked follow-ups). Credit: canyugs.\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "docs(platforms): wecom quirks from external review — DM-only L2, ISV …",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-13T04:09:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ea79608afa631a8e2c4387cf29a516430a4a57ce",
"body": "* feat(feishu): full [feishu] section — all settings config-first\n\nFinal platform slice of the config-first parity umbrella (#1375):\nFeishu had no section at all — 21 settings were env-only. The new\n[feishu] section covers credentials, connection, behavior, and L3\nidentity trust, resolving each fiel\n[…]\n exercised end-to-end by\napply_feishu_config_requires_credentials.\n\n* style(feishu): last rustfmt spot in resolve_pairs\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(feishu): full [feishu] section — all settings config-first (#1385)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-13T03:29:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a5a33b2a40df1520d49ca5ed3e49cad991e5b1c2",
"body": "…irst (#1384)\n\n* feat(teams): full [teams] section — credentials + connection config-first\n\nFourth platform slice of the config-first parity umbrella (#1375):\n[teams] graduates from the shared PlatformTrustConfig to a dedicated\nTeamsConfig carrying app_id, app_secret, allowed_tenants,\noauth_endpoint\n[…]\n.md\n\nCloses #1380. Refs #1375. Stacked on #1383.\n\n* docs(config): PlatformTrustConfig is now the shared trust-view type\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(teams): full [teams] section — credentials + connection config-f…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-13T02:43:13Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "51ff4d2c621fab4d5e325da858d28af034e9613e",
"body": "…n config-first (#1383)\n\n* feat(googlechat): full [googlechat] section — credentials + connection config-first\n\nThird platform slice of the config-first parity umbrella (#1375):\n[googlechat] graduates from the shared PlatformTrustConfig to a\ndedicated GoogleChatConfig carrying enabled, sa_key_json, \n[…]\n\n\nCloses #1379. Refs #1375. Stacked on #1382.\n\n* docs(config): drop graduated [googlechat] from PlatformTrustConfig doc\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(googlechat): full [googlechat] section — credentials + connectio…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-13T02:22:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "dc87565049591e05a775df814866595297c856a2",
"body": "…irst (#1382)\n\n* feat(wecom): full [wecom] section — credentials + connection config-first\n\nSecond platform slice of the config-first parity umbrella (#1375):\n[wecom] graduates from the shared PlatformTrustConfig to a dedicated\nWecomConfig carrying corp_id, secret, token, encoding_aes_key,\nagent_id,\n[…]\ns #1378. Refs #1375. Stacked on #1381.\n\n* docs(config): drop graduated [wecom] from PlatformTrustConfig doc (review F1)\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(wecom): full [wecom] section — credentials + connection config-f…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-13T01:46:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fb46840144c6073fd223ebe42511b9511f159914",
"body": "…st (#1381)\n\n* feat(line): full [line] section — credentials + connection config-first\n\nFirst platform slice of the config-first parity umbrella (#1375):\n[line] now carries channel_secret, channel_access_token, and\nwebhook_path alongside the trust fields, resolving each field\nconfig → LINE_* env → d\n[…]\nlosing code fence had prose on the same line, so the block never\nclosed and the following paragraph rendered inside it.\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(line): full [line] section — credentials + connection config-fir…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-13T01:00:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9af9fcde9c86a565e6f8abffc7c65604a8228df6",
"body": "…e 1) (#1373)\n\n* feat(gateway): warn when webhook L1 auth is unenforceable (#1356 Phase 1)\n\nAudit finding (contributor suggestion on #1356): webhook platforms skip\nL1 transport authentication when their secret is unconfigured, and in\nthat state the per-platform allowed_users (L3) allowlist is forgea\n[…]\non, the unified binary passes true. Tests updated; inactive\nstate stays unflagged even with the route reported mounted.\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(gateway): warn when webhook L1 auth is unenforceable (#1356 Phas…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-12T20:29:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6338ec5bbfb694d33d684459ce3af97e1f1fe560",
"body": "…(Phase 1) (#1366)\n\n* feat(trust): [wecom]/[googlechat]/[teams] first-class trust sections (Phase 1)\n\nClone the [line] pattern to the three remaining gateway platforms via a\nshared PlatformTrustConfig (allow_all_users/allowed_users with\n{PREFIX}_ALLOW_ALL_USERS / {PREFIX}_ALLOWED_USERS env fallbacks\n[…]\nthe LINE override stays\nbespoke instead of using platform_trust_override (group-policy fields\nland on LineConfig next).\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(trust): [wecom]/[googlechat]/[teams] first-class trust sections …",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-12T12:39:11Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b68c17d9d07f7ba0eb43a42810b624b8abc5ea0b",
"body": "Release notes highlights relevant to OpenAB:\n- fixed 'agy -p' hanging when run inside a subprocess by no longer\n reading stdin when a prompt is provided via flag\n- fixed print mode silently exiting 0 with empty output on server-side\n failures; errors now go to stderr with a non-zero exit code\n- --\n[…]\n4}.tar.gz); no breaking\nchanges for the OAB integration.\n\nhttps://github.com/google-antigravity/antigravity-cli/releases/tag/1.1.1\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "build(antigravity): bump agy CLI 1.0.10 -> 1.1.1 (#1371)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-12T01:53:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8cd545ccb653669bc5e30987394258db5d32ff8e",
"body": "* fix(acp): map legacy Codex mode ids\n\nPreserve existing default_config_options values when an ACP agent advertises the renamed Codex modes. Leave other agents and custom values unchanged.\n\nRefs #1352\n\n* build(codex)!: migrate ACP adapter\n\nInstall agentclientprotocol/codex-acp 1.1.2 with Codex 0.144\n[…]\nAstra | VixenClaws Leader <268079781+vixenclawsastraagent@users.noreply.github.com>\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>\nCo-authored-by: chaodufashi <pahudev@gmail.com>",
"is_bot": false,
"headline": "feat(codex)!: migrate ACP adapter (#1353)",
"author_name": "九尾 Astra | VixenClaws Leader",
"author_login": "vixenclawsastraagent",
"committed_at": "2026-07-12T00:08:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "367fcfc05c406962c2bbc53feb318f8f0bfe67e3",
"body": "* docs(readme): refresh architecture diagram and platform list\n\nThe README predates several shipped features. Update the intro,\narchitecture diagram, and features list to document:\n\n- WeCom and Microsoft Teams platform edges\n- gateway adapters running standalone or embedded in the unified build\n- cu\n[…]\ny: chaodu-agent <chaodu-agent@users.noreply.github.com>\nCo-authored-by: vixenclawsastraagent <268079781+vixenclawsastraagent@users.noreply.github.com>\nCo-authored-by: thepagent <hehsieh1010@gmail.com>",
"is_bot": false,
"headline": "docs(readme): refresh architecture diagram and platform list (#1370)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-12T00:06:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d89e63582eaba4b9cf3679d49f7dae6e5b8cffa5",
"body": "* docs: canary testing guide + fork-PR preview build workflow\n\nExtracted from #1353 to keep that PR scoped to the Codex adapter\nmigration. Content authored on #1353 by @vixenclawsastraagent:\n\n- docs/canary-tests.md: complete canary workflow — preview builds,\n safety requirements, acceptance criteri\n[…]\ns an\nindependent change.\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>\nCo-authored-by: vixenclawsastraagent <268079781+vixenclawsastraagent@users.noreply.github.com>",
"is_bot": false,
"headline": "docs: canary testing guide + fork-PR preview workflow (#1369)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-12T00:03:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6cf869d75201998de51a643d09eef0177b071729",
"body": "Add a [line] config section for L3 identity trust, replacing the\nuniform GATEWAY_ALLOW_ALL_USERS/GATEWAY_ALLOWED_USERS env vars for\nLINE. First slice of #1355, mirroring the [telegram] pattern (#1297).\n\n- config.rs: LineConfig { allow_all_users, allowed_users } with\n LINE_ALLOW_ALL_USERS / LINE_ALL\n[…]\nnarios).\n\nGroup policy (open/members) and Reply-API deny-echo are follow-ups on\nthe issue.\n\nRefs #1355, umbrella #1356, ADR #1291.\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(line): first-class [line] trust section (Phase 1) (#1365)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-11T16:17:02Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "06416b17f28735f6b3c7e132131379fc47587526",
"body": "* feat(trust): Phase 1 (slack) — L3 identity via shared gate\n\nWire Slack into the PlatformTrustConfigs registry and call the shared\ningress trust gate from the Slack message path, mirroring the Discord\nwiring from #1270. Slack was the only configured platform absent from\nthe registry — the gate woul\n[…]\nscord.toml's phrasing) and the Native-trust-divergence\nquirk. Conformance suite passes against this branch's code refs.\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(trust): Phase 1 (slack) — L3 identity via shared gate (#1363)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-11T16:16:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2f0342b244d546a0c8c3d63261c9e3ef61e26392",
"body": "…conformance (#1295)\n\n* docs(platforms): add capability matrix skeleton\n\n* docs(platforms): seed LINE notes from ADR #1291 review\n\n* docs(platforms): docs/platforms/wecom.md (schema v1)\n\n* docs(platforms): docs/platforms/discord.md (schema v1)\n\n* docs(platforms): docs/platforms/_template.md (schema \n[…]\nred-by: luffy-aiagent <luffy-aiagent@users.noreply.github.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "docs(platforms): schema-driven platform facts knowledge base with CI …",
"author_name": "luffy-aiagent",
"author_login": "luffy-aiagent",
"committed_at": "2026-07-11T12:17:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7b83a41efe106766f79733b401fa0370296b56c0",
"body": "Co-authored-by: openab-app[bot] <274185012+openab-app[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "release: v0.9.0-beta.9 (#1354)",
"author_name": "openab-app[bot]",
"author_login": "openab-app[bot]",
"committed_at": "2026-07-11T10:29:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca64f87d806f3e8fa7314a1c75af2532c770bfed",
"body": "* chore(filestore): hardening and cleanup follow-ups from #1348 review\n\nCode Quality:\n- Extract TEXT_INLINE_LIMIT constant (replace 512*1024 magic numbers in 8 locations)\n- Replace e_tag.unwrap_or_default() with proper error handling (3 locations)\n\nSecurity Hardening:\n- Sanitize filenames in all err\n[…]\nnt Content-Disposition: attachment and filename sanitization\n (S3 keys and agent-visible text) in the Security section\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "chore(filestore): hardening and cleanup follow-ups (#1351)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-11T04:04:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bea2d39321786f5725dd5673ab880a75fccab1cb",
"body": "…ng multipart upload (#1348)\n\n* feat(filestore): S3/R2-compatible object store for large text attachments\n\nWhen a text file exceeds the 512 KB inline limit and a [filestore] section\nis configured, OAB now:\n\n1. Downloads the file using the platform token (solving the Slack auth gap)\n2. Uploads it to \n[…]\nis file exceeds\nthe configured upload limit and could not be stored.\"\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>\nCo-authored-by: thepagent <hehsieh1010@gmail.com>",
"is_bot": false,
"headline": "feat(filestore): S3/R2 object store for file attachments with streami…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-11T02:46:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "af5718fc1f5900ba4c7edcbe6e9f54157d823b92",
"body": "…timeouts (#1334)\n\n* fix(slack): bound reconnect-path network calls with a 30s timeout\n\nget_socket_mode_url and connect_async in the Socket Mode reconnect loop had\nno timeout, unlike the post-connect idle watchdog or SlackAdapter::new's Web\nAPI client. A stalled TLS handshake or apps.connections.ope\n[…]\nred-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01A9qJD9nYio1iRyuC5DKE2w\n\n---------\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(slack): bound reconnect-path and socket-write network calls with …",
"author_name": "howie",
"author_login": "howie",
"committed_at": "2026-07-10T23:41:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "461be9e6a15329af77756805d4c0206431032744",
"body": null,
"is_bot": false,
"headline": "docs: add Traditional Chinese README (#1347)",
"author_name": "Eric Huang",
"author_login": "ijbhxhu",
"committed_at": "2026-07-10T18:25:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9dd5f5810ecd646446c953833d495a40162d801c",
"body": "Co-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "fix(ci): accept discordapp.com URLs in PR discussion check (#1345)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-10T16:20:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f7d23605bf61814f7a4a39ee4750da22b43ae1c2",
"body": "* docs: add AWESOME.md with openab-control-plane\n\n* docs: add AIOps first-responder bot article to AWESOME.md\n\n---------\n\nCo-authored-by: chaodu[bot] <bot@openab.dev>",
"is_bot": false,
"headline": "docs: add AWESOME.md with openab-control-plane (#1342)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-10T00:58:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a97d80145031649be09f011a5a1479e1580fa02d",
"body": "* docs: add GitHub App token vending machine refarch\n\n* docs: replace architecture diagram with detailed ASCII block diagram\n\n* docs: add ECS Fargate / EKS Pod architecture variant diagram\n\n* docs: add Design Goals section\n\n* fix(review): address F1/F2/F3 from code review\n\n- F1: mask internal error \n[…]\nring\n- F3: add note that AWS no longer validates OIDC thumbprint for GitHub provider\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu@openab.dev>\nCo-authored-by: chaodu-agent <chaodu-agent@openab.dev>",
"is_bot": false,
"headline": "docs: add GitHub App token vending machine refarch (#1341)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-10T00:50:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5d70dac6b0563721c63b1e6d00b493dbde9bd284",
"body": "…t-ecsctl-library\n\nrefactor(oabctl): move --with-schedule to independent schedule create subcommand",
"is_bot": false,
"headline": "Merge pull request #1336 from openabdev/fix/remove-with-schedule-adop…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-09T04:41:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a8cdb728fc79afefd474833c901e24a95306c0d9",
"body": null,
"is_bot": false,
"headline": "fix: Scale help text — use 'Agent name (OAB service)' consistently",
"author_name": "chaodu-agent",
"author_login": "chaodu-agent",
"committed_at": "2026-07-09T03:40:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e51368e0e68f06c942582587727fb772412256bd",
"body": null,
"is_bot": false,
"headline": "fix: align doc comments and docs with 0..=1 size range",
"author_name": "chaodu-agent",
"author_login": "chaodu-agent",
"committed_at": "2026-07-09T03:39:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9802025bada3013167ac4752c9b9072fd917bec8",
"body": "…nce)",
"is_bot": false,
"headline": "fix: restrict clap size range to 0..=1 (OAB services are single-insta…",
"author_name": "chaodu-agent",
"author_login": "chaodu-agent",
"committed_at": "2026-07-09T03:37:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "44d1f2b38a0e80fe6978da994960186900e39ada",
"body": null,
"is_bot": false,
"headline": "fix: correct help text — use 'Agent name' not 'ecsctl alias'",
"author_name": "chaodu-agent",
"author_login": "chaodu-agent",
"committed_at": "2026-07-09T02:52:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8e94b914bf8efa28d9ec4b0d4e8c0b043c227137",
"body": null,
"is_bot": false,
"headline": "fix: align doc comment with actual size range (0-100)",
"author_name": "chaodu-agent",
"author_login": "chaodu-agent",
"committed_at": "2026-07-09T02:51:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7c351dddb945d29907b417a9dc9b87dcfba391bd",
"body": "… subcommand\n\nAligns with ecsctl v0.10.0 design where scale and schedule are\nindependent commands. This keeps 'scale' pure (immediate-only) and\ngives 'schedule' its own lifecycle (create/list/delete).\n\nChanges:\n- Remove --with-schedule and --timezone flags from 'scale' command\n- Add 'schedule create\n[…]\n\n- Update suggestion messages in scale.rs\n\nMigration:\n OLD: oabctl scale my-bot 0 --with-schedule 'cron(0 22 * * ? *)'\n NEW: oabctl schedule create my-bot 0 --expr 'cron(0 22 * * ? *)'\n\nCloses #1335",
"is_bot": false,
"headline": "refactor(oabctl): move --with-schedule to independent schedule create…",
"author_name": "chaodu-agent",
"author_login": "chaodu-agent",
"committed_at": "2026-07-09T02:46:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "56ed6eb73335296a161a3c9ab2ee8eec44a83123",
"body": "* docs: add AWS Secrets Manager path for GitHub token setup\n\n- New Option A: aws-sm:// secret ref, wired into [agent].env as\n GITHUB_TOKEN, inherited by the agent process so gh CLI picks it\n up with no separate auth step\n- Explains the three-part model: centralized PAT storage in Secrets\n Manager\n[…]\nverify sections updated to cover both GH_TOKEN\n and GITHUB_TOKEN\n\n* docs: clarify OAuth device flow vs PAT distinction\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "docs: add AWS Secrets Manager path for GitHub token setup (#1333)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-08T22:49:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "342f76dba25fd128be6debcbe78295ef9f430e00",
"body": "* fix(oabctl): restrict scale to oabctl-managed services only\n\n- Remove ecsctl alias resolution from scale command\n- Only resolve against oab cluster services (oab-{namespace}-{name})\n- Throw clear error if service not found with hint to use 'oabctl get oabservice'\n- Scheduled scaling IAM policy (oa\n[…]\nff) or 1 (on) with a clear error message.\n\n* docs(oabctl): document scale restrictions (0/1 only, oabctl services only)\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "fix(oabctl): restrict scale to oabctl-managed services only (#1327)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-08T03:55:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "669d6cc3149e6ed671ea3cc1ff690053bae0bf4a",
"body": "…a commit' (#1326)\n\nPushing commits alone does not remove the closing-soon label.\nThe author MUST add a new comment to signal activity.\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "fix(ci): closing-soon comment must say 'add a new comment' not 'push …",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-08T00:58:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "72b9c9a7725fdc716b63938aada65a49e3417977",
"body": "- stale-contributor.yml: tag @author in the comment so they get notified\n- stale-issue.yml: add a comment (was missing entirely) with @author tag\n\nBoth now clearly state the author must add a new comment to remove the\nclosing-soon label and keep the PR/issue open.\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "fix(ci): mention PR/issue author when adding closing-soon label (#1325)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-08T00:54:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b7a40c26878d26f10c25aec02060d4c227456308",
"body": "* feat(cron): support telegram platform for scheduled messages\n\n- Add \"telegram\" to VALID_PLATFORMS in cron validator\n- Register telegram in configured_platforms when [telegram] or\n TELEGRAM_BOT_TOKEN is present\n- Share unified adapter with cron scheduler so fire_cronjob can\n dispatch to telegram \n[…]\ndd Platform Prerequisites section with feature flag requirements\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>\nCo-authored-by: chaodu-agent <chaodu-agent@openab.dev>",
"is_bot": false,
"headline": "feat(cron): support telegram platform for cronjob (#1315)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-08T00:48:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a3df7f0983433bbc42e47e4e19d02db916e14c56",
"body": "…ng (#1324)\n\n* fix(oabctl): resolve cluster from config instead of hardcoding\n\napply.rs and delete.rs (run_from_file) hardcoded the ECS cluster name\nas \"oab\". When users bootstrap with --cluster to import an existing\ncluster with a different name, apply/delete -f operations would fail\nwith ClusterNo\n[…]\n automatically\n- Malformed config fails with error (no silent fallback)\n- Commands with/without --cluster flag behavior\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "fix(oabctl): resolve cluster from bootstrap state instead of hardcodi…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-08T00:21:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "859c34c43b8df566acec8b7a5a5d227e1a448f83",
"body": "…1321)\n\n* feat(oabctl): add scale command with EventBridge Scheduler support\n\nAdd `oabctl scale ALIAS SIZE` for immediate ECS service scaling and\n`--with-schedule` flag for cron-based scaling via EventBridge Scheduler.\n\nNew commands:\n- `oabctl scale <alias> <size>` — immediate UpdateService\n- `oabct\n[…]\ntching uses .message() and .code() on\nCreateScheduleError, which require the ProvideErrorMetadata trait\nto be in scope.\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(oabctl): add scale command with EventBridge Scheduler support (#…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-08T00:17:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "afcdcda8ee8069b9d83bede1e5ae5526ba6f0e2f",
"body": "* feat(oabctl): support per-service taskRoleArn in manifest\n\nAdd optional `taskRoleArn` field to EcsRuntime spec. When set, it\noverrides the bootstrap-provided shared task role, enabling per-service\nIAM isolation.\n\nResolution order:\n1. manifest `runtime.taskRoleArn` (explicit per-service role)\n2. bo\n[…]\nmanifest > bootstrap) and requirements\n- Distinguish taskRoleArn (container identity) from executionRoleArn (ECS agent)\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(oabctl): support per-service taskRoleArn in manifest (#1316)",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-07T23:31:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bfe18640f602d706bbf378538c7881f9693fdf77",
"body": "… \"(no response)\" (#1320)\n\n* fix(agy-acp): surface agy's swallowed backend errors instead of \"(no response)\"\n\n`agy --print` exits 0 with empty stdout/stderr when the model backend fails\n(e.g. quota 429 / RESOURCE_EXHAUSTED), recording the cause only in its own\ncli.log and never in the trajectory DB'\n[…]\n://claude.ai/code/session_01ANHjz7TXsqjhoDk6SiJiGd\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "fix(agy-acp): surface swallowed backend errors (quota 429) instead of…",
"author_name": "howie",
"author_login": "howie",
"committed_at": "2026-07-07T18:26:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5e6c81d54628696e70eab34a3b91b0999e383061",
"body": "fix(acp): use integer protocolVersion in agentcore bridge per latest ACP spec",
"is_bot": false,
"headline": "Merge pull request #1323 from FakeRocket543/fix/protocol-version-integer",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-07T18:20:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "52160a5e0b54db45ca7b547e98f92acaf4d14339",
"body": "The @agentclientprotocol/sdk@1.2.0 defines ProtocolVersion as integer\n(uint16), not string. The agentcore bridge was still sending the old\nstring format \"2024-11-05\" which causes agents using the latest SDK\n(e.g. OpenCode 1.17.11) to reject the initialize request.\n\nconnection.rs already uses integer 1 — this aligns agentcore.rs.\n\nFixes #1318",
"is_bot": false,
"headline": "fix(acp): use integer protocolVersion per latest ACP spec",
"author_name": "FakeRocket543",
"author_login": "FakeRocket543",
"committed_at": "2026-07-07T17:55:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fd1ce74a7a8eff0ea5e2940f83cc5eb9d32f9061",
"body": "docs: add refarch for running Telegram/LINE bots on AWS",
"is_bot": false,
"headline": "Merge pull request #1274 from smallgun01/docs/refarch-telegram-line-aws",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-07T15:13:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "704abf390339d0df16b59b291e428f6314fe77b2",
"body": "Verified oabctl ingress on us-east-1 (2026-07-07):\n- One provisions the full stack in ~2.5min\n- Replaces all 7 manual AWS CLI steps\n- Two pitfalls documented: us-east-1e AZ unsupported, configFrom required\n\nSwitches from 'automation tip' to 'Recommended' callout at Option 1 top.",
"is_bot": false,
"headline": "docs: strengthen oabctl recommendation in Option 1 after live E2E",
"author_name": "smallgun01",
"author_login": "smallgun01",
"committed_at": "2026-07-07T12:53:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "315f02124feee6f2dce97e31af3da6c52d9a03b5",
"body": "fix(oabctl): always enable execute command on ECS services",
"is_bot": false,
"headline": "Merge pull request #1314 from openabdev/fix/oabctl-enable-exec-command",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-07T02:10:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "142b9c399c56c0ed8869146e412611aed181fc8a",
"body": "fix(oabctl): read cluster/namespace defaults from config file",
"is_bot": false,
"headline": "Merge pull request #1312 from openabdev/fix/oabctl-get-config-cluster",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-07T01:02:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9a9b2933d64e5f11cba6075f05625c6ea404a47b",
"body": "oabctl apply was creating/updating services without\nenableExecuteCommand, requiring a manual aws ecs update-service\ncall before `oabctl exec` or `ecsh` would work.\n\nNow both create_service and update_service always set\nenable_execute_command(true) — all OAB services need it for\ndebugging and there's no reason to ever leave it off.",
"is_bot": false,
"headline": "fix(oabctl): always enable execute command on ECS services",
"author_name": "chaodu-agent",
"author_login": "chaodu-agent",
"committed_at": "2026-07-07T00:46:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a20ee1f786bbe733ef717c41afdb45373ea37c89",
"body": "Document that --namespace default comes from ~/.oabctl/config.toml,\nconsistent with the --cluster flag's help text.",
"is_bot": false,
"headline": "fix(review): align --namespace help text with --cluster",
"author_name": "chaodu-agent",
"author_login": "chaodu-agent",
"committed_at": "2026-07-06T23:38:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0ae6644d93c2c49fddf12ad23defb73d770264c2",
"body": "- main.rs: Replace unwrap_or_default() with .context() for proper error\n propagation (malformed config.toml now fails early instead of silently\n falling through to production defaults)\n- apply.rs: Extract DRAIN_RETRY_ATTEMPTS/DRAIN_RETRY_INTERVAL constants;\n remove dead post-loop code by returnin\n[…]\n delete.rs: Extract DRAIN_POLL_ATTEMPTS/DRAIN_POLL_INTERVAL constants\n\nResolves merge conflicts by rebasing onto current main (which already has\ntyped error codes and proper transient error handling).",
"is_bot": false,
"headline": "fix(review): address PR review findings",
"author_name": "chaodu-agent",
"author_login": "chaodu-agent",
"committed_at": "2026-07-06T23:33:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "83fbc899151ad9d795aa9e0e8a12dfb010fd92ae",
"body": "feat(telegram): auto-disable table code-block wrapping for native rendering",
"is_bot": false,
"headline": "Merge pull request #1313 from openabdev/feat/telegram-native-tables",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-06T23:22:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2e1684a8bf55504102b3759669d14dbc3dc5ecf2",
"body": "…dalone rich_messages check\n\n- Add platform parameter to ChatAdapter::renders_native_tables() trait method\n so unified adapter can make per-platform decisions (fixes regression where\n all platforms would skip table wrapping when telegram_rich_messages=true)\n- UnifiedGatewayAdapter now checks platf\n[…]\nonfig/GatewayParams)\n- Update all call sites (AdapterRouter, Slack, tests) to pass platform arg\n\nFixes: unified mode multi-platform regression (F1)\nFixes: standalone mode Rich Messages assumption (F2)",
"is_bot": false,
"headline": "fix(review): add platform context to renders_native_tables() and stan…",
"author_name": "chaodu-agent",
"author_login": "chaodu-agent",
"committed_at": "2026-07-06T23:06:59Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0ff4a2f607b1bee8b4c0fd6e693d869856a2515f",
"body": "…dering\n\nTelegram Rich Messages render markdown tables natively, but OAB's default\ntable mode wraps them in code blocks — requiring every Telegram deployment\nto manually set [markdown] tables = \"off\" in config.toml.\n\nNow both adapters (unified and standalone gateway) implement\nrenders_native_tables(\n[…]\ntewayAdapter: returns true when telegram_rich_messages is enabled\n- GatewayAdapter: returns true when platform_name == \"telegram\"\n- Updated docs/telegram.md to remove the manual [markdown] requirement",
"is_bot": false,
"headline": "feat(telegram): auto-disable table code-block wrapping for native ren…",
"author_name": "chaodu-agent",
"author_login": "chaodu-agent",
"committed_at": "2026-07-06T22:38:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a4668150a01b7f14034bbed521c97c6032d7232a",
"body": null,
"is_bot": false,
"headline": "Merge branch 'main' into docs/refarch-telegram-line-aws",
"author_name": "thepagent",
"author_login": "thepagent",
"committed_at": "2026-07-06T21:03:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f28c2dfb36b8f6083756b2b04f6202443d136e9",
"body": "Co-authored-by: openab-app[bot] <274185012+openab-app[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "release: v0.9.0-beta.8 (#1311)",
"author_name": "openab-app[bot]",
"author_login": "openab-app[bot]",
"committed_at": "2026-07-06T21:01:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c3eda3f748f58b4679cd0c170b47196c75eae31b",
"body": "… (#1308)\n\n* feat(oabctl): add architecture field for ARM64/X86_64 task scheduling\n\nAdd optional `architecture` field to ECS runtime spec (default: X86_64).\nThis sets `runtimePlatform` on task definitions so ECS Fargate can\nschedule on Graviton (ARM64) for ~20% cost savings.\n\n- Add `architecture` fi\n[…]\n:\n accepts ARM64, accepts X86_64, defaults to X86_64 when omitted,\n rejects invalid (MIPS), rejects lowercase (arm64)\n\n---------\n\nCo-authored-by: chaodu-agent <chaodu-agent@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(oabctl): add architecture field for ARM64/X86_64 task scheduling…",
"author_name": "chaodufashi",
"author_login": "chaodu-agent",
"committed_at": "2026-07-06T20:58:17Z",
"body_truncated": true,
"is_coding_agent": false
}
],
"releases_count": 100,
"commits_last_year": 1480,
"latest_release_at": "2026-07-25T04:32:04Z",
"latest_release_tag": "oabctl-pre-beta",
"releases_from_tags": false,
"days_since_last_push": 3,
"active_weeks_last_year": 17,
"days_since_latest_release": 3,
"mean_days_between_releases": 2.3
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 62,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"ecosystem": {
"packages": []
},
"popularity": {
"forks": 184,
"stars": 717,
"watchers": 4,
"fork_history": {
"days": [
{
"date": "2026-04-04",
"count": 7
},
{
"date": "2026-04-05",
"count": 5
},
{
"date": "2026-04-06",
"count": 11
},
{
"date": "2026-04-07",
"count": 15
},
{
"date": "2026-04-08",
"count": 5
},
{
"date": "2026-04-09",
"count": 4
},
{
"date": "2026-04-10",
"count": 5
},
{
"date": "2026-04-11",
"count": 3
},
{
"date": "2026-04-12",
"count": 4
},
{
"date": "2026-04-13",
"count": 8
},
{
"date": "2026-04-14",
"count": 1
},
{
"date": "2026-04-15",
"count": 4
},
{
"date": "2026-04-16",
"count": 3
},
{
"date": "2026-04-17",
"count": 1
},
{
"date": "2026-04-18",
"count": 2
},
{
"date": "2026-04-21",
"count": 2
},
{
"date": "2026-04-22",
"count": 2
},
{
"date": "2026-04-24",
"count": 2
},
{
"date": "2026-04-25",
"count": 1
},
{
"date": "2026-04-26",
"count": 2
},
{
"date": "2026-04-27",
"count": 1
},
{
"date": "2026-04-28",
"count": 3
},
{
"date": "2026-05-03",
"count": 2
},
{
"date": "2026-05-04",
"count": 2
},
{
"date": "2026-05-05",
"count": 2
},
{
"date": "2026-05-07",
"count": 5
},
{
"date": "2026-05-10",
"count": 1
},
{
"date": "2026-05-12",
"count": 2
},
{
"date": "2026-05-14",
"count": 4
},
{
"date": "2026-05-15",
"count": 2
},
{
"date": "2026-05-18",
"count": 1
},
{
"date": "2026-05-19",
"count": 2
},
{
"date": "2026-05-20",
"count": 3
},
{
"date": "2026-05-21",
"count": 1
},
{
"date": "2026-05-23",
"count": 3
},
{
"date": "2026-05-24",
"count": 1
},
{
"date": "2026-05-26",
"count": 2
},
{
"date": "2026-05-27",
"count": 3
},
{
"date": "2026-05-28",
"count": 3
},
{
"date": "2026-05-30",
"count": 1
},
{
"date": "2026-05-31",
"count": 1
},
{
"date": "2026-06-01",
"count": 1
},
{
"date": "2026-06-02",
"count": 1
},
{
"date": "2026-06-03",
"count": 1
},
{
"date": "2026-06-04",
"count": 3
},
{
"date": "2026-06-05",
"count": 2
},
{
"date": "2026-06-07",
"count": 1
},
{
"date": "2026-06-09",
"count": 1
},
{
"date": "2026-06-10",
"count": 2
},
{
"date": "2026-06-11",
"count": 1
},
{
"date": "2026-06-13",
"count": 1
},
{
"date": "2026-06-17",
"count": 1
},
{
"date": "2026-06-18",
"count": 2
},
{
"date": "2026-06-20",
"count": 1
},
{
"date": "2026-06-25",
"count": 1
},
{
"date": "2026-06-26",
"count": 1
},
{
"date": "2026-06-27",
"count": 1
},
{
"date": "2026-06-30",
"count": 1
},
{
"date": "2026-07-01",
"count": 1
},
{
"date": "2026-07-02",
"count": 3
},
{
"date": "2026-07-03",
"count": 1
},
{
"date": "2026-07-04",
"count": 1
},
{
"date": "2026-07-06",
"count": 2
},
{
"date": "2026-07-07",
"count": 1
},
{
"date": "2026-07-09",
"count": 1
},
{
"date": "2026-07-10",
"count": 1
},
{
"date": "2026-07-11",
"count": 2
},
{
"date": "2026-07-13",
"count": 1
},
{
"date": "2026-07-14",
"count": 1
},
{
"date": "2026-07-15",
"count": 2
},
{
"date": "2026-07-16",
"count": 2
},
{
"date": "2026-07-19",
"count": 3
},
{
"date": "2026-07-20",
"count": 2
},
{
"date": "2026-07-21",
"count": 1
},
{
"date": "2026-07-23",
"count": 3
}
],
"complete": true,
"collected": 182,
"total_forks": 184
},
"star_history": null,
"open_issues_and_prs": 26
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": true,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"Cargo.toml",
"agy-acp/Cargo.toml",
"crates/openab-core/Cargo.toml",
"crates/openab-gateway/Cargo.toml",
"crates/openab-mcp/Cargo.toml",
"crates/platform-schema/Cargo.toml",
"openab-agent/Cargo.toml",
"openab-auth-proxy/Cargo.toml",
"operator/Cargo.toml"
],
"largest_source_bytes": 958227,
"source_files_sampled": 103,
"oversized_source_files": 16,
"agent_instruction_files": [
"AGENTS.md",
"agentcore/runtimes/kiro/steering/agent.md",
"docs/gemini.md"
],
"agent_instruction_max_bytes": 6568
},
"dependencies": {
"manifests": [
"Cargo.toml",
"agy-acp/Cargo.toml",
"openab-agent/Cargo.toml",
"openab-auth-proxy/Cargo.toml",
"operator/Cargo.toml"
],
"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": [
"crates"
],
"dependencies": [
{
"name": "openab-core",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": null
},
{
"name": "openab-gateway",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": null
},
{
"name": "openab-mcp",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": null
},
{
"name": "tokio",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "tracing",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.1"
},
{
"name": "tracing-subscriber",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.3"
},
{
"name": "clap",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": "4"
},
{
"name": "anyhow",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "axum",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.8"
},
{
"name": "reqwest",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.12"
},
{
"name": "serde",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "serde_json",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "async-trait",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.1"
},
{
"name": "serenity",
"manifest": "Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.12"
},
{
"name": "tokio",
"manifest": "agy-acp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "serde",
"manifest": "agy-acp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "serde_json",
"manifest": "agy-acp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "uuid",
"manifest": "agy-acp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "fs2",
"manifest": "agy-acp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.4.3"
},
{
"name": "rusqlite",
"manifest": "agy-acp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "=0.31.0"
},
{
"name": "shell-words",
"manifest": "agy-acp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1.1.0"
},
{
"name": "openab-mcp",
"manifest": "openab-agent/Cargo.toml",
"ecosystem": "crates",
"version_constraint": null
},
{
"name": "tokio",
"manifest": "openab-agent/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "serde",
"manifest": "openab-agent/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "serde_json",
"manifest": "openab-agent/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "reqwest",
"manifest": "openab-agent/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.12"
},
{
"name": "anyhow",
"manifest": "openab-agent/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "async-trait",
"manifest": "openab-agent/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.1"
},
{
"name": "uuid",
"manifest": "openab-agent/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "clap",
"manifest": "openab-agent/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "4"
},
{
"name": "tracing",
"manifest": "openab-agent/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.1"
},
{
"name": "tracing-subscriber",
"manifest": "openab-agent/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.3"
},
{
"name": "base64",
"manifest": "openab-agent/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.22.1"
},
{
"name": "url",
"manifest": "openab-agent/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "2.5.8"
},
{
"name": "rmcp",
"manifest": "openab-agent/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1.7"
},
{
"name": "tokio",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1.44"
},
{
"name": "axum",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.8"
},
{
"name": "hyper",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1.6"
},
{
"name": "hyper-util",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.1"
},
{
"name": "rustls",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.23"
},
{
"name": "hyper-rustls",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.27"
},
{
"name": "http-body-util",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.1"
},
{
"name": "reqwest",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.12"
},
{
"name": "serde",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "serde_json",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "toml",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.8"
},
{
"name": "clap",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "4"
},
{
"name": "sha2",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.10"
},
{
"name": "base64",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.22"
},
{
"name": "rand",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.8"
},
{
"name": "uuid",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "url",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "2"
},
{
"name": "urlencoding",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "2"
},
{
"name": "dirs",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "6"
},
{
"name": "anyhow",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "tracing",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.1"
},
{
"name": "tracing-subscriber",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.3"
},
{
"name": "open",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "5"
},
{
"name": "tower",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.5"
},
{
"name": "tower-http",
"manifest": "openab-auth-proxy/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.6"
},
{
"name": "aws-config",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1.5"
},
{
"name": "aws-sdk-ecs",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1.53"
},
{
"name": "aws-sdk-ec2",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "aws-sdk-iam",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "aws-sdk-s3",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1.65"
},
{
"name": "aws-sdk-scheduler",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1.98"
},
{
"name": "aws-sdk-ssm",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1.52"
},
{
"name": "aws-sdk-sts",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "aws-sdk-cloudwatchlogs",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "aws-sdk-secretsmanager",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "aws-sdk-apigatewayv2",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "aws-sdk-servicediscovery",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "ecsctl",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": null
},
{
"name": "clap",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "4.5"
},
{
"name": "chrono",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.4"
},
{
"name": "serde",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1.0"
},
{
"name": "serde_json",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "serde_yaml",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.9"
},
{
"name": "tokio",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1.40"
},
{
"name": "toml",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.8"
},
{
"name": "anyhow",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1.0"
},
{
"name": "dirs",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "6"
},
{
"name": "rpassword",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "7"
},
{
"name": "reqwest",
"manifest": "operator/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.12"
},
{
"name": "tokio",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "serde",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "serde_json",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "toml",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.8"
},
{
"name": "toml_edit",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.22"
},
{
"name": "tracing",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.1"
},
{
"name": "tracing-subscriber",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.3"
},
{
"name": "serenity",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.12"
},
{
"name": "uuid",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "regex",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "anyhow",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "async-trait",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.1"
},
{
"name": "futures-util",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.3"
},
{
"name": "rand",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.8"
},
{
"name": "clap",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "4"
},
{
"name": "rpassword",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "7"
},
{
"name": "reqwest",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.12"
},
{
"name": "bytes",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "base64",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.22"
},
{
"name": "image",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.25"
},
{
"name": "unicode-width",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.2"
},
{
"name": "unicode-segmentation",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "pulldown-cmark",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.13"
},
{
"name": "tokio-tungstenite",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.21"
},
{
"name": "rustls",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.22"
},
{
"name": "tokio-rustls",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.25"
},
{
"name": "webpki-roots",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.26"
},
{
"name": "cron",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.16.0"
},
{
"name": "chrono",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.4.44"
},
{
"name": "chrono-tz",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.10.4"
},
{
"name": "emojis",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.8"
},
{
"name": "sha2",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.10"
},
{
"name": "tempfile",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "3.27.0"
},
{
"name": "aws-sdk-secretsmanager",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "aws-sdk-s3",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "aws-config",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "zip",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "2"
},
{
"name": "flate2",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "tar",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.4.45"
},
{
"name": "aws-sigv4",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "aws-credential-types",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "urlencoding",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "2"
},
{
"name": "hex",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.4"
},
{
"name": "http",
"manifest": "crates/openab-core/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "tokio",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "axum",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.8"
},
{
"name": "tokio-tungstenite",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.21"
},
{
"name": "futures-util",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.3"
},
{
"name": "serde",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "serde_json",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "reqwest",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.12"
},
{
"name": "tracing",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.1"
},
{
"name": "tracing-subscriber",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.3"
},
{
"name": "anyhow",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "uuid",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "chrono",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.4"
},
{
"name": "hmac",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.12"
},
{
"name": "sha2",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.10"
},
{
"name": "base64",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.22"
},
{
"name": "jsonwebtoken",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "9"
},
{
"name": "aes",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.8"
},
{
"name": "cbc",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.1"
},
{
"name": "prost",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.13"
},
{
"name": "subtle",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "2"
},
{
"name": "sha1",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.10"
},
{
"name": "quick-xml",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.37"
},
{
"name": "image",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.25"
},
{
"name": "parking_lot",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.12"
},
{
"name": "urlencoding",
"manifest": "crates/openab-gateway/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "2"
},
{
"name": "tokio",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "serde",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "serde_json",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "reqwest",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.12"
},
{
"name": "reqwest013",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.13"
},
{
"name": "anyhow",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "async-trait",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.1"
},
{
"name": "tracing",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.1"
},
{
"name": "base64",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.22.1"
},
{
"name": "sha2",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.11.0"
},
{
"name": "getrandom",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.4.2"
},
{
"name": "urlencoding",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "2.1.3"
},
{
"name": "open",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "5.3.5"
},
{
"name": "url",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "2.5.8"
},
{
"name": "oauth2",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "5"
},
{
"name": "jsonschema",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.46"
},
{
"name": "rmcp",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1.7"
},
{
"name": "axum",
"manifest": "crates/openab-mcp/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.8"
},
{
"name": "serde",
"manifest": "crates/platform-schema/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "1"
},
{
"name": "toml",
"manifest": "crates/platform-schema/Cargo.toml",
"ecosystem": "crates",
"version_constraint": "0.8"
}
],
"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": 11,
"merged_prs": 769,
"open_issues": 15,
"closed_ratio": 0.964,
"closed_issues": 396,
"closed_unmerged_prs": 263
},
"bus_factor": 2,
"bot_contributors": 3,
"top_contributors": [
{
"type": "User",
"login": "chaodu-agent",
"commits": 523,
"avatar_url": "https://avatars.githubusercontent.com/u/274062505?v=4"
},
{
"type": "User",
"login": "thepagent",
"commits": 293,
"avatar_url": "https://avatars.githubusercontent.com/u/262003297?v=4"
},
{
"type": "User",
"login": "dogzzdogzz",
"commits": 45,
"avatar_url": "https://avatars.githubusercontent.com/u/23068316?v=4"
},
{
"type": "User",
"login": "JARVIS-coding-Agent",
"commits": 34,
"avatar_url": "https://avatars.githubusercontent.com/u/55979927?v=4"
},
{
"type": "User",
"login": "wangyuyan-agent",
"commits": 17,
"avatar_url": "https://avatars.githubusercontent.com/u/265828726?v=4"
},
{
"type": "User",
"login": "brettchien",
"commits": 15,
"avatar_url": "https://avatars.githubusercontent.com/u/1193046?v=4"
},
{
"type": "User",
"login": "masami-agent",
"commits": 14,
"avatar_url": "https://avatars.githubusercontent.com/u/266806885?v=4"
},
{
"type": "User",
"login": "clsung",
"commits": 12,
"avatar_url": "https://avatars.githubusercontent.com/u/26345?v=4"
},
{
"type": "User",
"login": "chenhan1218",
"commits": 11,
"avatar_url": "https://avatars.githubusercontent.com/u/514188?v=4"
},
{
"type": "User",
"login": "antigenius0910",
"commits": 11,
"avatar_url": "https://avatars.githubusercontent.com/u/5915590?v=4"
}
],
"contributors_sampled": 49,
"top_contributor_share": 0.483
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"build-binaries.yml",
"build-gateway.yml",
"build-images.yml",
"build-oabctl.yml",
"build-operator-branch.yml",
"build-operator.yml",
"bundle-pre-seed-utils.yml",
"chart-test.yml",
"ci-agy-acp.yml",
"ci-auth-proxy.yml",
"ci-openab-agent.yml",
"ci.yml",
"close-stale-issues.yml",
"close-stale-prs.yml",
"close-unlinked-stale-issues.yml",
"docker-smoke-test-unified.yml",
"docker-smoke-test.yml",
"gateway-release-pr.yml",
"issue-check.yml",
"issue-pending-maintainer.yml",
"issue-triage.yml",
"line.yml",
"needs-rebase.yml",
"pending-decision.yml",
"pending-maintainer.yml",
"platform-schema-conformance.yml",
"pr-bot-review.yml",
"pr-discussion-check.yml",
"pr-preview.yml",
"pre-beta-build.yml",
"release-pr.yml",
"release.yml",
"review-contract.yml",
"slack.yml",
"snapshot-build.yml",
"stale-contributor.yml",
"stale-issue.yml",
"tag-on-merge.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"Cargo.lock"
],
"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": 4,
"reason": "branch protection is not maximal on development and all release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 10,
"reason": "all changesets reviewed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 6 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 19 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": 1,
"reason": "9 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "53061d696148106b2b7529f9d6c5dd802dff4545",
"ran_at": "2026-07-28T06:33:49Z",
"aggregate_score": 4.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-28T06:18:54Z",
"oldest_open_prs": [
{
"number": 1181,
"created_at": "2026-06-23T21:04:07Z",
"last_comment_at": "2026-06-23T21:16:00Z",
"last_comment_author": "chaodu-agent"
},
{
"number": 1204,
"created_at": "2026-06-26T00:05:42Z",
"last_comment_at": "2026-07-13T07:24:30Z",
"last_comment_author": "github-actions"
},
{
"number": 1205,
"created_at": "2026-06-26T00:08:11Z",
"last_comment_at": "2026-07-14T11:59:49Z",
"last_comment_author": "chaodu-agent"
},
{
"number": 1234,
"created_at": "2026-06-28T15:52:03Z",
"last_comment_at": "2026-07-20T09:53:39Z",
"last_comment_author": "chaodu-agent"
},
{
"number": 1258,
"created_at": "2026-06-30T03:22:34Z",
"last_comment_at": "2026-06-30T03:36:33Z",
"last_comment_author": "chaodu-agent"
},
{
"number": 1435,
"created_at": "2026-07-22T05:21:59Z",
"last_comment_at": "2026-07-27T15:44:46Z",
"last_comment_author": "github-actions"
},
{
"number": 1447,
"created_at": "2026-07-24T02:30:12Z",
"last_comment_at": "2026-07-28T03:40:49Z",
"last_comment_author": "chaodu-obk"
},
{
"number": 1456,
"created_at": "2026-07-25T17:04:06Z",
"last_comment_at": "2026-07-27T19:56:57Z",
"last_comment_author": "chaodu-obk"
},
{
"number": 1457,
"created_at": "2026-07-25T20:24:46Z",
"last_comment_at": "2026-07-27T19:51:19Z",
"last_comment_author": "chaodu-obk"
},
{
"number": 1458,
"created_at": "2026-07-25T20:26:19Z",
"last_comment_at": "2026-07-27T19:49:16Z",
"last_comment_author": "chaodu-obk"
},
{
"number": 1460,
"created_at": "2026-07-28T04:20:58Z",
"last_comment_at": "2026-07-28T06:18:51Z",
"last_comment_author": "chaodu-obk"
}
],
"last_merged_pr_at": "2026-07-25T05:00:08Z",
"ci_last_conclusion": "SKIPPED",
"oldest_open_issues": [
{
"number": 38,
"created_at": "2026-04-04T16:24:57Z",
"last_comment_at": "2026-04-24T10:59:38Z",
"last_comment_author": "obrutjack"
},
{
"number": 243,
"created_at": "2026-04-12T04:18:01Z",
"last_comment_at": "2026-04-15T20:54:07Z",
"last_comment_author": "chengli"
},
{
"number": 489,
"created_at": "2026-04-20T10:40:10Z",
"last_comment_at": "2026-04-22T07:27:58Z",
"last_comment_author": "CHC-Agent"
},
{
"number": 736,
"created_at": "2026-05-04T23:29:12Z",
"last_comment_at": "2026-05-05T22:02:09Z",
"last_comment_author": "CHC-Agent"
},
{
"number": 790,
"created_at": "2026-05-11T11:24:36Z",
"last_comment_at": "2026-05-11T22:01:25Z",
"last_comment_author": "github-actions"
},
{
"number": 997,
"created_at": "2026-06-04T05:58:11Z",
"last_comment_at": "2026-06-08T03:59:25Z",
"last_comment_author": "fcwu"
},
{
"number": 1233,
"created_at": "2026-06-28T15:09:42Z",
"last_comment_at": "2026-06-28T15:09:51Z",
"last_comment_author": "github-actions"
},
{
"number": 1367,
"created_at": "2026-07-11T19:21:46Z",
"last_comment_at": "2026-07-24T08:18:56Z",
"last_comment_author": "SunnyYYLin"
},
{
"number": 1401,
"created_at": "2026-07-14T06:59:11Z",
"last_comment_at": "2026-07-14T06:59:21Z",
"last_comment_author": "github-actions"
},
{
"number": 1405,
"created_at": "2026-07-15T00:37:54Z",
"last_comment_at": "2026-07-15T18:05:15Z",
"last_comment_author": "chaodu-agent"
},
{
"number": 1409,
"created_at": "2026-07-16T01:37:03Z",
"last_comment_at": "2026-07-16T01:37:13Z",
"last_comment_author": "github-actions"
},
{
"number": 1420,
"created_at": "2026-07-18T02:02:41Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1434,
"created_at": "2026-07-22T05:07:23Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1436,
"created_at": "2026-07-22T14:47:49Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 1459,
"created_at": "2026-07-25T20:37:35Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/openabdev/openab",
"host": "github.com",
"name": "openab",
"owner": "openabdev"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 69,
"inputs": {
"security": 46,
"vitality": 82,
"community": 72,
"governance": 65,
"engineering": 77
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 82,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 76,
"inputs": {
"commits_last_year": 1480,
"human_commit_share": 0.9,
"days_since_last_push": 3,
"active_weeks_last_year": 17
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 3 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 3
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "17/52 weeks with commits",
"points": 11.8,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 17
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "1480 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 1480
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 19 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": "oabctl-pre-beta",
"releases_from_tags": false,
"days_since_latest_release": 3,
"mean_days_between_releases": 2.3
},
"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 ~2.3 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 2.3
}
}
],
"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": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "good",
"name": "Community & Adoption",
"value": 72,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "moderate",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"forks": 184,
"stars": 717,
"watchers": 4,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "717 stars",
"points": 46.3,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 717
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "184 forks",
"points": 18.9,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 184
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "4 watchers",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 4
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "good",
"name": "Community health",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 6.3,
"status": "met",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 65,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "moderate",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"bus_factor": 2,
"contributors_sampled": 49,
"top_contributor_share": 0.483
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "2 contributor(s) cover half of all commits",
"points": 25.2,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 2
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 48% of commits",
"points": 11.6,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 48
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "49 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 49
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 6 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "excellent",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 89,
"inputs": {
"merged_prs": 769,
"open_issues": 15,
"closed_issues": 396,
"issue_closed_ratio": 0.964,
"closed_unmerged_prs": 263
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "96% of issues closed",
"points": 45.1,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 96
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "769/1032 decided PRs merged",
"points": 28.5,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 769,
"decided": 1032
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "all changesets reviewed",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 47,
"inputs": {
"followers": 32,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "openabdev",
"public_repos": 5,
"account_age_days": 112
},
"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": "32 followers of openabdev",
"points": 10.9,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 32,
"login": "openabdev"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "5 public repos, account ~0 yr old",
"points": 6.3,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 5
}
},
{
"code": "account_age_years",
"params": {
"years": 0
}
}
],
"max_points": 25
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 77,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "38 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 38
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": "https://openabdev.github.io/openab/",
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://openabdev.github.io/openab/",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 46,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": null,
"notes": [],
"value": 46,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 18,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 0,
"scorecard_aggregate": 4.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": "branch protection is not maximal on development and all release branches",
"points": 3,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "all changesets reviewed",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 6 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 19 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": "9 existing vulnerabilities detected",
"points": 0.8,
"status": "partial",
"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": 4
},
"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": "good",
"name": "AI Readiness",
"value": 74,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.989,
"agent_instruction_files": [
"AGENTS.md",
"agentcore/runtimes/kiro/steering/agent.md",
"docs/gemini.md"
],
"agent_instruction_max_bytes": 6568
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, agentcore/runtimes/kiro/steering/agent.md, docs/gemini.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, agentcore/runtimes/kiro/steering/agent.md, docs/gemini.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": "89 of 90 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 89,
"sampled": 90
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 64,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"Cargo.lock"
],
"has_dockerfile": true,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.04,
"toolchain_manifests": [
"Cargo.toml",
"agy-acp/Cargo.toml",
"crates/openab-core/Cargo.toml",
"crates/openab-gateway/Cargo.toml",
"crates/openab-mcp/Cargo.toml",
"crates/platform-schema/Cargo.toml",
"openab-agent/Cargo.toml",
"openab-auth-proxy/Cargo.toml",
"operator/Cargo.toml"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Cargo.toml, agy-acp/Cargo.toml, crates/openab-core/Cargo.toml (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "Cargo.toml, agy-acp/Cargo.toml, crates/openab-core/Cargo.toml"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "Rust (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Rust"
}
}
],
"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": "4 of the last 100 commits agent-authored or agent-credited",
"points": 8,
"status": "partial",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 4,
"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": 92,
"inputs": {
"primary_language": "Rust",
"largest_source_bytes": 958227,
"source_files_sampled": 103,
"oversized_source_files": 16
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Rust (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Rust"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "16/103 source files over 60KB",
"points": 46.5,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 103,
"oversized": 16
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "moderate",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": true,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 20,
"status": "met",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"Could not fetch crates package 'openab' from its registry",
"Could not fetch crates package 'agy-acp' from its registry",
"Could not fetch crates package 'oabctl' from its registry",
"Could not fetch crates package 'openab-agent' from its registry",
"Could not fetch crates package 'openab-auth-proxy' from its registry",
"Could not fetch crates package 'openab-mcp' from its registry",
"Could not fetch crates package 'openab-core' from its registry",
"Could not fetch crates package 'openab-gateway' from its registry",
"Could not fetch crates package 'platform-schema' from its registry",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-28T06:34:43.305842Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/openabdev/openab.svg",
"full_name": "openabdev/openab",
"license_state": "standard",
"license_spdx": "MIT"
}