6 Commits
Author SHA1 Message Date
pnokerandClaude Code e1edbbcdc3 docs(cli): sync readme with new commands and fix documentation drift
adds the provider model and attachment command groups to the readme
with usage examples for every subcommand, documents device
import-template and alert point-profile, corrects the point history
option name from --count to --limit, fixes the mcp example key from
transport to type, adds config profile create/delete to the multi-
profile section, and aligns the test suite with the updated command
surface. also updates ci to run typecheck alongside tests.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-06 13:43:30 +08:00
pnokerandClaude Code 97c5bd58e7 feat(cli): adopt the core hardening and guardian test suite
the core modules gain a proper error taxonomy (CliError with
kind/code/exitCode, classifyError for zod and commander bridges,
suppressFailureEnvelope for streaming commands), atomic config writes
(temp+fsync+rename with win32 acl tightening, lockfiles with stale
pid recovery, quarantine for corrupted files instead of silent reset),
a hardened transport client (rfc 7807 detail extraction, identity
mismatch warnings, epoch-guarded token renewal), credential store
security fixes (execfile without shell on all platforms, powershell
encodedcommand on win32, secret-tool stdin on linux), and 60 new
guardian tests covering every fix. 488 tests total.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-06 13:22:16 +08:00
pnokerandClaude Code 2df494c15d fix(cli): harden error exits, validate inputs, and reject bad formats
process.exit crashed node on windows with a libuv assertion while fetch
keep-alive handles were open — printandexit and handlefatalerror now
set the exit code and throw a silentexit control-flow signal that the
entry point unwinds cleanly. detectformat rejected unknown --format
values but commander routes the flag to the program level, so
applyglobaloptions now validates it there too. model add/update gains
local temperature range and max-tokens validation (nan silently became
null before), and provider add/update/check validates the protocol
type enum locally with a clear message instead of a backend 400.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-06 05:39:52 +08:00
pnokerandClaude Code 56fffbbedc test(cli): cover provider model group and label write paths
eleven cases exercise the new agentic commands (provider list add
delete check with both saved-id and draft modes, model list config-list
add delete check) and extend the manager-write parameterized suite
with group and label update-delete, bringing the total to 99 tests
across 11 files with full coverage of every new subcommand.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-05 23:50:39 +08:00
pnoker 2b9c188b85 fix(cli): enforce the output contract, exit codes, and timeouts
All transport goes through one shared http seam with a 30s abort timeout and network or auth error mapping, add replaces create as the verb with a one-release alias, login and logout stop swallowing auth and network failures, the global --profile and --format options are actually honored together with the persisted output_format setting, config set validates numeric input instead of poisoning the schema and a corrupt config now warns, backs itself up and never silently reverts to defaults, paging and url parameters are validated and encoded, and the dead crypto helper is gone. The contract is pinned by a dedicated test suite.
2026-10-03 13:44:00 +08:00
pnoker eae86b58fc refactor(storage)!: unify platform persistence on reactive postgresql
- migrate auth, manager, data, and agentic persistence to R2DBC
- hard cut pagination, facade, gateway, web, and CLI contracts
- remove legacy database and TSDB adapters and document validation gates

BREAKING CHANGE: platform persistence now requires PostgreSQL 18 with TimescaleDB and the new reactive API contracts.
2026-09-01 22:03:16 +08:00