AGENT SKILL

rpcgen

Rpcgen — генерация клиентов из SMD/OpenRPC для Go, TypeScript, PHP, Swift, Kotlin, Dart. Используй при подключении клиента к чужому RPC-сервису или публикации собственного SMD/OpenRPC-контракта.

License 许可
MIT
最近更新
2026-11-05
Stars
★ 7
Forks
1

01 前言 Front Matter

name
rpcgen
description
Rpcgen — генерация клиентов из SMD/OpenRPC для Go, TypeScript, PHP, Swift, Kotlin, Dart. Используй при подключении клиента к чужому RPC-сервису или публикации собственного SMD/OpenRPC-контракта.

03 SKILL.md 正文

Rpcgen

Upstream: https://github.com/vmkteam/rpcgen

Генерирует типизированные клиенты из SMD (Service Mapping Description) zenrpc-сервера. Связанный инструмент — rpcdiff (diff OpenRPC schema для breaking-changes в CI).

Tool-зависимость:

tool github.com/vmkteam/rpcgen/v2/cmd/rpcgen

Языки и API

gen.GoClient, gen.TSClient, gen.PHPClient, gen.SwiftClient, gen.KotlinClient, gen.DartClient, gen.OpenRPC(name, url).

CLI — через -lang <go|typescript|php|swift|kotlin|dart>, источник -url (SMD endpoint) или -file smd.json, вывод -o. Полный список флагов — rpcgen --help.

vmkteam-паттерн: on-the-fly handler

Сервер раздаёт клиенты с собственных endpoint'ов через rpcgen.Handler:

a.echo.Any("/v1/rpc/api.ts",   appkit.EchoHandlerFunc(rpcgen.Handler(gen.TSClient(typeMapper))))
a.echo.Any("/v1/rpc/api.go",   appkit.EchoHandlerFunc(rpcgen.Handler(gen.GoClient(golang.Settings{Package: appName}))))
a.echo.Any("/v1/rpc/api.swift",     appkit.EchoHandlerFunc(rpcgen.Handler(gen.SwiftClient(swift.Settings{Class: "API", TypeMapper: swiftTypeMapper}))))
a.echo.Any("/v1/rpc/networking.swift", appkit.EchoHandlerFunc(rpcgen.Handler(gen.SwiftClient(swift.Settings{IsProtocol: true, TypeMapper: swiftTypeMapper}))))
a.echo.Any("/v1/rpc/api.kt",        appkit.EchoHandlerFunc(rpcgen.Handler(gen.KotlinClient(kotlin.Settings{Class: "Api", PackageAPI: "com.example.api", TypeMapper: kotlinTypeMapper}))))
a.echo.Any("/v1/rpc/networking.kt", appkit.EchoHandlerFunc(rpcgen.Handler(gen.KotlinClient(kotlin.Settings{Class: "Api", PackageAPI: "com.example.api", IsProtocol: true}))))
a.echo.Any("/v1/rpc/openrpc.json",  appkit.EchoHandlerFunc(rpcgen.Handler(gen.OpenRPC("service", rpcUrl))))
  • IsProtocol: true для Swift/Kotlin → protocol/interface вместо class/data class
  • TypeMapper func(schema, current) string — переопределение типов per-язык

Makefile-цели (vmkteam-конвенция)

go-client:
	rpcgen -lang go -url http://localhost:$(PORT)/rpc/ -o ./pkg/client/$(NAME)/

type-script-client: generate
	rpcgen -lang typescript -url http://localhost:$(PORT)/rpc/ -o ../frontend/src/api/factory.generated.ts
	rpcgen -lang typescript -url http://localhost:$(PORT)/vt/ -o ../frontend/src/api/vt.generated.ts

Gotchas

  • TS: после генерации добавить // @ts-nocheck на 3-ю строку (после /* eslint-disable */), иначе frontend не собирается
  • Go-клиенты импортируются как project/pkg/client/<service>, инициализация svc.New("http://host/rpc/")
  • rpcdiff old.json new.json — сравнение OpenRPC schema, полезно перед деплоем
  • Клиент сервиса из того же модуля (CLI, SDK) — тоже pkg/client/<service>/, не рядом с потребителем

Известные баги (rpcgen ≤ v2.5.7)

Убрать раздел, когда исправят upstream: #42.

  • Go-клиент теряет ошибку сервера. Для кодов, описанных в //zenrpc:<код>, сгенерированный метод заменяет *zenrpc.Error пакетной переменной ErrSvcMethodNNN с текстом из комментария: message и data ответа теряются, errors.As их не достанет. Сравнение errors.Is(err, client.ErrSvcMethodNNN) работает. Нужна подсказка из data (причина, hint) — http.RoundTripper клиента читает тело ответа с ошибкой, сохраняет error.data и возвращает тело дальше (образец — hubsrv pkg/cli/client.go).

Маркер

// Code generated by rpcgen; DO NOT EDIT.

04 同仓库更多 Skills

vmkteam
vmkteam/claude-plugins

zenrpc

Zenrpc — справочник по JSON-RPC 2.0 серверу для Go. Используй при создании и редактировании RPC-сервисов.

★ 7
vmkteam
vmkteam/claude-plugins

youtrack

YouTrack — задачи через REST API и pcurl. Используй для поиска issues, создания, обновления описаний, смены assignee/stage/приоритета, логирования времени и работы с комментариями.

★ 7
vmkteam
vmkteam/claude-plugins

topsrv

topsrv — метрики, алерты, CVE и HTTP-логи серверов проекта через публичный JSON-RPC API app.topsrv.io. Используй, когда нужна загрузка CPU, памяти или диска хоста, метрики PostgreSQL/nginx/angie агента topsrv (`topsrv_*`), какие алерты горят, уязвимые пакеты на серверах или кто (боты, сети, IP) нагружает сайт.

★ 7
vmkteam
vmkteam/claude-plugins

testing

Testing — используй всегда, когда пишешь или правишь Go-тесты (*_test.go), в том числе по сценариям Given/When/Then из spec: фреймворк как в соседних файлах, префикс TestDB, фабрики pkg/db/test, реальная БД без моков. Также при настройке TestMain/test-short и когда тесты падают в gate, но проходят локально.

测试与质量
★ 7
vmkteam
vmkteam/claude-plugins

solve

Solve — полный цикл решения задачи из YouTrack: preflight → анализ → план → реализация → ревью → коммит. Используй при любой YouTrack-задаче (`/solve PLF-819`); флаг `--fast` сокращает HITL для тривиальных багфиксов.

★ 7
vmkteam
vmkteam/claude-plugins

skills-check

Skills Check — smoke-тесты интеграций из project-index.md. Используй для проверки что pcurl-профили и URL всех data-source скиллов ещё живы.

★ 7