JSON-Rohbericht maschinenlesbar
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 285305,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 2079172,
"Ruby": 1376,
"Shell": 30028,
"Python": 36948,
"Makefile": 9164,
"Dockerfile": 191,
"JavaScript": 958,
"TypeScript": 28255,
"Open Policy Agent": 9404
},
"pushed_at": "2026-07-21T13:39:56Z",
"created_at": "2015-09-28T15:55:01Z",
"owner_type": "User",
"updated_at": "2026-07-21T13:40:55Z",
"description": null,
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "master",
"license_spdx_raw": "NOASSERTION",
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": null,
"name": "Roy Hiroyuki Osaki",
"type": "User",
"login": "onelittlenightmusic",
"company": "Hitachi Ltd,",
"location": "Tokyo",
"followers": 41,
"avatar_url": "https://avatars.githubusercontent.com/u/33847?v=4",
"created_at": "2008-11-11T15:49:33Z",
"is_verified": null,
"public_repos": 84,
"account_age_days": 6461
},
"license": {
"state": "custom",
"spdx_id": null,
"raw_spdx": "NOASSERTION",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.1.1",
"kind": "patch",
"published_at": "2026-07-21T13:41:51Z"
},
{
"tag": "v0.1.0",
"kind": "minor",
"published_at": "2026-07-20T09:42:18Z"
},
{
"tag": "v0.0.105",
"kind": "patch",
"published_at": "2026-07-20T06:43:42Z"
},
{
"tag": "v0.0.104",
"kind": "patch",
"published_at": "2026-07-20T06:24:04Z"
},
{
"tag": "v0.0.103",
"kind": "patch",
"published_at": "2026-07-19T08:50:18Z"
},
{
"tag": "v0.0.102",
"kind": "patch",
"published_at": "2026-07-19T04:32:54Z"
},
{
"tag": "v0.0.101",
"kind": "patch",
"published_at": "2026-07-17T23:01:59Z"
},
{
"tag": "v0.0.100",
"kind": "patch",
"published_at": "2026-07-14T13:48:38Z"
},
{
"tag": "v0.0.99",
"kind": "patch",
"published_at": "2026-07-13T22:10:09Z"
},
{
"tag": "v0.0.98",
"kind": "patch",
"published_at": "2026-07-12T12:15:46Z"
},
{
"tag": "v0.0.97",
"kind": "patch",
"published_at": "2026-07-11T09:35:49Z"
},
{
"tag": "v0.0.96",
"kind": "patch",
"published_at": "2026-07-09T15:03:27Z"
},
{
"tag": "v0.0.95",
"kind": "patch",
"published_at": "2026-07-08T22:42:12Z"
},
{
"tag": "v0.0.94",
"kind": "patch",
"published_at": "2026-07-07T22:10:07Z"
},
{
"tag": "v0.0.93",
"kind": "patch",
"published_at": "2026-07-06T22:25:56Z"
},
{
"tag": "v0.0.92",
"kind": "patch",
"published_at": "2026-07-05T15:34:45Z"
},
{
"tag": "v0.0.88",
"kind": "patch",
"published_at": "2026-07-04T05:36:13Z"
},
{
"tag": "v0.0.87",
"kind": "patch",
"published_at": "2026-07-04T00:40:35Z"
},
{
"tag": "v0.0.86",
"kind": "patch",
"published_at": "2026-07-01T07:24:42Z"
},
{
"tag": "v0.0.85",
"kind": "patch",
"published_at": "2026-06-29T05:54:22Z"
},
{
"tag": "v0.0.73",
"kind": "patch",
"published_at": "2026-06-27T11:34:27Z"
},
{
"tag": "v0.0.72",
"kind": "patch",
"published_at": "2026-06-27T11:07:55Z"
},
{
"tag": "v0.0.70",
"kind": "patch",
"published_at": "2026-06-27T04:39:39Z"
},
{
"tag": "v0.0.69",
"kind": "patch",
"published_at": "2026-06-26T11:43:04Z"
},
{
"tag": "v0.0.68",
"kind": "patch",
"published_at": "2026-06-25T14:47:33Z"
},
{
"tag": "v0.0.67",
"kind": "patch",
"published_at": "2026-06-24T14:36:03Z"
},
{
"tag": "v0.0.66",
"kind": "patch",
"published_at": "2026-06-22T13:48:14Z"
},
{
"tag": "v0.0.65",
"kind": "patch",
"published_at": "2026-06-21T13:25:00Z"
},
{
"tag": "v0.0.64",
"kind": "patch",
"published_at": "2026-06-21T12:36:06Z"
},
{
"tag": "v0.0.63",
"kind": "patch",
"published_at": "2026-06-20T15:35:39Z"
},
{
"tag": "v0.0.62",
"kind": "patch",
"published_at": "2026-06-20T15:18:00Z"
},
{
"tag": "v0.0.61",
"kind": "patch",
"published_at": "2026-06-14T12:32:47Z"
},
{
"tag": "v0.0.60",
"kind": "patch",
"published_at": "2026-06-14T05:41:57Z"
},
{
"tag": "v0.0.55",
"kind": "patch",
"published_at": "2026-06-13T07:31:00Z"
},
{
"tag": "v0.0.54",
"kind": "patch",
"published_at": "2026-06-07T03:20:17Z"
},
{
"tag": "v0.0.53",
"kind": "patch",
"published_at": "2026-06-06T22:53:06Z"
},
{
"tag": "v0.0.52",
"kind": "patch",
"published_at": "2026-06-06T02:27:17Z"
},
{
"tag": "v0.0.51",
"kind": "patch",
"published_at": "2026-06-04T20:04:01Z"
},
{
"tag": "v0.0.50",
"kind": "patch",
"published_at": "2026-06-03T14:20:00Z"
},
{
"tag": "v0.0.49",
"kind": "patch",
"published_at": "2026-05-23T14:03:23Z"
},
{
"tag": "v0.0.44",
"kind": "patch",
"published_at": "2026-05-18T20:40:58Z"
},
{
"tag": "v0.0.43",
"kind": "patch",
"published_at": "2026-05-18T13:57:55Z"
},
{
"tag": "v0.0.42",
"kind": "patch",
"published_at": "2026-05-18T12:53:07Z"
},
{
"tag": "v0.0.41",
"kind": "patch",
"published_at": "2026-05-16T12:49:42Z"
},
{
"tag": "v0.0.40",
"kind": "patch",
"published_at": "2026-05-16T08:11:28Z"
},
{
"tag": "v0.0.39",
"kind": "patch",
"published_at": "2026-05-16T03:03:31Z"
},
{
"tag": "v0.0.37",
"kind": "patch",
"published_at": "2026-05-16T01:01:54Z"
},
{
"tag": "v0.0.36",
"kind": "patch",
"published_at": "2026-05-16T00:31:47Z"
},
{
"tag": "v0.0.35",
"kind": "patch",
"published_at": "2026-05-16T00:17:09Z"
},
{
"tag": "v0.0.34",
"kind": "patch",
"published_at": "2026-05-16T00:04:00Z"
},
{
"tag": "v0.0.33",
"kind": "patch",
"published_at": "2026-05-14T15:50:53Z"
},
{
"tag": "v0.0.32",
"kind": "patch",
"published_at": "2026-05-14T15:36:11Z"
},
{
"tag": "v0.0.31",
"kind": "patch",
"published_at": "2026-05-13T22:59:22Z"
},
{
"tag": "v0.0.30",
"kind": "patch",
"published_at": "2026-05-13T22:13:28Z"
},
{
"tag": "v0.0.29",
"kind": "patch",
"published_at": "2026-05-13T15:13:13Z"
},
{
"tag": "v0.0.28",
"kind": "patch",
"published_at": "2026-05-12T23:05:49Z"
},
{
"tag": "v0.0.27",
"kind": "patch",
"published_at": "2026-05-12T22:59:09Z"
},
{
"tag": "v0.0.26",
"kind": "patch",
"published_at": "2026-05-12T22:42:02Z"
},
{
"tag": "v0.0.24",
"kind": "patch",
"published_at": "2026-05-12T15:45:41Z"
},
{
"tag": "v0.0.23",
"kind": "patch",
"published_at": "2026-05-12T14:07:50Z"
},
{
"tag": "v0.0.22",
"kind": "patch",
"published_at": "2026-05-12T11:27:23Z"
},
{
"tag": "v0.0.21",
"kind": "patch",
"published_at": "2026-05-12T11:18:29Z"
},
{
"tag": "v0.0.20",
"kind": "patch",
"published_at": "2026-05-12T10:26:00Z"
},
{
"tag": "v0.0.19",
"kind": "patch",
"published_at": "2026-05-10T12:31:11Z"
},
{
"tag": "v0.0.18",
"kind": "patch",
"published_at": "2026-05-10T03:19:21Z"
},
{
"tag": "v0.0.17",
"kind": "patch",
"published_at": "2026-05-10T03:02:48Z"
},
{
"tag": "v0.0.16",
"kind": "patch",
"published_at": "2026-05-09T08:18:04Z"
},
{
"tag": "v0.0.15",
"kind": "patch",
"published_at": "2026-05-09T03:22:20Z"
},
{
"tag": "v0.0.14",
"kind": "patch",
"published_at": "2026-05-09T01:46:57Z"
},
{
"tag": "v0.0.13",
"kind": "patch",
"published_at": "2026-05-08T10:03:24Z"
},
{
"tag": "v0.0.12",
"kind": "patch",
"published_at": "2026-05-08T09:55:50Z"
},
{
"tag": "v0.0.11",
"kind": "patch",
"published_at": "2026-05-07T14:53:25Z"
},
{
"tag": "v0.0.10",
"kind": "patch",
"published_at": "2026-05-07T08:43:13Z"
},
{
"tag": "v0.0.9",
"kind": "patch",
"published_at": "2026-05-07T03:22:12Z"
},
{
"tag": "v0.0.8",
"kind": "patch",
"published_at": "2026-05-07T02:46:10Z"
},
{
"tag": "v0.0.7",
"kind": "patch",
"published_at": "2026-05-07T01:46:30Z"
},
{
"tag": "v0.0.5",
"kind": "patch",
"published_at": "2026-05-07T01:36:50Z"
}
],
"recent_commits": [
{
"oid": "f8b078d87e88a8e39df69c53f77c1cec5672411a",
"body": "Cursor Say messages + durable character-interaction traces.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MQNSGwEmpDwgV1iSNNhZx5",
"is_bot": false,
"headline": "Merge branch 'feat/character-interaction'",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-21T13:39:40Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "70ef83bb28dc76c3d6e381858e985afa5ac63efb",
"body": "Backs the Call / Ride / Say character interactions in mywant-gui.\n\nCursor store gains a speech bubble (message / messageAt). A live message is\ncarried forward across position PUTs that omit it: the store replaces the whole\nentry, so a message published by `mywant-gui i say` was otherwise wiped\nmilli\n[…]\nblock on every debounce and would otherwise log a trace per idle write.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MQNSGwEmpDwgV1iSNNhZx5",
"is_bot": false,
"headline": "feat: cursor Say messages + durable character-interaction traces",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-21T05:12:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "09e7cecb8f4de4d2fb232d4552e609ee939fb54b",
"body": "Server half of the world export/import feature whose GUI side shipped in\nmywant-gui v0.0.117 — until now the client called endpoints that did not\nexist.\n\n- GET /api/v1/worlds/{name}/export — download a world's snapshot YAML.\n The currently-open world is snapshotted first so the download reflects\n \n[…]\nit; 409s on an existing name unless overwrite is set.\n\nBoth validate the world name through safeWorldName before touching the\nworlds directory.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: world export/import endpoints [v0.1.0]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-20T09:39:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9261dd85b362657c769888a453fc163efae0c655",
"body": "The server was dying silently and repeatedly (3 times in the last ~12h of\nlogs, always the same stack):\n\n fatal error: concurrent map iteration and map write\n mywant/engine/core.(*Want).GetLabels want.go:1837\n mywant/engine/server.(*Server).getLabels handlers_others.go:946\n\nGET /a\n[…]\n which made it slow to even grep while diagnosing this.\nRotating at startup (not mid-run) avoids renaming a file the running server\nholds open.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: crash on concurrent label read/write; rotate server.log [v0.0.105]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-20T06:41:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3d282bf1e1d6646b2249695cda8644b346297d62",
"body": "…v0.0.104]\n\nConfig API\n- Add PATCH /api/v1/config for partial updates. PUT replaces every\n frontend-editable field, so a caller that omits one silently resets it —\n which is never what a settings toggle wants. The merge runs on the JSON\n representation, so new Config fields are patchable without \n[…]\nhumbnails\n- GET/POST /api/v1/worlds/{name}/thumbnail, stored under\n <worldsDir>/thumbs/<name>.png so they stay out of listWorlds' *.yaml scan.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: card_opacity setting, config PATCH endpoint, world thumbnails […",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-20T06:20:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "280748a569e6fc56477e5c7146db4b2b00e07b0a",
"body": "mywant/mywant-gui/mywant-rpg all push formula updates to the same\nhomebrew-mywant tap. When two releases land close together, the second\none's tap push can lose an optimistic-lock race (409), even though its\nown GitHub release published fine (as happened with mywant's v0.0.103\nracing mywant-gui's v0.0.112). Retry goreleaser release --clean a few\ntimes with backoff so the second attempt lands after the first tap\ncommit has settled.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: retry Homebrew tap push to survive cross-repo release races",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-19T12:59:44Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f57cdcd6bc92b499b7db3416a23fbb8f15f1f1a7",
"body": "…ents\n\n- Add the \"robot\" want type: an always-on chat companion backing the\n header interact bubble and canvas character, reusing coding want's\n Monitor/Think/Do session machinery plus autonomous canvas wandering\n- Add robot_slash_command.go: chat messages starting with \"/\" are\n tokenized and exe\n[…]\nt-in \"gui\" tree\n- Extend character store/handlers with additional character fields and\n endpoints, and wire supporting server/webhook plumbing\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: robot want type, chat-driven slash commands, character enhancem…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-19T08:46:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1838192ed3e2ca06ec6d3c92e3317b4cf74e922a",
"body": "… fixes [v0.0.102]\n\n- New game-category want types: wall/door (canvas collision, hidden from\n the dashboard list via list-visible:false), world (canvas portal into a\n named snapshot), startpoint/next_stage (skills-rpg stage-transition\n warp targets).\n- World snapshot persistence: GET /api/v1/worl\n[…]\ne GUI want card, alongside the full\n history already kept in work.log.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01RVpZEvZ9yATLYHEkYswBJh",
"is_bot": false,
"headline": "feat: wall/door/world canvas system + coding-agent auth/state-machine…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-19T04:29:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "35f87c657de05032682f935163a9b454a5c69360",
"body": "Server dropped the {\"wants\": [...]} wrapper for POST /api/v1/wants in\nv0.0.46 (bare array only), but the CLI client never followed suit, so\n`mywant wants create -f file.yaml` always failed with \"want '' must\nhave either a type or a recipe specified\".",
"is_bot": false,
"headline": "fix: CreateWant client sends bare want array, not Config wrapper",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-19T04:10:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f1ab559f39f3147fc8da0e4e692db742658bbba4",
"body": "… screenshot capture [v0.0.101]\n\n- gui_state.yaml: declare canvas_mode and form_situation as explicit state\n fields — they were being written fine but silently landing in hidden\n state (GetExplicitState only surfaces declared ProvidedStateFields),\n so the GUI could never read them back for cross-\n[…]\no engine/core (mywant.AppendWorkLog),\n callable directly from core code (e.g. handlers_cursors.go) without an\n import cycle back into server.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: gui_state schema fields (canvas_mode/form_situation) + web-want…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-17T22:59:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c16698c8aa18b984292032f48c993d109b867175",
"body": "The first press of an X-held aura drag now decides paint vs erase from that cell\n(erase if it already has this colour, else paint) and the whole drag keeps that\nmode, so dragging over mixed cells no longer flips between adding and removing.\nDrag boundaries are detected by a ~400ms gap between presse\n[…]\nell drag, so single taps still toggle. Keyed per want+colour in memory.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011nMy3dJavxJ9i9bmYHS6Ff",
"is_bot": false,
"headline": "feat: lock aura paint/erase mode per X-held drag [v0.0.100]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-14T13:46:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "97e45fa1c4edb9b6744a48130f0d7ec71a0eb796",
"body": "- listRecipes now stores a lightweight want summary (type + name) per recipe\n instead of nil Wants, so the GUI can show which want types a recipe contains\n (recipe cards render their icons) — previously every recipe reported 0 wants\n- aura want: pressing X on a cell that already carries this colou\n[…]\nell (toggle) instead of a no-op repaint; empty cells still paint + fill\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011nMy3dJavxJ9i9bmYHS6Ff",
"is_bot": false,
"headline": "feat: expose recipe want types in list; aura X toggles erase [v0.0.99]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-13T22:07:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3de2846d1b43488e3317d98055a5b1e0a803a999",
"body": "… poll at the 5s default\n\nThe MonitorAgent poll interval was read with a raw int/int64-only type switch,\nbut the value round-trips through YAML/JSON persistence and comes back as a\nstring (e.g. \"60000\" in state.yaml) or float64. Those cases silently fell\nthrough, so a configured 60s interval reverte\n[…]\nint]/convertToType (ToInt), which coerces string/float64/int uniformly.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011nMy3dJavxJ9i9bmYHS6Ff",
"is_bot": false,
"headline": "fix: honor string/float skill_poll_interval_ms so MonitorAgents don't…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-13T01:09:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6c44bc44a8f8c6df9ad069c5508396c083649626",
"body": "…ot state\n\nweb-wants (engine/server/handlers_web_wants.go, handlers_setup.go):\n- GET /api/v1/web-wants/{name} returns the stored elements for preload.\n- PUT /api/v1/web-wants/{name} overwrites an existing type's elements in place\n (\"上書き保存\"), reusing writeWebWantType with no new-name reservation; 40\n[…]\nte\nadditions (handlers_cursors.go, handlers_others.go, gui_state.yaml).\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011nMy3dJavxJ9i9bmYHS6Ff",
"is_bot": false,
"headline": "feat: web-want overwrite (GET/PUT) for inspect; work log + cursor/rob…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-12T12:12:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "300681416e2855377dfc3402b331ce79f29390c0",
"body": "…s + add wants connect/disconnect CLI\n\nCustom want types deployed directly (not via a recipe) never had their\n`parameters:` default values reach Spec.Params — recipes resolve defaults\nvia ParameterDefsToMap at expansion time, but a single want type instance\nhad no equivalent path, so onInitialize's \n[…]\nrowser_run claims\nimmediately instead of waiting for its 1-minute poll.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012X766fZ71Y5ezJTZPXkT1V",
"is_bot": false,
"headline": "feat: apply parameter defaults for directly-deployed custom want type…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-11T09:32:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9c31e98cd287f1137d10142d769c0d3f2a7d0bfe",
"body": "…omation\n\nCollapses the three separate pending-auto-launch/pending-nav-launch/\npending-browser-run polls (and background.js's matching poll functions)\ninto one GET /api/v1/web-wants/pending-action endpoint, dispatched by a\n`kind` field, with a generic claimQueue[T] replacing the duplicated\nmutex+sli\n[…]\nns\nnow run in world: 'MAIN' (React's expando properties on a DOM node are\ninvisible from the default ISOLATED world) and support a `background`\ntab option so frequent/automated runs don't steal focus.",
"is_bot": false,
"headline": "feat: unify browser-extension polling + complete CDP-free browser aut…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-09T14:00:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "dc28e550ac761e614855fb72ef652d01ae07a982",
"body": "buildWebWantYAML interpolated title raw (\"title: %s\"), unlike url\nelsewhere in the same template which already used %q. Real page\ntitles routinely contain \": \" (e.g. X/Twitter's \"<user>さん: \"<tweet\ntext>\" / X\"), which YAML parses as a nested mapping key when\nunquoted — \"yaml: line N: mapping values a\n[…]\nen this in the Chrome extension too — not Firefox-specific).\n%q produces a valid YAML double-quoted scalar (matching the existing\nurl usage), verified with a title containing \": \" and embedded\nquotes.",
"is_bot": false,
"headline": "fix: YAML-quote captured page title (was breaking on \": \" in titles)",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-09T11:10:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "982cab98a90198abec3d713b5663c938bad0c979",
"body": "background.js/options.html/options.js/content.js only use chrome.*\nAPIs (action/scripting/alarms/runtime/storage/tabs/permissions) that\nFirefox (109+) and Safari (16.4+) both support via the same namespace\n— manifest.json was the only genuinely browser-specific piece. Moved\nthe shared source into we\n[…]\n lesson here on\npurpose: verified via `git check-ignore`/`git status` immediately\nafter editing that both new webext-src/manifest.*.json exceptions\nactually register as tracked before relying on them.",
"is_bot": false,
"headline": "feat: Firefox + Safari builds for the Web Inspector extension",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-09T10:49:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8f12cce290eb6d394373469968deeabc136dc79c",
"body": "buildWebWantYAML — the Go template stamping out every bookmarklet/\ncapture-created web want type (google, example_com_web, etc.), as\nopposed to the static web_inspector.yaml already cleaned up — still\ndeclared debug_chrome_host/debug_chrome_port params and described\nitself as opening \"an existing Chrome browser\", both stale now that\nlaunchWebWant never drives CDP. Every newly captured want type going\nforward would otherwise have kept baking these in.",
"is_bot": false,
"headline": "fix: remove leftover debug_chrome_host/port from captured-type template",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-09T10:30:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0e58115e28e7baa91c4fc164ee02c62ce8f47dd5",
"body": "Not pointed to by any Go code, want type, or Makefile target — the\nactual skill script this was an early copy of now lives (and has\nevolved independently, e.g. parallel scraping across locations) in\n~/.mywant/custom-types/mywant-smartgolf-list-plugin/main.py, wired up\nvia smartgolf_list_available.yaml's onInitialize skill_path. This\nin-repo copy was dead weight.",
"is_bot": false,
"headline": "chore: remove stale, unreferenced tools/scripts/smartgolf_main.py",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-09T10:24:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f4940b20f269a2e296d9182d9eaa46ccf3f4f2d2",
"body": "launch_mode's \"cdp\" option (agent_web_inspector.go's openInspectorTab,\ndriving an existing --remote-debugging-port Chrome via the\nopen_inspector_tab MCP tool) is gone — web_inspector wants always use\nthe Chrome extension's auto-launch poll now, the only path anything\nactually exercises since WebInsp\n[…]\nd playwright-app's tsc build\nall pass. url-template want types (Yahoo search etc.) and the\nrecording/replay feature (agent_playwright_record.go) are untouched —\nseparate mechanisms, out of scope here.",
"is_bot": false,
"headline": "refactor: remove CDP-driven paths from web_inspector, delete dead code",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-09T10:19:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f9d630e1e6859e8e686abc1dfff7782909f6fc78",
"body": "agent_web_form_monitor.go's webFormMonitorSubmit calls POST\n/web-wants/{name}/launch with field_values when a web want deployed\nas a want card has its plan fields filled in and approved — this was\nthe last remaining CDP-dependent path (types.FillAndSubmitForm) after\nPR #5 converted the \"Inspect\" (no\n[…]\nOST .../launch with field_values against a\nfreshly captured example.com want type (single link element) queued\ncorrectly and the extension opened a tab + clicked the link within\nthe ~1min poll window.",
"is_bot": false,
"headline": "feat: extension-based form fill/submit for want-card deployment (no CDP)",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-09T05:00:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cb5bbf1dac9dc1995e4b92f7d67205bd3e2cab86",
"body": "* Add CDP-free auto-launch: extension opens inspector tab itself\n\nweb_inspector wants created with launch_mode=manual previously required a\nCDP-driven Chrome (openInspectorTab) or a user manually navigating to the\ntarget URL and clicking the extension's toolbar icon. Now the Chrome\nextension's backg\n[…]\n(want-based auto-launch and no-want nav-launch) confirmed opening a\ntab and rendering their respective overlays within the ~1min poll\nwindow.\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Web Inspector: extension auto-opens inspector tab (no CDP needed) (#5)",
"author_name": "Roy Hiroyuki Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-09T04:15:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7c389681f59260acdf25e3002409ffbf17da307f",
"body": "Go Net's HTML parser DoS advisory affected client, engine, and\nexamples/external_agent_grpc's go.mod (all indirect deps, pulled in\ntransitively). Bumped via go get + go mod tidy in each module; go\nbuild and go test pass in all three afterward.",
"is_bot": false,
"headline": "fix: bump golang.org/x/net to v0.55.0 (Dependabot alerts #62-64)",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-08T22:37:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "84f662a15455936971b7225be009deebfeb02177",
"body": "Bookmarklet injects a cross-origin <script src>, which sites with a\nstrict CSP (e.g. x.com) block outright across script-src/connect-src/\nimg-src/form-action/frame-src/worker-src — verified via CDP. A content\nscript's own DOM/script injection bypasses page CSP entirely, so this\nadds a Manifest V3 ex\n[…]\npermissions.request), defaulting to\nlocalhost:8080 out of the box.\n\nBuild wired into `npm run build` (mcp/playwright-app) and a new\n`make build-chrome-extension` target; CI builds it on every push/PR.",
"is_bot": false,
"headline": "feat: Chrome extension for Web Inspector on CSP-strict sites",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-08T22:35:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "de4266f81f2b43dc03d08ca73801cc993c240976",
"body": "…tence\n\nGeneralizes RegisterCanvasBgURLUpdater into a field-keyed\nRegisterConfigFieldUpdater/SetConfigField so more want types can persist\nindividual config.yaml fields without an HTTP round-trip.\n\nmanaged_launch wants running cloudflared/ngrok (result_field: tunnel_url)\nnow persist the captured URL\n[…]\nstate under Setpgid alone, making the listener\naccept-but-never-answer.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012X766fZ71Y5ezJTZPXkT1V",
"is_bot": false,
"headline": "feat: tunnel_url auto-capture + https_path/ca_cert_path config persis…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-08T13:48:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8b2d6732f48afeda6e5a63bb250f331ffe8f5143",
"body": "…a GUI session [v0.0.94]\n\n- new POST /web-wants/capture: ingests the overlay's done payload\n (+__page_url/__page_title), derives the type name from the hostname\n (deriveWebWantName) and uniquifies it atomically via os.Mkdir\n (reserveWebWantTypeDir, -2/-3 suffixes), then writes the type through\n \n[…]\nbanner; bootstrap's\n 404 banner is now a plain connection-error message\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012X766fZ71Y5ezJTZPXkT1V",
"is_bot": false,
"headline": "feat: always-on web want capture — bookmarklet creates types without …",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-07T22:07:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c9f22af2aea6d1c5c8ce1dcd4e85c8e800a695d5",
"body": "…design-plugins endpoint) [v0.0.93]\n\n- config: add canvas_design (Config, updateConfig whitelist, saveFrontendConfig)\n- character: add TileDesign/AuraDesign + SetDesign + PUT /characters/{id}/design\n- new handlers_design_plugins.go: serve ~/.mywant/design-plugin/*/plugin.* compiled\n via esbuild at \n[…]\ns)\n- also: web-inspector external-host CLI/start + overlay tweaks (WIP)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012X766fZ71Y5ezJTZPXkT1V",
"is_bot": false,
"headline": "feat: design-plugin backend (canvas_design, per-character tile/aura, …",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-06T22:23:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6518fe6d787df29b8acb0f61f8998d2c83fa26c8",
"body": "PreToolUse/PostToolUse hook script that times Skill invocations and reports\nduration + success/failure as an OTLP span, for correlating skill usage with\nthe rest of the OTel pipeline this project already exports to.",
"is_bot": false,
"headline": "chore: add Claude Code Skill invocation OTel telemetry hook",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-05T15:31:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "685bb9ecc1ca5e088387752302332f2ca62fbe97",
"body": "Character.AuraDefaults + SetAuraDefault API (with SSE broadcast) let a\ncharacter declare which aura/aura_erase want should auto-run against a\ncanvas by default. AuraWant.applyAuraDefaults / updateTargets and\nChoiceWant.ApplyAuraDefault wire the actual ground-painting; FindWantFunctionByID\nresolves a\n[…]\nversion bump (Volatile field\non StateDef, used by want_filter.go's CalculateWantHash to exclude\nhigh-frequency state fields from hash-based change detection) that's now\npublished as want-spec v0.1.19.",
"is_bot": false,
"headline": "feat: character aura-default marks + aura target tracking [v0.0.92]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-05T15:31:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "885e1de3991b3f2062e157dc9863e51a9bbf03fb",
"body": "… + Caddy HTTPS [v0.0.91]\n\nCDP requires Chrome/Blink, so it can't drive Safari or iPhone Chrome (both\nforced onto WebKit by iOS). Adds a launch_mode=manual path: the same\nsession-agnostic bookmarklet/overlay loader discovers which web_inspector\nwant is active via GET /api/v1/web-wants/active-inspect\n[…]\nserves a configured CA cert (web_inspector_ca_cert_path)\nso a phone can trust a local Caddy TLS-terminating reverse proxy without\nAirDrop. See mywant-gui/docs/WebInspectorIPhone.md for the full setup.",
"is_bot": false,
"headline": "feat: Web Inspector Safari/iPhone manual launch via active-inspection…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-05T15:30:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5ab51274d336771c3c7765d22326f5b5f4e29d4c",
"body": "….0.90]\n\n- Node/Playwright side captures a PNG screenshot right after the \"完了\"\n signal fires (page.screenshot() isn't available from the in-page overlay\n JS), saves it to ~/.mywant/screenshots/ (same dir the replay feature\n uses), and POSTs a follow-up {__screenshot_url} payload to the done\n web\n[…]\nsame treatment as the CursorMan icon) instead of a flat\n solid outline\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01UnZL2B7t1D87kALXTBdX37",
"is_bot": false,
"headline": "feat: Web Inspector completion snapshot + saved-element aura glow [v0…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-05T09:46:48Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "20790e26cdfefd7ca0de63b7040227e6771e38e5",
"body": "…sorMan, sidebar [v0.0.89]\n\n- x/X selects and opens the naming dialog; Enter/gamepad-A now finishes\n the whole inspection session (previously Y), matching the frontend's\n x/X-for-action, Enter/A-for-confirm convention\n- Naming dialog no longer auto-focuses its input; while unfocused, it\n speculat\n[…]\ned-circle, or the default\n stick-figure SVG when no character is bound\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01UnZL2B7t1D87kALXTBdX37",
"is_bot": false,
"headline": "feat: Web Want Inspector — AI name suggestions, character-matched Cur…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-05T08:34:15Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "78dc3917cc06f26dc5f4bc0cb4df813dca7fd2bc",
"body": "Add a bool \"active\" current state to the aura want type, toggled via\nwebhook actions \"activate\"/\"deactivate\" (e.g. from the AuraCardPlugin\nswitch in mywant-gui). Purely visual — placement/fill logic is\nunchanged regardless of the value; the frontend uses it to blink\npainted cells fluorescent per-character.",
"is_bot": false,
"headline": "feat: aura want on/off active toggle",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-04T05:33:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6c3cd6bac821418e91a8870b7c1244da0aa391ad",
"body": "…[v0.0.87]\n\n- aura want: paints the bound (or acting) character's color onto the grid\n cell it's placed at; closing a loop of its own cells auto-fills the\n enclosed interior with the same color\n- aura_erase want: clears aura cells within a radius of a character's\n position, across every aura want\n[…]\nolor), surfaced in the\n want's own history instead of failing silently\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01UnZL2B7t1D87kALXTBdX37",
"is_bot": false,
"headline": "feat: aura/aura_erase effect wants — character-color ground painting …",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-04T00:37:59Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0c1885e1a3829013b9ee3690f44cf406923e1d11",
"body": "Replaces the direction want's single heading angle with a 2D grid-cell\nvector (dx, dy), magnitude 1-5. When multiple direction wants target\nthe same character, the drive engine now sums the raw vectors instead\nof unit vectors, so a want with a longer vector pulls the combined\nheading harder than a shorter one. Movement speed is still governed\nsolely by gear.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: direction want as grid vector (dx/dy) with weighted vector-sum",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-02T23:01:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a3592f0981358f88a070b1f3c70227358026ffdd",
"body": "Adds a \"drive\" want category so want-graph configuration can move\ncharacters on the canvas: going/stopped toggle, gear (speed\nmultiplier), and direction (0-360° heading), each targeting one or\nmore characters. A new 1-second server-side drive engine resolves\nper-character motion from every currently\n[…]\ng, multiplicative for gear, vector-sum for\ndirection) and pushes updated positions through the existing\nephemeral cursor store + SSE broadcast.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: drive want category (going/gear/direction) + drive engine",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-02T21:47:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5caf7eee92fd977b41e9184f415cd8aa0cafdd33",
"body": "- GetSpec() now deep-copies Params/Imports under metadataMutex to\n prevent concurrent map iteration/write panic in buildWantAPIResponse\n and CalculateWantHash when UpdateParameter runs concurrently\n- monitorMRSAgentFn returns false (not true) so PollingAgent stays\n alive across ticks instead of b\n[…]\ngLog to stop server.log\n bloating (was generating 5 GB over 10 days)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EpR55sQxARXCrg11Db2Vwf",
"is_bot": false,
"headline": "fix: concurrent map crash + MRS monitor log flood [v0.0.86]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-07-01T07:22:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "497d896e01ad3a6d935e2983c808a7bd225850f2",
"body": "…roadcast [v0.0.85]\n\n- Add GET /api/v1/events SSE endpoint (handlers_sse.go) with sseHub, keepalive comments\n- Add etag.go with hashJSON helper shared across handlers\n- Broadcast want_changed SSE event with affected IDs after create/update/delete\n- Broadcast cursor SSE after updateCursor; broadcast \n[…]\nsetup.go\n- Remove unused crypto/sha256 import from handlers_others.go\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EpR55sQxARXCrg11Db2Vwf",
"is_bot": false,
"headline": "feat: SSE endpoint + ETag helpers + character cursor + want_changed b…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-29T05:51:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b3b3bb3eebdefc99e18220fa97e374eeb65ebb66",
"body": "- heart_effect: Heart\n- chime_effect: Bell\n- fireworks_effect: Sparkles\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add type-icon labels to effect want types [v0.0.75]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-27T13:24:26Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ad478df83a8c9f277df3e3d576de09e3a427b7e7",
"body": "…ndled [v0.0.74]\n\n- chain_builder: debouncedSaveLoop (3s coalesce) + TriggerSave() called on state/want updates\n- scriptable_want: skip param copy when resetOnRestart=false so persisted state survives restart\n- handlers_states/wants: TriggerSave after PUT /states and PUT /wants\n- effect YAMLs: add h\n[…]\n/fireworks_triggers state fields (label: current)\n- weather_effect.yaml: move from mywant-gui/engine (wrong location) to bundled system types\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: debounced save queue + note persistence fix + weather_effect bu…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-27T13:19:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "337d061baa9993c4c017d5cae69797996886a456",
"body": "…pes [v0.0.73]\n\n- chime_effect: new want type — webhook trigger increments chime_triggers; input_button/input_action/input_condition params for dispatcher\n- heart_effect, fireworks_effect, chime_effect: category changed from \"system\" → \"effect\"\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: chime_effect want type + effect category for all effect want ty…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-27T11:31:55Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ffed35bd7595fc1b9b1e40d0b2299d620fe0aa2a",
"body": "…arams + percentage subType [v0.0.72]\n\n- heart_effect want type: webhook trigger → increments heart_triggers counter; input_button/input_action/input_condition params for dispatcher framework\n- fireworks_effect want type: same pattern, increments fireworks_triggers counter\n- predefined.yaml: achievi\n[…]\nrcentage suffix → percentage subType; explicit entry for achieving_percentage (not in exposable index)\n- client: upgrade want-spec to v0.1.18\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: heart_effect + fireworks_effect want types + input dispatcher p…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-27T11:05:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7e83588b5a2f9dd0db86c5a74655a3ee3f95ca4b",
"body": "…[v0.0.71]\n\nDrop stateChangeTriggerHandler and the Triggers processing block — plan-change\ntriggers are now handled via EmitMonitorAgentEvent, not declarative YAML triggers.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: remove triggers from want spec + upgrade want-spec to v0.1.18 …",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-27T04:39:01Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7906a142ae04ac37879dfe604e6a9c1aa18e9552",
"body": "…te [v0.0.70]\n\n- PollingAgent subscribes to MonitorAgentEvent for targeted wake-up (EmitMonitorAgentEvent)\n- pending_device_action state field + open-url overlay push to devices\n- GUI state: activeLocationDevice field + devices list in gui_state.yaml\n- web want YAML: url-template support + pending_d\n[…]\ntriggers block\n- web_navigator: html_name field support for URL template rewriting\n- playwright MCP: npm audit fixes + server.ts enhancements\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: web want device action + event-driven monitor trigger + GUI sta…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-27T04:36:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e4527c8bc3f8e0aaa1f78ee9e400e7add95200b1",
"body": "- PollingAgent: Trigger() channel for immediate wakeup on state change\n- TriggerMonitorAgents() wakes all PollingAgents on demand\n- stateChangeTriggerHandler subscribes to StateChangeEvent and triggers agents\n- RegisterWant reads triggers: YAML from want-spec TriggerDef, wires subscriptions\n- agent_\n[…]\nn goroutine, returns 202\n- check_interval: 3s → 1s for web-form agent\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01AstgcLfUb9uCzg8QBfk7sB",
"is_bot": false,
"headline": "feat: web form want flow + event-driven plan trigger [v0.0.69]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-26T11:40:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "52a2eab31573a81235a1a92e6661733b4c23178e",
"body": "…ersistence [v0.0.68]\n\n- choice: add globalMemoCategory param to auto-populate choices from memo category\n- core: add MemoReader global interface (SetGlobalMemoReader/GetGlobalMemoReader)\n- memo_store: add GetCategory() for direct key lookup without subtype mapping\n- location: fix city not being fet\n[…]\nas field_key\n- make install: always rebuild playwright dist/server.js\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01AstgcLfUb9uCzg8QBfk7sB",
"is_bot": false,
"headline": "feat: choice globalMemoCategory + location city fix + device config p…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-25T14:45:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f3b4b97cd903845925db495885f0930b9db14ef5",
"body": "- Add location want type (system/location.yaml): exposes lat/lng/accuracy/\n altitude/device_id/device_name/updated_at/city/prefecture/address\n- LocationWant.Progress() extracts webhook payload into state fields\n- Reverse-geocode via Nominatim after >100m position change; populates\n city/prefecture (JP prefecture lookup via ISO3166-2-lvl4)/address\n- Add devices/activeLocationDevice/locationWantId fields to gui_state.yaml\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: location want type with reverse geocoding [v0.0.67]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-24T14:33:31Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ed635b65e38de1567c36c2164c27f18a101ab0fb",
"body": "…lation entries [v0.0.66]\n\n- handlers_relations.go: RelationRecord, computeRelationID (sha256[:12]), buildRelations, listRelations/listWantRelations/deleteRelationByID\n- handlers_wants.go: ExposableFieldInfo, apiMetadata with enriched CorrelationEntry (relationID embedded), buildWantAPIResponse merg\n[…]\nns\n- handlers_setup.go: GET/DELETE /api/v1/relations, GET /api/v1/wants/{id}/relations routes\n- datatypes.yaml: updated data type definitions\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: relations API + exposable fields startup cache + enriched corre…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-22T13:45:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6ea258beea4644da71b2f7314b5f708373567136",
"body": "Previously only the provider's Spec.Exposes entry was removed; now all consumer wants that reference the same key in Spec.Imports are also cleaned up.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: removeRelation also deletes consumer imports [v0.0.65]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-21T13:22:27Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6e4eb540c8869456560cff1b1e3818176c318c70",
"body": "- Add gauge bundled want type with value_pct/label/achieving_percentage state\n- Add claude_info system want type\n- Auto-provide exposable state snapshot to downstream wants each cycle\n- SubType-aware field matching: prefer state fields whose subType matches source DataType\n- Normalize int/float → number in type-based field matching\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: gauge want type + auto-expose + SubType field matching [v0.0.64]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-21T12:33:23Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6e8c28d41667fd1f39345268305b9c5ac8bcd80c",
"body": "…le correlation label test\n\n- want-spec v0.1.15 lacked SubType on StateDef (only ParameterDef had it),\n causing build failure in chain_builder_correlation.go and handlers_field_match.go\n- Upgrade to v0.1.16 which adds StateDef.SubType\n- Update TestTravelBudgetSystem_Integration to match field-specific label format\n (stateAccess/provider:fieldName) instead of the bare stateAccess/provider\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: upgrade want-spec to v0.1.16 to add SubType to StateDef; fix sta…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-20T15:30:51Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ea13a99c6aa6fdd27950f21eedadf02ef5713480",
"body": "…e + field match + memo + OAuth [v0.0.62]\n\n- /api/v1/datatypes endpoint: typed state field catalog (replaces subtypes.yaml)\n- datatypes.yaml: image_url, image, url, color, etc. with icon/color/baseType\n- dynamic_background want type + capability: expose/import background via global state\n- weather w\n[…]\nh.go)\n- config hook support (config_hook.go)\n- polling agent + want agent enhancements\n- subtypes.yaml removed (superseded by datatypes.yaml)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: datatypes endpoint + dynamic background want type + weather typ…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-20T15:15:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "503a43112e91be38e751f491e30a131267560475",
"body": "Document the brew trust step required when installing from the\nonelittlenightmusic/mywant tap on a new Mac — the step that was missing\nand caused permission errors until trust was explicitly granted.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add Homebrew install instructions with brew trust requirement",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-14T12:41:07Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a4c4356ce0951228673b4fc01b7c1757daaa793c",
"body": "…d Cache-Control [v0.0.61]\n\n- gui_state.yaml: add float_card_corner, canvas_center_x, canvas_center_y to\n ProvidedStateFields so GetExplicitState() returns them and cross-browser\n polling picks them up (previously stored as hidden state, never returned)\n- handlers_others.go: set Cache-Control: no-cache on GET /api/v1/gui/state\n response to prevent browsers from serving stale cached state\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: declare float_card_corner + canvas_center in gui_state.yaml; ad…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-14T12:30:07Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "34f8b10744e5c1b05209db9b33807cd1abaff968",
"body": "The embed directive in memo_store.go references subtypes.yaml but\nthe file was never committed, breaking `go build` in CI.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: add missing subtypes.yaml embed file to fix CI build failure",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-14T05:29:48Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "87131fa0354ba0f58d3f739821e1ee3c7432efdc",
"body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add Webhook icon to lifecycle_hook want type",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-14T05:27:08Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0a8e6418aa5354b38f358e549b0e8a12fa5f2e32",
"body": "…pg/ subdir\n\nWant type name rpg_hook → lifecycle_hook; file moved from\nwant_types/rpg/rpg_hook.yaml to want_types/lifecycle_hook.yaml.\nNo RPG-specific names remain in the mywant repository.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor: rename rpg_hook want type to lifecycle_hook + move out of r…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-14T05:26:02Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e112ea73d3bcc8d47551f6e9057f13f7f2aa2b23",
"body": "…fix param mapping\n\n- Rename agent_rpg_hook.go → agent_lifecycle_hook.go (no RPG-specific logic)\n- Agent name: lifecycle_hook_agent; uses hook_rules JSON array for multi-rule registration\n- Store all registered IDs in hook_rule_ids (JSON array) for clean unregister\n- Fix rpg_hook.yaml onInitialize.params direction: hook_rules: rules (not rules: hook_rules)\n- New bundled agent/capability YAMLs; delete old rpg-hook ones\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor: replace rpg_hook_agent with generic lifecycle_hook_agent + …",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-14T05:16:24Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "48e14135bd6e0b8eb4ef54a17e8e6d34a58d1b54",
"body": "…inal_result re-aggregation [v0.0.56]\n\n- Add filtered lifecycle rule API (POST/GET/DELETE /api/v1/lifecycle-webhooks/rules)\n admission-webhook style: rules carry embedded metadata forwarded to target URL\n- Add rpg_hook want type: deploying registers a rule, deleting unregisters it\n uses rpg_hook_a\n[…]\n) even when parent\n is already achieved, so hotel/reminder wants added after target completion\n appear in the target's final_result summary\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: dynamic lifecycle webhook rules + rpg_hook want type + target f…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-14T04:56:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "960c7dbbb8c8dbd9a74fd2bf605da1cae71b5399",
"body": "Prevents multi-tab write conflicts: when the client supplies an If-Match\nheader with the last-seen seq, the server returns 412 if another writer\nhas incremented the seq since then. Omitting If-Match preserves\nunconditional write behaviour for the robot CLI path.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: add If-Match optimistic locking to PUT /api/v1/gui/state [v0.0.55]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-13T07:28:19Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "df5ef885e1d8e64be71b87964d34d0cb2cead037",
"body": "…open mechanism [v0.0.54]\n\n- want_using.go: add hasUnresolvedImports() — blocks Progress() when any import is nil\n- want.go step 3.9: replace packet-based hasUsingWhenConditions() with hasUnresolvedImports()\n- planner.go: remove using:/LabelConditions gate injection; inject _achieve_gate_open import\n[…]\n.go: parse recheckAfterAchieve from isSatisfied YAML section\n- choice.yaml: remove _gate_blocked field (replaced by coordinator-managed gate)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: replace using:when packet gate with import-based _achieve_gate_…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-07T03:17:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b5ab17fc882136c80c28cab73c4d33c4f131cb8e",
"body": "- ConsumeWebhookAction now passes full payload map to handler\n- choice/slider/timer migrate from direct state writes to webhook pattern\n (POST /api/v1/webhooks/{id} → Progress() consumes via ConsumeWebhookAction)\n- timer: TimerLocals simplified, at_weekday field added to timer.yaml\n- SwitchWant imp\n[…]\nwant.go split into want_loop/control/error/filter/io/param/parent/statelabel/using\n- memo GET fixed: use All() to avoid double key conversion\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: user-control webhook pattern, want.go split, memo fix [v0.0.53]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-06T22:50:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fedd6b677bdcca5c36172d2dd2d0b1c3d56f9236",
"body": "…[v0.0.52]\n\n## Persistence (state.yaml restart)\n- fix: want-spec v0.1.13 — UsingEntry.MarshalYAML used Content[0] (first key\n scalar) instead of the mapping node itself, causing `when: field` in YAML\n and breaking LoadConfigFromYAML on restart (all user wants lost)\n- fix: LoadWantsFromMemoryFile u\n[…]\nterminalImports + choice → AsGlobalParam wiring\n- feat: MRS mrsCheckRequiredParams / mrsRebuildSkillArg\n- feat: Planner / Memo HTTP endpoints\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: persistence fix, AutoExpose, plan approval flow, date_and_time …",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-06T02:24:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1ebc6628396c05f3264801b5f3713a74fa0b0f38",
"body": "…v0.0.51]\n\nowner_types.go:\n- Phase 0 in Progress(): runs planner, writes planner_result to state.plan,\n sets plan_status=pending_approval, blocks Phase 1 until plan_approved=true\n- Initialize(): registers recipe state: section fields in ProvidedStateFields\n so they appear in state.current/plan (not hidden_state)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: plan approval flow — Phase 0 blueprint, pending_approval gate […",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-04T20:00:59Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "355a790abab9f638826a4b82f967c60d87d586eb",
"body": "…selectors\n\nPlain using: entries (prime sequence, fibonacci filter etc.) are unaffected.\nOnly using: entries with explicit when: conditions trigger the data-arrival gate.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: step 3.9 only gates wants with when: conditions, not all using: …",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-03T14:16:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "c2bbdc7324898cc633a76e05501ee91c11679a05",
"body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: update recipe_loader_test to use ws.UsingEntry",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-03T14:13:29Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "1c1a8c8177b3db2ad97b8299f1f76f70947977d2",
"body": "…ig missed in prev commit\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: include chain_builder_registry (AllWantTypeDefinitions) and conf…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-03T14:11:18Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "60c16f677ac23995dcf10aa7562c299cd244708a",
"body": "…gistry\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: remove local replace directive for want-spec, use v0.1.9 from re…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-03T14:09:58Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3cf848e25aa1bcaf5ce401716e84b47f70b80518",
"body": "…[v0.0.50]\n\nPlanner enhancements:\n- isSatisfied monitor target carries When condition via PlanTarget.When\n- Planner auto-generates gate label + negated LabelCondition for achieve chain\n- negateCondition: == ↔ !=, > ↔ <=, < ↔ >= with empty-operator default (== true)\n- RecipeContent.LabelConditions in\n[…]\n planner result stored in state.plan.planner_result after first Progress cycle\n\nwant-spec v0.1.9: UsingEntry, LabelCondition, PlanTarget.When\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: planner isSatisfied gate, using: when: condition, auto-provide …",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-06-03T14:04:24Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "52d846fd480770ad81f3f0c9c40b790ecf958797",
"body": "…oudSun icon; silencer system category\n\n- gui_state.yaml: add expanded_want_id, add_form_open, add_form_type, add_form_nonce, add_form_deploy_nonce fields\n for CLI-driven Add Want form automation (mywant gui create <type>)\n- gui_state_types.go: corresponding Go type additions\n- weather.yaml: add la\n[…]\nudSun, category-bg-light/dark gradients\n- silencer.yaml: change category to system; add type-icon=BellOff (silencer-only, not whole category)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: gui_state — add expanded_want_id, add_form_* fields; weather Cl…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-24T13:29:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b0ecd0a5fc0c80ed54515772abd87a26a64421e1",
"body": "…replay\n\n- RobotLogEntry struct: id, timestamp, message, target_type, target_id, action,\n nav_route, nonce, sidebar_open/want_id/tab, settings_subtab\n- updateGUIState appends entry when robot_visible=true with new nonce\n- getRobotLogs: returns newest-first list (capped at 500)\n- clearRobotLogs: DELETE /api/v1/robot/logs\n- replayRobotLog: re-applies stored command with fresh nonce\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: robot command log — GET/DELETE /api/v1/robot/logs + POST /{id}/…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-24T09:19:15Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "1ed2708f01e6dd425e1f5982fad82aa7290a01bb",
"body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: change weather want type category from system to weather",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-24T00:40:47Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a5f90f55fb4d135869bb247cdfc706445339609c",
"body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: go mod tidy engine and client for want-spec v0.1.8",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-24T00:28:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ae4e9b36fe9066ea736f16e6e64a71012596eb55",
"body": "…m [v0.0.49]\n\n- want-spec v0.1.8: ExposeEntry.AsGlobalParam — writes current state directly to a named global parameter\n- notification_system: globalParamExposeHandler wires CurrentState+AsGlobalParam via SetGlobalParameter\n- timer.yaml v1.2: remove target_param param/state; expose schedule via asGlobalParam in example\n- timer_types.go: update doc comment to reflect asGlobalParam pattern\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add asGlobalParam expose — timer uses it instead of target_para…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-24T00:27:13Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "de01b571e0becb7708a0d16ab0dbb84965a2cd15",
"body": "The \"want\" goal-label field was a natural-language memo with no readers in engine,\nagents, or UI. Removing it from predefined.yaml and SystemReservedStateFields.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor: remove unused \"want\" field from predefined state",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-24T00:21:45Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "73f91ed4cab30ee6831e9d14bcb4c0e0e7dcfd74",
"body": "…sired_dispatch reserved\n\nfinal_result is a valid generic output field that should appear in expose/import\nrecommendations. Only framework-internal memo fields (want, agent_result, desired_dispatch)\nare meaningless as data-flow sources.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: restore final_result as recommendable; keep want/agent_result/de…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-24T00:20:04Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ae6b48c2459127aed680e7494bb474db59c03184",
"body": "…ions\n\nagent_result, want, desired_dispatch are predefined.yaml fields shared by all\nwant types but were missing from SystemReservedStateFields(), causing them to\nappear in expose/import recommendations (especially on vertical drops with\nexposed_labels=plan,goal).\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: exclude predefined framework fields from field-match recommendat…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-24T00:19:10Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f48dd82becdd6954721f870772644a5c435fd9c2",
"body": "- hierarchicalState: add Internal field (json:\"internal\")\n- buildWantAPIResponse / buildWantStateSnapshot: route LabelInternal fields to internal map instead of current\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: separate internal state bucket in API response",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-24T00:05:58Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "da72a1665a9ca419e7e16bdf711093487ffe8c2f",
"body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: go mod tidy client after want-spec v0.1.7 upgrade",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-23T23:58:36Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "085e5d46e8fefacd0f4859c1778b299c2d201eed",
"body": "…c redesign [v0.0.48]\n\n- want-spec v0.1.7: add StateLabel enum, Exposable bool to StateDef, when_spec.yaml in spec/data/\n- engine: remove computeFieldMatchRecommendations — expose/import only; add IsExposable to FieldRef with score priority (finalResult=0.85, exposable=0.75, current=0.55)\n- want typ\n[…]\neplace every/at fields with single schedule:WhenSpec (label:current, exposable:true); every/at/timer_mode/at_recurrence become label:internal\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: exposable field recommendations, StateLabel enum, timer WhenSpe…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-23T23:58:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "96cfb0edfcdad05a5daeeec4da34e1fcace9ea6e",
"body": "target_param is superseded by exposes[].asGoal which propagates the\nselected state to the parent's goal state via SetGoal. The choice\nimplementation already uses the expose mechanism; target_param was\nvestigial. Remove the parameter and state definitions, and update\nthe example to show the idiomatic exposes pattern.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: remove target_param from choice type — use asGoal expose instead",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-23T14:13:00Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "be92694d32ebd2225bdbc56939cab25423b249a6",
"body": "…oal field)\n\n- Remove 'replace github.com/onelittlenightmusic/want-spec => ../../want-spec' from engine and client go.mod\n- Upgrade want-spec dependency to v0.1.4 which includes AsGoal in ExposeEntry\n- This fixes CI build failures caused by the local replace directive\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: remove local replace directive, upgrade want-spec to v0.1.4 (AsG…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-23T13:59:51Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "469a7d4c56348368bec92b354186bada3f42d5ed",
"body": "…tate fields from field-match [v0.0.47]\n\n- Add GooseExecutor (core/goose.go) and OpenAPI loader (core/openapi.go)\n- Refactor otel into build-tag-separated files (otel.go !ios, otel_ios.go ios stubs)\n- Add iOS stubs for agent executor and wasm manager\n- Add webhook support (core/webhook.go)\n- Filter \n[…]\nication system improvements\n- Server: handlers_others, handlers_setup, types updates\n- Types: button, choice, slider, timer type improvements\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: goose/openapi/webhook support, otel refactor, filter reserved s…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-23T13:55:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f16316602a5e4f2f3c525e2d812099c5b9ea7bea",
"body": "- engine/go.mod, client/go.mod: bump want-spec v0.1.2 → v0.1.3\n- Remove local 'replace' directives pointing to /Users/…/want-spec\n (CI cannot resolve local paths; published tag is used instead)\n- engine/server/server_test.go: fix TestCreateWantAPI payload from\n {\"wants\":[...]} wrapper (removed in \n[…]\neExecutor to\n return 'wants' at top level instead of 'config.wants' (matches\n Recommendation.Wants after Config wrapper removal in v0.0.46)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: upgrade want-spec to v0.1.3 and fix CI test failures",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-23T07:20:22Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fca0b7f84284c3db2e9a3e62e9f84ea97c75036d",
"body": "…o globalBuilder [v0.0.46]\n\n- Remove mywant.Config struct entirely; all internal slices are []*Want\n- Add Want DTO type to want-spec as the canonical API boundary type\n- Conversion helpers: WantDTOToRuntime, WantDTOSliceToRuntime, RuntimeWantToDTO, RuntimeWantsToDTOSlice\n- YAML persistence format: b\n[…]\nn struct literals, wrong WantDTOSliceToRuntime calls\n- Fix all test files: Config{} → []*Want{}, Recommendation.Config → Recommendation.Wants\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor: remove Config wrapper — API uses []*want_spec.Want, unify t…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-23T05:59:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "634b7ef7a7ab37eea323fc42a517262931b1dc25",
"body": "…h recommendations [v0.0.45]\n\n- want.go: Spec.Imports direct reference — getState() redirects to GetGlobalState() for imported keys;\n StoreState() silently blocks writes; GetAllState() overlays imported values; MarshalYAML excludes imports\n- chain_builder.go: UpdateWant now also updates rw.want.Spe\n[…]\ns read via getState('choices') through imports\n- choice.yaml: remove choice_import_field param definition; update example to use spec.imports\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: imports mechanism — generic expose/import data flow, field-matc…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-23T02:17:33Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "78ea1c65c2249a1b27c936d8c8a11265a718fea0",
"body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add sound_enabled to server config [v0.0.23]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-22T14:50:15Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0022c3d6488792720043563a7a7768294cabb2a1",
"body": "…ld, stateAccess/provider:field\n\n- buildStateAccessIndex now populates fieldAccessDetails[providerID][consumerID] = set<fieldName>\n tracking exactly which state fields flow between each provider/consumer pair\n- correlationPhase emits per-field labels (stateAccess/consumer:fieldX) instead of the\n g\n[…]\nupdated to count stateAccess as a flat +2 regardless of how many\n field labels exist, preventing rate inflation from multi-field connections\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: correlation labels carry field names — stateAccess/consumer:fie…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-22T11:23:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "674a85595316729646d2d4a1b6a17b59b306c455",
"body": "…mjs)\n\nNavigates to dashboard, switches to canvas mode, and captures screenshots\nat t=300ms and t=2500ms to verify category icons appear immediately without\nrequiring a click interaction.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "test: add Playwright canvas icon verification script (check_rpg_icon.…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-21T12:55:13Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2eb0b9a8f3ade0de78eaf6173179264144a3ad84",
"body": "Add labels field to GET /api/v1/want-types response so frontends\ncan read plugin-supplied metadata such as category-icon without\nrequiring code changes.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: expose metadata labels in want-types list API",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-21T12:26:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7537ac5af2cbb566740bacd23e3ec94d3cc2723e",
"body": "….0.44]\n\nIntroduce per-parameter type metadata so the GUI can render\nappropriate input controls (number, bool toggle, enum select)\nfor each global parameter.\n\n- global_params.go: LoadGlobalParamDefs / SetGlobalParamDefs /\n GetAllGlobalParamDefs backed by ~/.mywant/parameter_defs.yaml\n- chain_builde\n[…]\nyaml alongside parameters.yaml\n- handlers_others.go: GET returns merged definitions; PUT persists\n definitions when provided in request body\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add global parameter type definitions (parameter_defs.yaml) [v0…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-18T20:38:24Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "358bc83897575c128159b903b4606b245cb19428",
"body": "StoreLog now writes to stdout + history + OTEL at SeverityInfo, making\nDirectLog redundant. All call sites updated. All want logs now visible in Loki.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor: remove DirectLog, unify all logging through StoreLog [v0.0.43]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-18T13:55:20Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f4f85cca6c3a306261faa4b921df697eba94bd3f",
"body": "- Add card_height field to server Config, MyWantConfig, and saveFrontendSettingsToFile\n- Add ETag/304 support to GET /api/v1/gui/state using seq as cache key\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add card_height config and ETag-based GUI state polling [v0.0.42]",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-18T12:50:03Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "29eaf13dde54e73c29bd54e58762ab979eee0f27",
"body": "… PID [v0.0.41]\n\n- main.go: replace exec.Command plugin dispatch with syscall.Exec (kubectl/git style)\n to eliminate spurious zsh job-control notifications ([1] killed) when plugins\n send SIGTERM to their child processes\n- Makefile: add codesign --sign - --force after install to fix macOS Gatekeep\n[…]\nve(guiPidFile) — backend stop should not delete GUI PID file\n- release target: removed build-mywant-gui and build-playwright-app dependencies\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: syscall.Exec plugin dispatch, codesign install, fix stop.go GUI…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-16T12:47:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "411bbceecedd4ca4784d88d1cb7616d762207bc1",
"body": "… start Setpgid [v0.0.40]\n\n- coding want: switch claude --print to stream-json for real-time cc_streaming_text updates\n- coding want: add permission_mode and allowed_tools parameters (bypassPermissions for MCP)\n- coding want: preserve goal state (session_id, permission_mode, provider) across restart\n[…]\n 300ms liveness check after fork to detect immediate startup failures\n- CLAUDE.md, Makefile: remove restart-all target (no longer applicable)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: coding want stream-json, permission_mode, session preservation,…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-16T08:09:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b58e45d77ad5a68e6eddab651b6118838e446661",
"body": "- Remove want-spec replace directive (use published v0.1.0 instead)\n- Remove web/ npm build hook from .goreleaser.yaml (frontend moved to mywant-gui)\n- Remove Node.js setup step from release.yml (no web/ directory)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: remove local replace directives and web/ references from CI/release",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-16T02:59:24Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "96b4b8f808e5042af15c483c5180e92b0f5ae703",
"body": "…rontend [v0.0.38]\n\n- Migrate all 20 bundled recipe YAMLs from scattered map format to unified\n []ParameterDef list format (consistent with WantType parameters)\n- Add slider validation (min/max) to numeric params across all recipes\n- Update engine/server to accept both map and array validation form\n[…]\nn)\n- Update Makefile: drop build-gui, use build-mywant-gui for release target\n- Fix start.go dev mode to reference mywant-gui instead of web/\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: unify recipe parameters to ParameterDef[], remove legacy web/ f…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-16T02:44:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "58bbe128dd641971c729dd42d8b889f28d58581b",
"body": "- engine/core: ReloadUserCustomTypes() rescans ~/.mywant/custom-types/\n- server: POST /api/v1/want-types/reload endpoint\n- client: ReloadWantTypes() HTTP client method\n- CLI: mywant types reload subcommand with warning output\n- docs: CLI usage table + example; OpenAPI spec entry\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add want-type reload — hot-reload custom plugins without restart",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-16T00:54:48Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "963479fe07f0a094d48a30a67706b1b7d462022b",
"body": "…in [v0.0.36]\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: remove GuiCmd from root, delegate mywant gui to mywant-gui plug…",
"author_name": "Hiro Osaki",
"author_login": "onelittlenightmusic",
"committed_at": "2026-05-16T00:28:56Z",
"body_truncated": false,
"is_coding_agent": true
}
],
"releases_count": 77,
"commits_last_year": 1953,
"latest_release_at": "2026-07-21T13:41:51Z",
"latest_release_tag": "v0.1.1",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 49,
"days_since_latest_release": 0,
"mean_days_between_releases": 1
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": false,
"has_contributing": false,
"health_percentage": 28,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": []
},
"popularity": {
"forks": 0,
"stars": 0,
"watchers": 1,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [],
"complete": true,
"collected": 0,
"total_stars": 0
},
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"demos",
"examples",
"recipes"
],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": true,
"bootstrap_files": [
"Makefile",
"mcp/server/Makefile"
],
"api_schema_files": [
"engine/core/dynamic/interface.proto",
"engine/core/proto/agent_service.proto",
"engine/core/proto/dynamic_mcp.proto",
"engine/openapi.yaml",
"examples/external_agent_grpc/proto/agent_service.proto"
],
"has_devcontainer": false,
"typecheck_configs": [
"mcp/playwright-app/tsconfig.json"
],
"toolchain_manifests": [
"client/go.mod",
"engine/go.mod",
"examples/external_agent_grpc/go.mod",
"examples/external_agent_webhook/go.mod",
"go.mod",
"mcp/server/go.mod",
"tools/mock-plugin/go.mod",
"tools/mock/go.mod"
],
"largest_source_bytes": 71892,
"source_files_sampled": 332,
"oversized_source_files": 2,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 6523
},
"dependencies": {
"manifests": [
"client/go.mod",
"engine/go.mod",
"go.mod",
"tools/requirements-rag.txt"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "google.golang.org/grpc",
"direct": true,
"version": "v1.78.0",
"severity": "critical",
"ecosystem": "go",
"cvss_score": 9.1,
"advisory_ids": [
"GHSA-hrxh-6v49-42gf",
"GHSA-p77j-4mvh-x3m3",
"GO-2026-4762"
],
"fixed_version": "1.82.1",
"advisory_count": 3,
"oldest_advisory_days": 125
},
{
"name": "google.golang.org/grpc",
"direct": true,
"version": "v1.80.0",
"severity": "critical",
"ecosystem": "go",
"cvss_score": 9.1,
"advisory_ids": [
"GHSA-hrxh-6v49-42gf"
],
"fixed_version": "1.82.1",
"advisory_count": 1,
"oldest_advisory_days": 0
},
{
"name": "github.com/modelcontextprotocol/go-sdk",
"direct": true,
"version": "v1.4.0",
"severity": "high",
"ecosystem": "go",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-89xv-2j6f-qhc8",
"GHSA-q382-vc8q-7jhj",
"GO-2026-4770",
"GO-2026-4773"
],
"fixed_version": "1.4.1",
"advisory_count": 4,
"oldest_advisory_days": 124
},
{
"name": "fast-uri",
"direct": false,
"version": "3.1.3",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-v2hh-gcrm-f6hx"
],
"fixed_version": "4.1.1",
"advisory_count": 1,
"oldest_advisory_days": 0
},
{
"name": "@hono/node-server",
"direct": false,
"version": "1.19.14",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.9,
"advisory_ids": [
"GHSA-frvp-7c67-39w9"
],
"fixed_version": "2.0.5",
"advisory_count": 1,
"oldest_advisory_days": 0
},
{
"name": "golang.org/x/net",
"direct": false,
"version": "v0.55.0",
"severity": "unknown",
"ecosystem": "go",
"cvss_score": null,
"advisory_ids": [
"GO-2026-5942"
],
"fixed_version": "0.56.0",
"advisory_count": 1,
"oldest_advisory_days": 7
},
{
"name": "golang.org/x/sys",
"direct": false,
"version": "v0.40.0",
"severity": "unknown",
"ecosystem": "go",
"cvss_score": null,
"advisory_ids": [
"GO-2026-5024"
],
"fixed_version": "0.44.0",
"advisory_count": 1,
"oldest_advisory_days": 60
},
{
"name": "golang.org/x/text",
"direct": false,
"version": "v0.37.0",
"severity": "unknown",
"ecosystem": "go",
"cvss_score": null,
"advisory_ids": [
"GO-2026-5970"
],
"fixed_version": "0.39.0",
"advisory_count": 1,
"oldest_advisory_days": 7
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"high": 2,
"unknown": 3,
"critical": 2,
"moderate": 1
},
"advisory_count": 13,
"affected_count": 8,
"assessed_count": 175,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 2,
"direct_affected_count": 3
},
"ecosystems": [
"go",
"pypi"
],
"dependencies": [
{
"name": "github.com/onelittlenightmusic/want-spec",
"manifest": "client/go.mod",
"ecosystem": "go",
"version_constraint": "v0.1.19"
},
{
"name": "github.com/spf13/cobra",
"manifest": "client/go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.2"
},
{
"name": "github.com/spf13/viper",
"manifest": "client/go.mod",
"ecosystem": "go",
"version_constraint": "v1.21.0"
},
{
"name": "github.com/stretchr/testify",
"manifest": "client/go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "gopkg.in/yaml.v3",
"manifest": "client/go.mod",
"ecosystem": "go",
"version_constraint": "v3.0.1"
},
{
"name": "mywant/engine",
"manifest": "client/go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0"
},
{
"name": "github.com/ThreeDotsLabs/watermill",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v1.5.1"
},
{
"name": "github.com/evanw/esbuild",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v0.28.0"
},
{
"name": "github.com/getkin/kin-openapi",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v0.133.0"
},
{
"name": "github.com/google/uuid",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/gorilla/mux",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v1.8.1"
},
{
"name": "github.com/modelcontextprotocol/go-sdk",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v1.4.1"
},
{
"name": "github.com/onelittlenightmusic/want-spec",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v0.1.19"
},
{
"name": "github.com/stretchr/testify",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "github.com/tetratelabs/wazero",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.0"
},
{
"name": "go.opentelemetry.io/otel",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v1.43.0"
},
{
"name": "go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v0.19.0"
},
{
"name": "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v1.43.0"
},
{
"name": "go.opentelemetry.io/otel/log",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v0.19.0"
},
{
"name": "go.opentelemetry.io/otel/sdk",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v1.43.0"
},
{
"name": "go.opentelemetry.io/otel/sdk/log",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v0.19.0"
},
{
"name": "go.opentelemetry.io/otel/trace",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v1.43.0"
},
{
"name": "google.golang.org/grpc",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v1.80.0"
},
{
"name": "google.golang.org/protobuf",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v1.36.11"
},
{
"name": "gopkg.in/yaml.v3",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v3.0.1"
},
{
"name": "github.com/google/jsonschema-go",
"manifest": "engine/go.mod",
"ecosystem": "go",
"version_constraint": "v0.4.2"
},
{
"name": "@modelcontextprotocol/sdk",
"manifest": "mcp/playwright-app/package.json",
"ecosystem": "npm",
"version_constraint": "^1.0.0"
},
{
"name": "playwright",
"manifest": "mcp/playwright-app/package.json",
"ecosystem": "npm",
"version_constraint": "^1.49.0"
},
{
"name": "ws",
"manifest": "mcp/playwright-app/package.json",
"ecosystem": "npm",
"version_constraint": "^8.18.0"
},
{
"name": "github.com/modelcontextprotocol/go-sdk",
"manifest": "mcp/server/go.mod",
"ecosystem": "go",
"version_constraint": "v1.4.0"
},
{
"name": "github.com/google/uuid",
"manifest": "tools/mock/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/gorilla/mux",
"manifest": "tools/mock/go.mod",
"ecosystem": "go",
"version_constraint": "v1.8.1"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "github.com/evanw/esbuild",
"direct": true,
"version": "v0.28.0",
"ecosystem": "go"
},
{
"name": "github.com/getkin/kin-openapi",
"direct": true,
"version": "v0.133.0",
"ecosystem": "go"
},
{
"name": "github.com/google/jsonschema-go",
"direct": true,
"version": "v0.4.2",
"ecosystem": "go"
},
{
"name": "github.com/google/uuid",
"direct": true,
"version": "v1.6.0",
"ecosystem": "go"
},
{
"name": "github.com/gorilla/mux",
"direct": true,
"version": "v1.8.1",
"ecosystem": "go"
},
{
"name": "github.com/modelcontextprotocol/go-sdk",
"direct": true,
"version": "v1.4.0",
"ecosystem": "go"
},
{
"name": "github.com/modelcontextprotocol/go-sdk",
"direct": true,
"version": "v1.4.1",
"ecosystem": "go"
},
{
"name": "github.com/onelittlenightmusic/want-spec",
"direct": true,
"version": "v0.1.19",
"ecosystem": "go"
},
{
"name": "github.com/spf13/cobra",
"direct": true,
"version": "v1.10.2",
"ecosystem": "go"
},
{
"name": "github.com/spf13/viper",
"direct": true,
"version": "v1.21.0",
"ecosystem": "go"
},
{
"name": "github.com/stretchr/testify",
"direct": true,
"version": "v1.11.1",
"ecosystem": "go"
},
{
"name": "github.com/tetratelabs/wazero",
"direct": true,
"version": "v1.11.0",
"ecosystem": "go"
},
{
"name": "github.com/threedotslabs/watermill",
"direct": true,
"version": "v1.5.1",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/otel",
"direct": true,
"version": "v1.43.0",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc",
"direct": true,
"version": "v0.19.0",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc",
"direct": true,
"version": "v1.43.0",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/otel/log",
"direct": true,
"version": "v0.19.0",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/otel/sdk",
"direct": true,
"version": "v1.43.0",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/otel/sdk/log",
"direct": true,
"version": "v0.19.0",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/otel/trace",
"direct": true,
"version": "v1.43.0",
"ecosystem": "go"
},
{
"name": "google.golang.org/grpc",
"direct": true,
"version": "v1.78.0",
"ecosystem": "go"
},
{
"name": "google.golang.org/grpc",
"direct": true,
"version": "v1.80.0",
"ecosystem": "go"
},
{
"name": "google.golang.org/protobuf",
"direct": true,
"version": "v1.36.11",
"ecosystem": "go"
},
{
"name": "gopkg.in/yaml.v3",
"direct": true,
"version": "v3.0.1",
"ecosystem": "go"
},
{
"name": "@modelcontextprotocol/sdk",
"direct": true,
"version": "1.29.0",
"ecosystem": "npm"
},
{
"name": "playwright",
"direct": true,
"version": "1.61.1",
"ecosystem": "npm"
},
{
"name": "ws",
"direct": true,
"version": "8.21.0",
"ecosystem": "npm"
},
{
"name": "github.com/cenkalti/backoff/v5",
"direct": false,
"version": "v5.0.3",
"ecosystem": "go"
},
{
"name": "github.com/cespare/xxhash/v2",
"direct": false,
"version": "v2.3.0",
"ecosystem": "go"
},
{
"name": "github.com/davecgh/go-spew",
"direct": false,
"version": "v1.1.1",
"ecosystem": "go"
},
{
"name": "github.com/fsnotify/fsnotify",
"direct": false,
"version": "v1.9.0",
"ecosystem": "go"
},
{
"name": "github.com/go-logr/logr",
"direct": false,
"version": "v1.4.3",
"ecosystem": "go"
},
{
"name": "github.com/go-logr/stdr",
"direct": false,
"version": "v1.2.2",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/jsonpointer",
"direct": false,
"version": "v0.21.0",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/jsonpointer",
"direct": false,
"version": "v0.22.4",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/swag",
"direct": false,
"version": "v0.23.0",
"ecosystem": "go"
},
{
"name": "github.com/go-openapi/swag/jsonname",
"direct": false,
"version": "v0.25.4",
"ecosystem": "go"
},
{
"name": "github.com/go-viper/mapstructure/v2",
"direct": false,
"version": "v2.4.0",
"ecosystem": "go"
},
{
"name": "github.com/grpc-ecosystem/grpc-gateway/v2",
"direct": false,
"version": "v2.28.0",
"ecosystem": "go"
},
{
"name": "github.com/inconshreveable/mousetrap",
"direct": false,
"version": "v1.1.0",
"ecosystem": "go"
},
{
"name": "github.com/josharian/intern",
"direct": false,
"version": "v1.0.0",
"ecosystem": "go"
},
{
"name": "github.com/lithammer/shortuuid/v3",
"direct": false,
"version": "v3.0.7",
"ecosystem": "go"
},
{
"name": "github.com/mailru/easyjson",
"direct": false,
"version": "v0.7.7",
"ecosystem": "go"
},
{
"name": "github.com/mailru/easyjson",
"direct": false,
"version": "v0.9.1",
"ecosystem": "go"
},
{
"name": "github.com/mohae/deepcopy",
"direct": false,
"version": "v0.0.0-20170929034955-c48cc78d4826",
"ecosystem": "go"
},
{
"name": "github.com/oasdiff/yaml",
"direct": false,
"version": "v0.0.0-20250309154309-f31be36b4037",
"ecosystem": "go"
},
{
"name": "github.com/oasdiff/yaml3",
"direct": false,
"version": "v0.0.0-20250309153720-d2182401db90",
"ecosystem": "go"
},
{
"name": "github.com/oklog/ulid",
"direct": false,
"version": "v1.3.1",
"ecosystem": "go"
},
{
"name": "github.com/pelletier/go-toml/v2",
"direct": false,
"version": "v2.2.4",
"ecosystem": "go"
},
{
"name": "github.com/perimeterx/marshmallow",
"direct": false,
"version": "v1.1.5",
"ecosystem": "go"
},
{
"name": "github.com/pkg/errors",
"direct": false,
"version": "v0.9.1",
"ecosystem": "go"
},
{
"name": "github.com/pmezard/go-difflib",
"direct": false,
"version": "v1.0.0",
"ecosystem": "go"
},
{
"name": "github.com/sagikazarmark/locafero",
"direct": false,
"version": "v0.11.0",
"ecosystem": "go"
},
{
"name": "github.com/segmentio/asm",
"direct": false,
"version": "v1.1.3",
"ecosystem": "go"
},
{
"name": "github.com/segmentio/encoding",
"direct": false,
"version": "v0.5.3",
"ecosystem": "go"
},
{
"name": "github.com/segmentio/encoding",
"direct": false,
"version": "v0.5.4",
"ecosystem": "go"
},
{
"name": "github.com/sourcegraph/conc",
"direct": false,
"version": "v0.3.1-0.20240121214520-5f936abd7ae8",
"ecosystem": "go"
},
{
"name": "github.com/spf13/afero",
"direct": false,
"version": "v1.15.0",
"ecosystem": "go"
},
{
"name": "github.com/spf13/cast",
"direct": false,
"version": "v1.10.0",
"ecosystem": "go"
},
{
"name": "github.com/spf13/pflag",
"direct": false,
"version": "v1.0.10",
"ecosystem": "go"
},
{
"name": "github.com/subosito/gotenv",
"direct": false,
"version": "v1.6.0",
"ecosystem": "go"
},
{
"name": "github.com/woodsbury/decimal128",
"direct": false,
"version": "v1.3.0",
"ecosystem": "go"
},
{
"name": "github.com/woodsbury/decimal128",
"direct": false,
"version": "v1.4.0",
"ecosystem": "go"
},
{
"name": "github.com/yosida95/uritemplate/v3",
"direct": false,
"version": "v3.0.2",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/auto/sdk",
"direct": false,
"version": "v1.2.1",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/otel/exporters/otlp/otlptrace",
"direct": false,
"version": "v1.43.0",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/otel/metric",
"direct": false,
"version": "v1.43.0",
"ecosystem": "go"
},
{
"name": "go.opentelemetry.io/proto/otlp",
"direct": false,
"version": "v1.10.0",
"ecosystem": "go"
},
{
"name": "go.yaml.in/yaml/v3",
"direct": false,
"version": "v3.0.4",
"ecosystem": "go"
},
{
"name": "golang.org/x/net",
"direct": false,
"version": "v0.55.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/oauth2",
"direct": false,
"version": "v0.34.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/oauth2",
"direct": false,
"version": "v0.35.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/sys",
"direct": false,
"version": "v0.40.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/sys",
"direct": false,
"version": "v0.45.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/text",
"direct": false,
"version": "v0.37.0",
"ecosystem": "go"
},
{
"name": "google.golang.org/genproto/googleapis/api",
"direct": false,
"version": "v0.0.0-20260401024825-9d38bb4040a9",
"ecosystem": "go"
},
{
"name": "google.golang.org/genproto/googleapis/rpc",
"direct": false,
"version": "v0.0.0-20251029180050-ab9386a59fda",
"ecosystem": "go"
},
{
"name": "google.golang.org/genproto/googleapis/rpc",
"direct": false,
"version": "v0.0.0-20260401024825-9d38bb4040a9",
"ecosystem": "go"
},
{
"name": "@hono/node-server",
"direct": false,
"version": "1.19.14",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "22.20.1",
"ecosystem": "npm"
},
{
"name": "@types/ws",
"direct": false,
"version": "8.18.1",
"ecosystem": "npm"
},
{
"name": "accepts",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "ajv",
"direct": false,
"version": "8.20.0",
"ecosystem": "npm"
},
{
"name": "ajv-formats",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "body-parser",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "bytes",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "call-bind-apply-helpers",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "call-bound",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "content-disposition",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "content-type",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "content-type",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "cookie",
"direct": false,
"version": "0.7.2",
"ecosystem": "npm"
},
{
"name": "cookie-signature",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "cors",
"direct": false,
"version": "2.8.6",
"ecosystem": "npm"
},
{
"name": "cross-spawn",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "depd",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "dunder-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "ee-first",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "encodeurl",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "es-define-property",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "es-errors",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "es-object-atoms",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "escape-html",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "etag",
"direct": false,
"version": "1.8.1",
"ecosystem": "npm"
},
{
"name": "eventsource",
"direct": false,
"version": "3.0.7",
"ecosystem": "npm"
},
{
"name": "eventsource-parser",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "express",
"direct": false,
"version": "5.2.1",
"ecosystem": "npm"
},
{
"name": "express-rate-limit",
"direct": false,
"version": "8.5.2",
"ecosystem": "npm"
},
{
"name": "fast-deep-equal",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "fast-uri",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "finalhandler",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "forwarded",
"direct": false,
"version": "0.2.0",
"ecosystem": "npm"
},
{
"name": "fresh",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "fsevents",
"direct": false,
"version": "2.3.2",
"ecosystem": "npm"
},
{
"name": "function-bind",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "get-intrinsic",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "get-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "gopd",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "has-symbols",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "hasown",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "hono",
"direct": false,
"version": "4.12.28",
"ecosystem": "npm"
},
{
"name": "http-errors",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "iconv-lite",
"direct": false,
"version": "0.7.3",
"ecosystem": "npm"
},
{
"name": "inherits",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "ip-address",
"direct": false,
"version": "10.2.0",
"ecosystem": "npm"
},
{
"name": "ipaddr.js",
"direct": false,
"version": "1.9.1",
"ecosystem": "npm"
},
{
"name": "is-promise",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "isexe",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "jose",
"direct": false,
"version": "6.2.3",
"ecosystem": "npm"
},
{
"name": "json-schema-traverse",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "json-schema-typed",
"direct": false,
"version": "8.0.2",
"ecosystem": "npm"
},
{
"name": "math-intrinsics",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "media-typer",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "merge-descriptors",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "mime-db",
"direct": false,
"version": "1.54.0",
"ecosystem": "npm"
},
{
"name": "mime-types",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "negotiator",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "object-assign",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "object-inspect",
"direct": false,
"version": "1.13.4",
"ecosystem": "npm"
},
{
"name": "on-finished",
"direct": false,
"version": "2.4.1",
"ecosystem": "npm"
},
{
"name": "once",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "parseurl",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "path-key",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "path-to-regexp",
"direct": false,
"version": "8.4.2",
"ecosystem": "npm"
},
{
"name": "pkce-challenge",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "playwright-core",
"direct": false,
"version": "1.61.1",
"ecosystem": "npm"
},
{
"name": "proxy-addr",
"direct": false,
"version": "2.0.7",
"ecosystem": "npm"
},
{
"name": "qs",
"direct": false,
"version": "6.15.3",
"ecosystem": "npm"
},
{
"name": "range-parser",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "raw-body",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "require-from-string",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "router",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "safer-buffer",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "send",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "serve-static",
"direct": false,
"version": "2.2.1",
"ecosystem": "npm"
},
{
"name": "setprototypeof",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "shebang-command",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "shebang-regex",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "side-channel",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "side-channel-list",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "side-channel-map",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "side-channel-weakmap",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "statuses",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "toidentifier",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "type-is",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "5.9.3",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "6.21.0",
"ecosystem": "npm"
},
{
"name": "unpipe",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "vary",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "which",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "wrappy",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "zod",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "zod-to-json-schema",
"direct": false,
"version": "3.25.2",
"ecosystem": "npm"
},
{
"name": "numpy",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "sentence-transformers",
"direct": false,
"version": null,
"ecosystem": "pypi"
}
],
"collected": true,
"truncated": false,
"total_count": 177,
"direct_count": 27,
"indirect_count": 150
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 5,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "onelittlenightmusic",
"commits": 1744,
"avatar_url": "https://avatars.githubusercontent.com/u/33847?v=4"
},
{
"type": "User",
"login": "claude",
"commits": 7,
"avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.996
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"release.yml",
"test.yml"
],
"has_docs_dir": true,
"linter_configs": [
".golangci.yml"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum",
"package-lock.json"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 9,
"reason": "binaries present in source code",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 6,
"reason": "project has 2 contributing companies or organizations -- score normalized to 6",
"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": 9,
"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 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "10 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "f8b078d87e88a8e39df69c53f77c1cec5672411a",
"ran_at": "2026-07-22T05:04:19Z",
"aggregate_score": 3.4,
"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-21T13:41:57Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-07-09T04:15:16Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/onelittlenightmusic/MyWant",
"host": "github.com",
"name": "MyWant",
"owner": "onelittlenightmusic"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 57,
"inputs": {
"security": 37,
"vitality": 95,
"community": 21,
"governance": 47,
"engineering": 76
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 95,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 98,
"inputs": {
"commits_last_year": 1953,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 49
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "49/52 weeks with commits",
"points": 33.9,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 49
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "1953 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 1953
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 0 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": 77,
"latest_release_tag": "v0.1.1",
"releases_from_tags": false,
"days_since_latest_release": 0,
"mean_days_between_releases": 1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "77 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 77
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~1 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 1
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 0,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 0 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 0
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "critical",
"name": "Community & Adoption",
"value": 21,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 0,
"watchers": 1,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "0 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 0
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "1 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 1
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "at_risk",
"name": "Community health",
"note": null,
"notes": [],
"value": 44,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "license file present, not a recognized license",
"points": 16.9,
"status": "partial",
"details": [
{
"code": "license_custom",
"params": {}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "at_risk",
"name": "Sustainability & Governance",
"value": 47,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 18,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 2,
"top_contributor_share": 0.996
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 100% of commits",
"points": 0.1,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 72,
"inputs": {
"merged_prs": 5,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 0
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "5/5 decided PRs merged",
"points": 38.2,
"status": "met",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 5,
"decided": 5
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 58,
"inputs": {
"followers": 41,
"owner_type": "User",
"is_verified": null,
"owner_login": "onelittlenightmusic",
"public_repos": 84,
"account_age_days": 6461
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "41 followers of onelittlenightmusic",
"points": 11.7,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 41,
"login": "onelittlenightmusic"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "84 public repos, account ~17 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 84
}
},
{
"code": "account_age_years",
"params": {
"years": 17
}
}
],
"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": 76,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 84,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "2 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 2
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": ".golangci.yml",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yml"
}
}
],
"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": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 0,
"status": "missed",
"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": 37,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": null,
"notes": [],
"value": 34,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 18,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 0,
"scorecard_aggregate": 3.4
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "binaries present in source code",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 0 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": "10 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "at_risk",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 175 resolved dependencies against OSV; 2 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 175
}
},
{
"code": "advisories_unassessed",
"params": {
"count": 2
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 47,
"inputs": {
"source": "osv",
"advisories": 13,
"affected_packages": 8,
"assessed_packages": 175,
"unassessed_packages": 2,
"affected_by_severity": "critical 2, high 2, moderate 1, unknown 3",
"direct_affected_packages": 3
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "3 affected: google.golang.org/grpc v1.78.0 (critical 9.1), google.golang.org/grpc v1.80.0 (critical 9.1), github.com/modelcontextprotocol/go-sdk v1.4.0 (high 7.5)",
"points": 6.7,
"status": "partial",
"details": [
{
"code": "advisories_affected",
"params": {
"count": 3,
"packages": "google.golang.org/grpc v1.78.0 (critical 9.1), google.golang.org/grpc v1.80.0 (critical 9.1), github.com/modelcontextprotocol/go-sdk v1.4.0 (high 7.5)"
}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "2 advisory-carrying package(s) unaddressed past 90 days; oldest published 125 days ago",
"points": 28.3,
"status": "partial",
"details": [
{
"code": "advisories_stale",
"params": {
"days": 90,
"count": 2,
"oldest": 125
}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 175,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 2
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "excellent",
"name": "AI Readiness",
"value": 88,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 1,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 6523
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 100,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum",
"package-lock.json"
],
"has_dockerfile": true,
"typed_language": true,
"bootstrap_files": [
"Makefile",
"mcp/server/Makefile"
],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"mcp/playwright-app/tsconfig.json"
],
"agent_commit_share": 0.86,
"toolchain_manifests": [
"client/go.mod",
"engine/go.mod",
"examples/external_agent_grpc/go.mod",
"examples/external_agent_webhook/go.mod",
"go.mod",
"mcp/server/go.mod",
"tools/mock-plugin/go.mod",
"tools/mock/go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile, mcp/server/Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile, mcp/server/Makefile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": ".golangci.yml",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yml"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "mcp/playwright-app/tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "mcp/playwright-app/tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile, lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "86 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 86,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 71892,
"source_files_sampled": 332,
"oversized_source_files": 2
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Go (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "2/332 source files over 60KB",
"points": 54.7,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 332,
"oversized": 2
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "excellent",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"example_dirs": [
"demos",
"examples",
"recipes"
],
"has_mcp_signal": true,
"api_schema_files": [
"engine/core/dynamic/interface.proto",
"engine/core/proto/agent_service.proto",
"engine/core/proto/dynamic_mcp.proto",
"engine/openapi.yaml",
"examples/external_agent_grpc/proto/agent_service.proto"
]
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": "engine/core/dynamic/interface.proto, engine/core/proto/agent_service.proto, engine/core/proto/dynamic_mcp.proto, engine/openapi.yaml, examples/external_agent_grpc/proto/agent_service.proto",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "engine/core/dynamic/interface.proto, engine/core/proto/agent_service.proto, engine/core/proto/dynamic_mcp.proto, engine/openapi.yaml, examples/external_agent_grpc/proto/agent_service.proto"
}
}
],
"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": "demos, examples, recipes",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "demos, examples, recipes"
}
}
],
"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": [
"Could not fetch npm package 'playwright-mcp-app' from its registry"
],
"report_type": "repository",
"generated_at": "2026-07-22T05:04:34.819594Z",
"schema_version": "0.26.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/onelittlenightmusic/MyWant.svg",
"full_name": "onelittlenightmusic/MyWant",
"license_state": "custom",
"license_spdx": null
}