Registro público
Informe de salud del softwareesquema 0.26.0 · métricas 1.13.0 · 2026-07-22 05:04 UTC

onelittlenightmusic / MyWant

GoLicencia propia★ 0 estrellas⑂ 0 forksdesde sept 2015Ver en GitHub ↗

onelittlenightmusic/MyWant tiene un índice de salud de 57 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (95/100) y la más baja, Community & Adoption (21/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

57
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

57
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

Roy Hiroyuki OsakiCuenta personal
41 seguidores84 repositorios públicosdesde nov 2008Hitachi Ltd,

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

95Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
33.9/36Cadencia de commits — 49/52 semanas con commits
18/18Volumen de commits — 1953 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year1953
human_commit_share1
days_since_last_push0
active_weeks_last_year49
Cómo se puntúa
27/27Publica versiones — 77 versiones publicadas
36/36Recencia de las versiones — última versión hace 0 días
27/27Cadencia de publicación — una versión cada ~1 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count77
latest_release_tagv0.1.1
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases1

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

21Crítico · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 1 observadores
Datos de entrada utilizados
forks0
stars0
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
16.9/22.5Licencia — archivo de licencia presente, no es una licencia reconocida
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

47En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.1/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,996
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38.2/38.3Aceptación de PR — 5/5 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs5
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
11.7/25Alcance del propietario — 41 seguidores de onelittlenightmusic
25/25Trayectoria — 84 repos públicos, cuenta de ~17 años
Datos de entrada utilizados
followers41
owner_typeUser
is_verified
owner_loginonelittlenightmusic
public_repos84
account_age_days6461
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

76Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .golangci.yml
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 1 out of 1 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno

Documentación

65Moderado
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
0/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dir
has_descriptionno

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

37En riesgo · 16% del índice global
Cómo se puntúa
6.8/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 1 out of 1 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.2/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 10 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3,4
Cómo se puntúa
6.7/35Dependencias directas libres de avisos conocidos — 3 afectados: 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)
0/25Dependencias indirectas libres de avisos conocidos — el conjunto transitivo no es separable de las dependencias de desarrollo y prueba en este alcance
28.3/40Sin avisos pendientes — 2 paquete(s) con avisos sin atender más allá de 90 días; el más antiguo publicado hace 125 días
Datos de entrada utilizados
sourceosv
advisories13
affected_packages8
assessed_packages175
unassessed_packages2
affected_by_severitycritical 2, high 2, moderate 1, unknown 3
direct_affected_packages3
Excluidos de la puntuación (sin datos o no aplicable): Dependencias indirectas libres de avisos conocidos. Los pesos restantes se han renormalizado. Se cotejaron 175 dependencias resueltas con OSV. 2 no pudieron evaluarse: sin versión resuelta, ecosistema no admitido o fuera de la lista de paquetes informada. Este repositorio no publica ningún paquete que el índice resuelva, por lo que se evaluó en su lugar el grafo de dependencias del repositorio. Ese grafo mezcla fijaciones de desarrollo y prueba con las dependencias distribuidas, de modo que solo se puntúan las dependencias declaradas en tiempo de ejecución; los hallazgos transitivos se informan como contexto y quedan excluidos de la puntuación. No se analiza la alcanzabilidad.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

88Excelente · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md, CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 100 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes6523
Cómo se puntúa
18/18Arranque con un solo comando — Makefile, mcp/server/Makefile
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .golangci.yml
11/11Verificación estática de tipos — mcp/playwright-app/tsconfig.json
10/10Entorno reproducible — Dockerfile, lockfile
10/10Práctica demostrada con agentes — 86 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum, package-lock.json
has_dockerfile
typed_language
bootstrap_filesMakefile, mcp/server/Makefile
has_devcontainerno
has_linter_config
typecheck_configsmcp/playwright-app/tsconfig.json
agent_commit_share0,86
toolchain_manifestsclient/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_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
54.7/55Tamaños de archivo manejables — 2/332 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes71.892
source_files_sampled332
oversized_source_files2
Cómo se puntúa
40/40Esquema de API (OpenAPI/GraphQL/proto) — 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
20/20Servidor MCP
40/40Ejemplos ejecutables — demos, examples, recipes
Datos de entrada utilizados
example_dirsdemos, examples, recipes
has_mcp_signal
api_schema_filesengine/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

Datos clave

0estrellas de GitHub
2contribuidores
1953commits en los últimos 12 meses
0días desde el último push
77versiones publicadas
1factor bus
0issues abiertas
Go, PyPIecosistemas de paquetes

