Skip to content

Rewrite steam-cli onto the any-cli/kit framework#2

Merged
tamnd merged 5 commits into
mainfrom
kit-rewrite
Jun 18, 2026
Merged

Rewrite steam-cli onto the any-cli/kit framework#2
tamnd merged 5 commits into
mainfrom
kit-rewrite

Conversation

@tamnd

@tamnd tamnd commented Jun 18, 2026

Copy link
Copy Markdown
Owner

Rewrites steam-cli onto the any-cli/kit framework so every operation is declared once and surfaces as a CLI command, an HTTP route under serve, an MCP tool, and a steam:// URI dereference at the same time.

What changed

  • The hand-built cobra tree and the single steam/steam.go become a kit Domain in steam/domain.go.
  • The data layer splits into one file per surface (app, search, reviews, package, featured, news, players, achievements, profile, market) over a paced, retrying, caching client.
  • pkg/steamid does the offline SteamID conversion (64-bit, [U:1:N], STEAM_X:Y:Z), and steam/ids.go classifies any reference and builds its URL for the offline ref command.
  • README and docs are rewritten for the real command surface, with the exit-code taxonomy and the steamcommunity reachability caveat.

Keyless only, no API key

Every read is keyless: there is no API key and no login. The appid keys the app and its reviews, news, player count, and achievements, and records carry kit:link edges so a host can walk the graph.

The applist command is dropped. ISteamApps/GetAppList no longer answers keyless (GetSupportedAPIList reports the keyless ISteamApps interface as GetSDRConfig, GetServersAtAddress, and UpToDateCheck only), so there is no full-catalog surface to back it.

Verification

  • go build ./..., go vet ./..., go test -race ./... all pass.
  • golangci-lint run reports 0 issues.
  • Store and web-API commands were live-verified. The three steamcommunity.com commands (profile, resolve, market, price) are unit-tested against fixtures and return exit 8 here because steamcommunity.com is unreachable from this network, which is a property of the network rather than the tool.

tamnd added 5 commits June 18, 2026 16:30
Replace the hand-built cobra tree and the single steam/steam.go with a
kit Domain: each operation is declared once in steam/domain.go and becomes
a CLI command, an HTTP route under serve, an MCP tool, and a steam:// URI
dereference at the same time.

The data layer splits into one file per surface (app, search, reviews,
package, featured, news, players, achievements, profile, market) over a
paced, retrying, caching client. All reads are keyless: there is no API
key and no login. The appid keys the app and its reviews, news, player
count, and achievements, and records carry kit:link edges so a host can
walk the graph.

pkg/steamid does the offline SteamID conversion (64-bit, [U:1:N],
STEAM_X:Y:Z), and steam/ids.go classifies any reference and builds its
URL for the offline ref command.

The applist command is dropped: ISteamApps/GetAppList no longer answers
keyless, so there is no full-catalog surface to back it.
Point the Dockerfile, Makefile, and GoReleaser config at cmd/st and the
st binary name, and add a golangci misspell ignore for packageid, the
Steam field name for a package id.
Replace the scaffold page/links examples with the real command surface:
app, search, reviews, package, featured, news, players, achievements,
profile, resolve, market, price, and the offline ref group. Document the
single keyless plane across the three hosts, the appid graph, the exit-code
taxonomy, the steamcommunity reachability caveat, and the steam-specific
locale and review flags. Drop the stale v0.1.0 release-notes page and the
nonexistent list output format.
# Conflicts:
#	go.sum
#	steam/domain.go
#	steam/steam.go
featuredcategories carries four named slices alongside the numbered
banners: top_sellers, new_releases, specials, and coming_soon. Add a
command for each (top-sellers, new-releases, specials, coming-soon) so the
surface released in v0.1.1 is preserved on the kit rewrite. featured still
flattens and de-duplicates every category; each slice returns just its own
category in endpoint order with no cross-category dedup, and a missing
category yields no apps and no error.
@tamnd
tamnd merged commit 4d14f10 into main Jun 18, 2026
7 checks passed
@tamnd
tamnd deleted the kit-rewrite branch June 18, 2026 09:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant