Repository navigation
Releases
v0.4.0 — retry the fetch and keep the failure cause
[0.4.0] - 2026-10-16
Added
fetchAttempts(default3): a failed fetch is retried with exponential
backoff before the route is given up on. A 4xx other than 429 is pi.dev
answering, so it is not retried.
Fixed
- A round no longer reports every fetch failure as a bare
fetch failed. The
wholecausechain is rendered (fetch failed ← connect ETIMEDOUT 172.67.221.13:443), which is what identifies the layer that broke — a
message-only rendering throws away the only useful part of a Node network
error, whosecauseis usually anAggregateErrorwith one entry per
resolved address. - The auto-round and uninstall warnings log the same cause chain instead of
%o-dumping the error object.
v0.3.0 — refresh existing catalog records
[0.3.0] - 2026-10-16
Added
-
updateExistingModels(defaultfalse): the round also refreshes records
the catalog already has with the fields pi.dev states today. Only pi.dev's
own fields are applied — acostor capacity it stays silent about keeps the
catalog's value, so nothing is zeroed by omission — and a record pi.dev has
moved to another protocol is re-grouped under the newapi. Records are
still never removed, and a refresh writes the usual backup and needs the
usual restart (reported ascatalog ↻N(…)). It is off by default because
the add-only merge is what stops a partial pi.dev listing from rewriting your
models.Measured on a real profile (
opencode/opencode-go): 65 records refreshed
with no protocol moves, then 31 including 7 protocol corrections — e.g.
claude-haiku-5-5had been stored asopenai-completionswhile pi.dev says
anthropic-messages— andstep-5-preview-free's 8k context corrected to 1M
withmaxTokens4096 → 65536. A second pass reports no further changes.
Changed
- Docs: the READMEs cover three host facts that each decided a real debugging
session — the stable pnpmallowBuildskey agithub:install needs, that
Node's globalfetchignoreshttp_proxy(run dsh with
NODE_USE_ENV_PROXY=1on a proxied host), and thatzen/inferenceare
two names for one opencode backend.AGENTS.mdrecords the measurements, the
models-replaces-catalog rule, and why the proxy stays a host setting.
[0.2.0] - 2026-10-15
Changed
- BREAKING (configuration):
keepBuiltinOnlyis renamed
keepCatalogOnly. The old name read as "keep only builtins"; the option
actually keeps the ids that exist only in the installed catalog, which the
writtenmodelslist would otherwise drop. The default is unchanged
(true); a profile that set the old key explicitly must rename it. - Docs: "catalog leg" / "settings leg" are now "catalog layer" /
"settings layer", the framing the rest of the documentation already used.
README.mdnow spells out the threesettingsModevalues, the
hand-tuning recipe viamodelOverrides, and why some ids are catalog-only.
[0.1.0] - 2026-10-14
Added
- Initial release. A dsh Cordis plugin that maintains both layers a model
must pass through, in one round:- catalog layer — copies pi.dev records the installed pi-ai catalog is
missing into@earendil-works/pi-ai/dist/providers/data/<route>.json
(generalisingdsh-opencode-go-modelsto any route; no hand-written
protocol/family table because pi.dev returns catalog-shaped records), with
atomic writes and a first-modification backup; - settings layer —
settingsMode: 'unset'(default) removes the route's
llm-pi-ai.providers.<route>.modelsoverride so the enriched catalog serves
the route;'mirror'rewrites the list from pi.dev (dsh-model-sync shape,
refusing routes with non-emptymodelOverrides);'keep'leaves settings
alone.
- catalog layer — copies pi.dev records the installed pi-ai catalog is
- Scheduled rounds (
intervalMinutes,startupDelaySeconds) plus a manual
/pi-ai-synccommand and apiAiSyncservice, both degrade gracefully when
the optional host services are absent. settingsMode,catalogSync,managedRoutes,refreshTimeoutMs,
syncNotify,keepBuiltinOnlyconfiguration with safe defaults. (Renamed to
keepCatalogOnlyafter this release.)- Uninstall restore: catalog backups are rolled back only when no profile still
references the package, and never over a file a pi-ai upgrade wholly replaced. - 29 unit tests (
node:test) and a host-free smoke boot.
Fixed
preparescript added before the first release: agithub:install runs
prepare, neverprepublishOnly, so the package arrived withoutlib/
(which is gitignored) andmain: lib/index.jsdid not resolve. Profiles
installing from GitHub must allow the build script inpnpm-workspace.yaml
(allowBuilds); on pnpm ≥ 11.21 the stable key
dsh-pi-ai-sync@git+https://github.com/jiaruihuang/dsh-pi-ai-sync.git
survives later pushes, the commit-pinned codeload key does not.
v0.2.0 — keepCatalogOnly + settingsMode docs
[0.2.0] - 2026-10-15
Changed
- BREAKING (configuration):
keepBuiltinOnlyis renamed
keepCatalogOnly. The old name read as "keep only builtins"; the option
actually keeps the ids that exist only in the installed catalog, which the
writtenmodelslist would otherwise drop. The default is unchanged
(true); a profile that set the old key explicitly must rename it. - Docs: "catalog leg" / "settings leg" are now "catalog layer" /
"settings layer", the framing the rest of the documentation already used.
README.mdnow spells out the threesettingsModevalues, the
hand-tuning recipe viamodelOverrides, and why some ids are catalog-only.
[0.1.0] - 2026-10-14
Added
- Initial release. A dsh Cordis plugin that maintains both layers a model
must pass through, in one round:- catalog layer — copies pi.dev records the installed pi-ai catalog is
missing into@earendil-works/pi-ai/dist/providers/data/<route>.json
(generalisingdsh-opencode-go-modelsto any route; no hand-written
protocol/family table because pi.dev returns catalog-shaped records), with
atomic writes and a first-modification backup; - settings layer —
settingsMode: 'unset'(default) removes the route's
llm-pi-ai.providers.<route>.modelsoverride so the enriched catalog serves
the route;'mirror'rewrites the list from pi.dev (dsh-model-sync shape,
refusing routes with non-emptymodelOverrides);'keep'leaves settings
alone.
- catalog layer — copies pi.dev records the installed pi-ai catalog is
- Scheduled rounds (
intervalMinutes,startupDelaySeconds) plus a manual
/pi-ai-synccommand and apiAiSyncservice, both degrade gracefully when
the optional host services are absent. settingsMode,catalogSync,managedRoutes,refreshTimeoutMs,
syncNotify,keepBuiltinOnlyconfiguration with safe defaults. (Renamed to
keepCatalogOnlyafter this release.)- Uninstall restore: catalog backups are rolled back only when no profile still
references the package, and never over a file a pi-ai upgrade wholly replaced. - 29 unit tests (
node:test) and a host-free smoke boot.
Fixed
preparescript added before the first release: agithub:install runs
prepare, neverprepublishOnly, so the package arrived withoutlib/
(which is gitignored) andmain: lib/index.jsdid not resolve. Profiles
installing from GitHub must allow the build script inpnpm-workspace.yaml
(allowBuilds); on pnpm ≥ 11.21 the stable key
dsh-pi-ai-sync@git+https://github.com/jiaruihuang/dsh-pi-ai-sync.git
survives later pushes, the commit-pinned codeload key does not.
v0.1.0 — initial release
[0.1.0] - 2026-10-14
Added
- Initial release. A dsh Cordis plugin that maintains both layers a model
must pass through, in one round:- catalog layer — copies pi.dev records the installed pi-ai catalog is
missing into@earendil-works/pi-ai/dist/providers/data/<route>.json
(generalisingdsh-opencode-go-modelsto any route; no hand-written
protocol/family table because pi.dev returns catalog-shaped records), with
atomic writes and a first-modification backup; - settings layer —
settingsMode: 'unset'(default) removes the route's
llm-pi-ai.providers.<route>.modelsoverride so the enriched catalog serves
the route;'mirror'rewrites the list from pi.dev (dsh-model-sync shape,
refusing routes with non-emptymodelOverrides);'keep'leaves settings
alone.
- catalog layer — copies pi.dev records the installed pi-ai catalog is
- Scheduled rounds (
intervalMinutes,startupDelaySeconds) plus a manual
/pi-ai-synccommand and apiAiSyncservice, both degrade gracefully when
the optional host services are absent. settingsMode,catalogSync,managedRoutes,refreshTimeoutMs,
syncNotify,keepBuiltinOnlyconfiguration with safe defaults. (Renamed to
keepCatalogOnlyafter this release.)- Uninstall restore: catalog backups are rolled back only when no profile still
references the package, and never over a file a pi-ai upgrade wholly replaced. - 29 unit tests (
node:test) and a host-free smoke boot.
Fixed
preparescript added before the first release: agithub:install runs
prepare, neverprepublishOnly, so the package arrived withoutlib/
(which is gitignored) andmain: lib/index.jsdid not resolve. Profiles
installing from GitHub must allow the build script inpnpm-workspace.yaml
(allowBuilds); on pnpm ≥ 11.21 the stable key
dsh-pi-ai-sync@git+https://github.com/jiaruihuang/dsh-pi-ai-sync.git
survives later pushes, the commit-pinned codeload key does not.