Advertencias de recopilación de datos

  • Could not fetch npm package 'playwright-mcp-app' from its registry

Más detalle

OpenSSF Scorecard 3.4 / 10
3.4agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-22 05:04 UTC

9Binary-Artifactsbinaries present in source code
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests1 out of 1 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
9Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities10 existing vulnerabilities detected
Dependencias directas 32
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/onelittlenightmusic/want-specv0.1.19client/go.mod
Gogithub.com/spf13/cobrav1.10.2client/go.mod
Gogithub.com/spf13/viperv1.21.0client/go.mod
Gogithub.com/stretchr/testifyv1.11.1client/go.mod
Gogopkg.in/yaml.v3v3.0.1client/go.mod
Gomywant/enginev0.0.0client/go.mod
Gogithub.com/ThreeDotsLabs/watermillv1.5.1engine/go.mod
Gogithub.com/evanw/esbuildv0.28.0engine/go.mod
Gogithub.com/getkin/kin-openapiv0.133.0engine/go.mod
Gogithub.com/google/uuidv1.6.0engine/go.mod
Gogithub.com/gorilla/muxv1.8.1engine/go.mod
Gogithub.com/modelcontextprotocol/go-sdkv1.4.1engine/go.mod
Gogithub.com/onelittlenightmusic/want-specv0.1.19engine/go.mod
Gogithub.com/stretchr/testifyv1.11.1engine/go.mod
Gogithub.com/tetratelabs/wazerov1.11.0engine/go.mod
Gogo.opentelemetry.io/otelv1.43.0engine/go.mod
Gogo.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpcv0.19.0engine/go.mod
Gogo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpcv1.43.0engine/go.mod
Gogo.opentelemetry.io/otel/logv0.19.0engine/go.mod
Gogo.opentelemetry.io/otel/sdkv1.43.0engine/go.mod
Gogo.opentelemetry.io/otel/sdk/logv0.19.0engine/go.mod
Gogo.opentelemetry.io/otel/tracev1.43.0engine/go.mod
Gogoogle.golang.org/grpcv1.80.0engine/go.mod
Gogoogle.golang.org/protobufv1.36.11engine/go.mod
Gogopkg.in/yaml.v3v3.0.1engine/go.mod
Gogithub.com/google/jsonschema-gov0.4.2engine/go.mod
npm@modelcontextprotocol/sdk^1.0.0mcp/playwright-app/package.json
npmplaywright^1.49.0mcp/playwright-app/package.json
npmws^8.18.0mcp/playwright-app/package.json
Gogithub.com/modelcontextprotocol/go-sdkv1.4.0mcp/server/go.mod
Gogithub.com/google/uuidv1.6.0tools/mock/go.mod
Gogithub.com/gorilla/muxv1.8.1tools/mock/go.mod
Todas las dependencias 177

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 27 paquetes directos y 150 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

