chore: version packages - #194
Open
github-actions[bot] wants to merge 1 commit into
Open
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
8 times, most recently
from
September 5, 2026 19:11
e2fe427 to
ee265a6
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 5, 2026 19:32
ee265a6 to
58692f3
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
seamless-cli@0.13.0
Minor Changes
63ff4ff: Add
seamless check --strict, which exits non-zero when a check fails.checkis what you would reach for in a health-check script or a CI gate, and it alwaysexited 0: an empty directory, a stack that is down, and a fully healthy project were
indistinguishable to anything reading the exit status.
--strictexits 1 if any check failed, reporting how many. Without it the exit status isunchanged, because this output has been parsed by scripts since before the flag existed.
Every check still runs either way. A gate that stops at the first problem hides the rest,
and the whole picture is the reason to run
checkat all.Patch Changes
79aa298: Clean
distbefore building, so a stale artifact cannot be packed.buildwas a baretsc, which overwrites but never removes. A file deleted or renamedin
srcleft its old output behind, andprepublishOnlyruns the same script, so a localpublish could ship something no longer in the source tree. The
cleanscript alreadyexisted and is now wired in.
d039e18: Add
--jsontoseamless whoamiandseamless sessions list.config get/roles,users list/credentials, andorg list/get/members listall had it;these two, both natural scripting targets, did not, so reading an identity or a session id
from a script meant parsing formatted output.
Both print machine-readable output and nothing else: an empty session list is
[]ratherthan "No active sessions.", and
whoami --jsonreports a missingsuboremailasnullinstead of the(unknown)the table shows.723d581: Point a managed scaffold at the instance URL the portal computes.
initcomposed the scaffolded backend'sAUTH_SERVER_URLfromapplication.domain, astored column the portal superseded. It goes stale when a trial is upgraded and its tenant
moves zones, and mvp and business instances are served at
domain/<infraId>rather than atdomain. Either way the scaffold pointed at a URL that does not answer, and the failuresurfaced as an SDK error in the developer's app rather than as anything the CLI said.
resolveAppInstanceUrlalready existed for exactly this, andappsand the applicationpicker already used it; the two scaffold paths did not. They do now.
The connectable-application filter asked for
domaintoo, so an application the portalcomputed an
instanceUrlfor but whosedomaincolumn was never populated was filteredout and never offered. It now asks the same question the scaffold does.
e1d3687: Write the signing key id a managed instance actually publishes.
A managed scaffold hardcoded
JWKS_KID=dev-main. Managed instances pin their kid per tier(
trialkey1for trials,paidkey1for paid), so the value was never the instance's own.Nothing verifies against it, adapters resolve the key from the token header through the
remote JWKS, but they do warn on boot while it is the dev default, so every managed
scaffold produced an app that reported itself misconfigured.
initnow reads the kid from the instance's/.well-known/jwks.json. If the instancecannot be reached it keeps the old default, says so, and explains that nothing breaks
except the warning.
976081b: Say what could not be reached when a scaffold's network read fails.
seamless initmakes three remote reads: the template registry, the templates archive, andthe auth server's
.env.example. Each of them handles a non-ok HTTP response with a messagenaming the status and the URL, but a connection-level failure (offline, DNS, TLS, no route)
rejects with a bare
TypeError: fetch failedthat propagated untouched to the top-levelhandler. The whole output was "Error: fetch failed", which named neither the host nor which
of the three reads had failed.
The three call sites now go through a shared helper that turns that rejection into a message
naming the URL, what the CLI wanted from it, and the network as the likely cause, in the
style
loginalready uses for an unreachable instance. Non-ok responses keep the messagesthey had, and the original error is preserved as the thrown error's
cause.4418970: Recognize the addresses a local dev instance actually answers on.
isLocalInstanceUrlaccepted onlylocalhost,127.0.0.1,::1and.localhostsubdomains. It gates two things: whether plaintext
httpis allowed for an instance URL,and whether
--localOTP delivery is permitted. A dev instance is commonly reached atnone of those, a container bound to
0.0.0.0, a LAN address from a phone on the samenetwork, or an mDNS
.localname, and each was rejected as if it were production, forcinghttpsonto a box with no certificate.Now also treated as local: the whole
127.0.0.0/8loopback range,0.0.0.0and::, theprivate IPv4 ranges (
10/8,172.16/12,192.168/16), link-local (169.254/16andfe80::/10), IPv6 unique-local (fc00::/7), and.localnames. Ranges are matched byoctet rather than by prefix, so
172.15,172.32and1.10.0.1stay public.8e5c0f7: Remove code nothing calls.
src/utils/writeEnv.ts, an unused duplicate ofcore/env.ts'swriteEnvthat stillemitted unquoted values, the bug fixed in the real one.
buildJWKSConfigin the docker generator, which had no callers and was the only user ofcore/jwks.ts, so that module went with it.generateKidincore/secrets.ts.generateSecretbeside it stays; it is widely used.setupDockerAuthin the auth generator, unreachable becausegenerateAuthServeris onlyever called with
"local". It also wrote a compose file mountingpgdataat/var/lib/postgresql/data, which the pinnedpostgres:18ignores, so it had gone staleas well as unreachable.
With the unreachable branch gone,
generateAuthServerno longer needs a mode, and itscontext: anyandmode: "local" | "docker" | Symbolparameters become a plainroot: string.74ae06c: Stop printing
Error: undefinedwhen something other than anErroris thrown.The top-level handler in
index.tsand the catch blocks inwhoamiandsessionsallread
.messageoff the thrown value, whichthrowdoes not guarantee exists. A rejectedpromise carrying a string, a parsed response body, or
undefinedprinted nothing useful,naming neither the failure nor the fact that something unexpected came back.
A new
errorMessagerenders any thrown value: anError's message (or its name when themessage is empty), a thrown string as it is, a
messagefield off a thrown object, andotherwise the object's shape or a labelled primitive. A thrown object is scrubbed first,
since it arrives from a rejected request as often as from our own code.