RegistroPaqueteVersiónRelación
Gogithub.com/evanw/esbuildv0.28.0directa
Gogithub.com/getkin/kin-openapiv0.133.0directa
Gogithub.com/google/jsonschema-gov0.4.2directa
Gogithub.com/google/uuidv1.6.0directa
Gogithub.com/gorilla/muxv1.8.1directa
Gogithub.com/modelcontextprotocol/go-sdkv1.4.0directa
Gogithub.com/modelcontextprotocol/go-sdkv1.4.1directa
Gogithub.com/onelittlenightmusic/want-specv0.1.19directa
Gogithub.com/spf13/cobrav1.10.2directa
Gogithub.com/spf13/viperv1.21.0directa
Gogithub.com/stretchr/testifyv1.11.1directa
Gogithub.com/tetratelabs/wazerov1.11.0directa
Gogithub.com/threedotslabs/watermillv1.5.1directa
Gogo.opentelemetry.io/otelv1.43.0directa
Gogo.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpcv0.19.0directa
Gogo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpcv1.43.0directa
Gogo.opentelemetry.io/otel/logv0.19.0directa
Gogo.opentelemetry.io/otel/sdkv1.43.0directa
Gogo.opentelemetry.io/otel/sdk/logv0.19.0directa
Gogo.opentelemetry.io/otel/tracev1.43.0directa
Gogoogle.golang.org/grpcv1.78.0directa
Gogoogle.golang.org/grpcv1.80.0directa
Gogoogle.golang.org/protobufv1.36.11directa
Gogopkg.in/yaml.v3v3.0.1directa
npm@modelcontextprotocol/sdk1.29.0directa
npmplaywright1.61.1directa
npmws8.21.0directa
Gogithub.com/cenkalti/backoff/v5v5.0.3indirecta
Gogithub.com/cespare/xxhash/v2v2.3.0indirecta
Gogithub.com/davecgh/go-spewv1.1.1indirecta
Gogithub.com/fsnotify/fsnotifyv1.9.0indirecta
Gogithub.com/go-logr/logrv1.4.3indirecta
Gogithub.com/go-logr/stdrv1.2.2indirecta
Gogithub.com/go-openapi/jsonpointerv0.21.0indirecta
Gogithub.com/go-openapi/jsonpointerv0.22.4indirecta
Gogithub.com/go-openapi/swagv0.23.0indirecta
Gogithub.com/go-openapi/swag/jsonnamev0.25.4indirecta
Gogithub.com/go-viper/mapstructure/v2v2.4.0indirecta
Gogithub.com/grpc-ecosystem/grpc-gateway/v2v2.28.0indirecta
Gogithub.com/inconshreveable/mousetrapv1.1.0indirecta
Gogithub.com/josharian/internv1.0.0indirecta
Gogithub.com/lithammer/shortuuid/v3v3.0.7indirecta
Gogithub.com/mailru/easyjsonv0.7.7indirecta
Gogithub.com/mailru/easyjsonv0.9.1indirecta
Gogithub.com/mohae/deepcopyv0.0.0-20170929034955-c48cc78d4826indirecta
Gogithub.com/oasdiff/yamlv0.0.0-20250309154309-f31be36b4037indirecta
Gogithub.com/oasdiff/yaml3v0.0.0-20250309153720-d2182401db90indirecta
Gogithub.com/oklog/ulidv1.3.1indirecta
Gogithub.com/pelletier/go-toml/v2v2.2.4indirecta
Gogithub.com/perimeterx/marshmallowv1.1.5indirecta
Gogithub.com/pkg/errorsv0.9.1indirecta
Gogithub.com/pmezard/go-difflibv1.0.0indirecta
Gogithub.com/sagikazarmark/locaferov0.11.0indirecta
Gogithub.com/segmentio/asmv1.1.3indirecta
Gogithub.com/segmentio/encodingv0.5.3indirecta
Gogithub.com/segmentio/encodingv0.5.4indirecta
Gogithub.com/sourcegraph/concv0.3.1-0.20240121214520-5f936abd7ae8indirecta
Gogithub.com/spf13/aferov1.15.0indirecta
Gogithub.com/spf13/castv1.10.0indirecta
Gogithub.com/spf13/pflagv1.0.10indirecta
Gogithub.com/subosito/gotenvv1.6.0indirecta
Gogithub.com/woodsbury/decimal128v1.3.0indirecta
Gogithub.com/woodsbury/decimal128v1.4.0indirecta
Gogithub.com/yosida95/uritemplate/v3v3.0.2indirecta
Gogo.opentelemetry.io/auto/sdkv1.2.1indirecta
Gogo.opentelemetry.io/otel/exporters/otlp/otlptracev1.43.0indirecta
Gogo.opentelemetry.io/otel/metricv1.43.0indirecta
Gogo.opentelemetry.io/proto/otlpv1.10.0indirecta
Gogo.yaml.in/yaml/v3v3.0.4indirecta
Gogolang.org/x/netv0.55.0indirecta
Gogolang.org/x/oauth2v0.34.0indirecta
Gogolang.org/x/oauth2v0.35.0indirecta
Gogolang.org/x/sysv0.40.0indirecta
Gogolang.org/x/sysv0.45.0indirecta
Gogolang.org/x/textv0.37.0indirecta
Gogoogle.golang.org/genproto/googleapis/apiv0.0.0-20260401024825-9d38bb4040a9indirecta
Gogoogle.golang.org/genproto/googleapis/rpcv0.0.0-20251029180050-ab9386a59fdaindirecta
Gogoogle.golang.org/genproto/googleapis/rpcv0.0.0-20260401024825-9d38bb4040a9indirecta
npm@hono/node-server1.19.14indirecta
npm@types/node22.20.1indirecta
npm@types/ws8.18.1indirecta
npmaccepts2.0.0indirecta
npmajv8.20.0indirecta
npmajv-formats3.0.1indirecta
npmbody-parser2.3.0indirecta
npmbytes3.1.2indirecta
npmcall-bind-apply-helpers1.0.2indirecta
npmcall-bound1.0.4indirecta
npmcontent-disposition1.1.0indirecta
npmcontent-type1.0.5indirecta
npmcontent-type2.0.0indirecta
npmcookie0.7.2indirecta
npmcookie-signature1.2.2indirecta
npmcors2.8.6indirecta
npmcross-spawn7.0.6indirecta
npmdebug4.4.3indirecta
npmdepd2.0.0indirecta
npmdunder-proto1.0.1indirecta
npmee-first1.1.1indirecta
npmencodeurl2.0.0indirecta
npmes-define-property1.0.1indirecta
npmes-errors1.3.0indirecta
npmes-object-atoms1.1.2indirecta
npmescape-html1.0.3indirecta
npmetag1.8.1indirecta
npmeventsource3.0.7indirecta
npmeventsource-parser3.1.0indirecta
npmexpress5.2.1indirecta
npmexpress-rate-limit8.5.2indirecta
npmfast-deep-equal3.1.3indirecta
npmfast-uri3.1.3indirecta
npmfinalhandler2.1.1indirecta
npmforwarded0.2.0indirecta
npmfresh2.0.0indirecta
npmfsevents2.3.2indirecta
npmfunction-bind1.1.2indirecta
npmget-intrinsic1.3.0indirecta
npmget-proto1.0.1indirecta
npmgopd1.2.0indirecta
npmhas-symbols1.1.0indirecta
npmhasown2.0.4indirecta
npmhono4.12.28indirecta
npmhttp-errors2.0.1indirecta
npmiconv-lite0.7.3indirecta
npminherits2.0.4indirecta
npmip-address10.2.0indirecta
npmipaddr.js1.9.1indirecta
npmis-promise4.0.0indirecta
npmisexe2.0.0indirecta
npmjose6.2.3indirecta
npmjson-schema-traverse1.0.0indirecta
npmjson-schema-typed8.0.2indirecta
npmmath-intrinsics1.1.0indirecta
npmmedia-typer1.1.0indirecta
npmmerge-descriptors2.0.0indirecta
npmmime-db1.54.0indirecta
npmmime-types3.0.2indirecta
npmms2.1.3indirecta
npmnegotiator1.0.0indirecta
npmobject-assign4.1.1indirecta
npmobject-inspect1.13.4indirecta
npmon-finished2.4.1indirecta
npmonce1.4.0indirecta
npmparseurl1.3.3indirecta
npmpath-key3.1.1indirecta
npmpath-to-regexp8.4.2indirecta
npmpkce-challenge5.0.1indirecta
npmplaywright-core1.61.1indirecta
npmproxy-addr2.0.7indirecta
npmqs6.15.3indirecta
npmrange-parser1.3.0indirecta
npmraw-body3.0.2indirecta
npmrequire-from-string2.0.2indirecta
npmrouter2.2.0indirecta
npmsafer-buffer2.1.2indirecta
npmsend1.2.1indirecta
npmserve-static2.2.1indirecta
npmsetprototypeof1.2.0indirecta
npmshebang-command2.0.0indirecta
npmshebang-regex3.0.0indirecta
npmside-channel1.1.1indirecta
npmside-channel-list1.0.1indirecta
npmside-channel-map1.0.1indirecta
npmside-channel-weakmap1.0.2indirecta
npmstatuses2.0.2indirecta
npmtoidentifier1.0.1indirecta
npmtype-is2.1.0indirecta
npmtypescript5.9.3indirecta
npmundici-types6.21.0indirecta
npmunpipe1.0.0indirecta
npmvary1.1.2indirecta
npmwhich2.0.2indirecta
npmwrappy1.0.2indirecta
npmzod4.4.3indirecta
npmzod-to-json-schema3.25.2indirecta
PyPInumpyindirecta
PyPIsentence-transformersindirecta
Avisos de dependencias 8

Este repositorio no publica ningún paquete que el índice resuelva, así que se evaluó su propio grafo de dependencias — 175 paquetes, que incluyen también fijaciones de desarrollo y prueba que nunca se distribuyen: 8 tienen avisos conocidos, de los cuales 3 son directas. 2 no pudieron evaluarse: sin versión resuelta, ecosistema no admitido, o fuera de la lista de paquetes informada.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
google.golang.org/grpcv1.78.0directacrítica31.82.1
google.golang.org/grpcv1.80.0directacrítica11.82.1
github.com/modelcontextprotocol/go-sdkv1.4.0directaalta41.4.1
fast-uri3.1.3indirectaalta14.1.1
@hono/node-server1.19.14indirectamoderada12.0.5
golang.org/x/netv0.55.0indirectadesconocida10.56.0
golang.org/x/sysv0.40.0indirectadesconocida10.44.0
golang.org/x/textv0.37.0indirectadesconocida10.39.0

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "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
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.26.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadas.