@kaged/wire

Shared wire contract — Zod schemas for every HTTP request/response body, error envelope, and WebSocket message

17
source files
5
test files
~6.6k
lines
✓ 121 pass
tests
pass
typecheck
clean
lint

Test results 121

✓ common schemas > ApiErrorSchema parses valid error [2.02ms]
✓ common schemas > ApiErrorSchema rejects invalid error code [2.21ms]
✓ common schemas > ApiErrorSchema accepts optional details [0.200ms]
✓ common schemas > PaginatedResponseSchema wraps items correctly [0.520ms]
✓ common schemas > PaginatedResponseSchema accepts null cursor [0.160ms]
✓ common schemas > ErrorCodeSchema accepts all known codes [0.100ms]
✓ common schemas > HttpMethodSchema rejects invalid methods [0.070ms]
✓ common schemas > UserRoleSchema accepts valid roles [0.040ms]
✓ WebSocket schemas > WsFrameSchema parses valid frame [0.270ms]
✓ WebSocket schemas > WsFrameSchema rejects invalid channel [0.120ms]
✓ WebSocket schemas > WsChannelSchema accepts all channels [0.050ms]
✓ WebSocket schemas > WsCloseCodeSchema accepts all close codes [0.100ms]
✓ WebSocket schemas > WsOutputTypeSchema accepts all output types [0.100ms]
✓ WebSocket schemas > WsEventTypeSchema accepts all event types [0.060ms]
✓ session schemas > SessionSummarySchema parses valid session [0.170ms]
✓ session schemas > SessionSummarySchema accepts null created_by_user and each kind [0.180ms]
✓ session schemas > SessionSummarySchema rejects unknown kind [0.150ms]
✓ session schemas > SessionKindSchema enumerates the three kinds [0.030ms]
✓ session schemas > list-sessions contract query accepts optional kind filter [0.170ms]
✓ session schemas > MessagePartSchema parses text part [0.220ms]
✓ session schemas > MessagePartSchema parses tool_call part [0.110ms]
✓ session schemas > MessagePartSchema parses tool_result part [0.090ms]
✓ session schemas > MessageItemSchema parses valid message [0.110ms]
✓ session schemas > CheckpointSummarySchema parses valid checkpoint [0.060ms]
✓ session schemas > ContextEstimateResponseSchema parses [0.060ms]
✓ session schemas > PostCompactRequestSchema parses minimal request [0.060ms]
✓ project schemas > ProjectSummarySchema parses valid project [0.070ms]
✓ project schemas > ProjectDetailSchema extends ProjectSummarySchema [0.220ms]
✓ project schemas > MeResponseSchema parses valid response [0.170ms]
✓ project schemas > LaunchResponseSchema parses [0.050ms]
✓ project schemas > DaemonStatusResponseSchema parses [0.110ms]
✓ local config schemas > AliasMapSchema parses [0.060ms]
✓ local config schemas > SpendLimitsResponseSchema parses [0.080ms]
✓ local config schemas > ModelMetaResponseSchema parses [0.160ms]
✓ plugin schemas > PluginInfoSchema parses valid plugin [0.140ms]
✓ task schemas > TaskInstanceSchema parses valid task [0.060ms]
✓ task schemas > RunTaskRequestSchema parses minimal request [0.040ms]
✓ workflow schemas > WorkflowInvocationSchema parses valid invocation [0.280ms]
✓ issue schemas > OperatorIssueSummarySchema parses valid issue [0.090ms]
✓ user schemas > UserRecordSchema parses valid user [0.060ms]
✓ user schemas > AccountResponseSchema parses [0.040ms]
✓ user schemas > AuthMethodsResponseSchema parses [0.040ms]
✓ guest schemas > GuestMeResponseSchema parses [0.030ms]
✓ guest schemas > GuestLoginResponseSchema parses [0.030ms]
✓ system schemas > DslValidationResponseSchema parses [0.040ms]
✓ compaction schemas > CompactionRecordSchema parses valid record [0.090ms]
✓ contract map > CONTRACT has entries for all expected route groups [0.100ms]
✓ contract map > raw routes are in RAW_ROUTES, not CONTRACT [0.100ms]
✓ contract map > promoted raw routes are CONTRACT entries with raw: true [0.050ms]
✓ contract map > CONTRACT and RAW_ROUTES have no overlap [0.060ms]
✓ contract map > every CONTRACT entry has a summary string [0.230ms]
✓ contract map > CONTRACT entries with response have valid Zod schemas [0.220ms]
✓ contract map > CONTRACT entries with request have valid Zod schemas [0.150ms]
✓ contract map > CONTRACT entries with params have valid Zod schemas [0.200ms]
✓ contract map > routes with path params have a params schema [0.630ms]
✓ contract map > params schema keys match path param segments [0.810ms]
✓ param scalars > UlidSchema accepts valid ULID [0.280ms]
✓ param scalars > UlidSchema rejects invalid values [0.170ms]
✓ param scalars > SlugParamSchema accepts non-empty strings [0.030ms]
✓ param scalars > SlugParamSchema rejects empty string [0.060ms]
✓ param scalars > IntParamSchema accepts digit strings [0.040ms]
✓ param scalars > IntParamSchema rejects non-digit strings [0.090ms]
✓ provider model schemas > ProviderModelInfoSchema accepts manual flag [0.090ms]
✓ provider model schemas > SaveModelsRequestSchema accepts manual flag [0.070ms]
✓ provider model schemas > DiscoverModelsResponseSchema carries manual flag in merged [0.080ms]
✓ NotificationEventSchema > accepts valid attention.required event [0.180ms]
✓ NotificationEventSchema > rejects attention.required event without attention_kind [0.160ms]
✓ NotificationEventSchema > accepts valid run.completed event [0.080ms]
✓ NotificationEventSchema > rejects run.completed event without run_outcome [0.090ms]
✓ NotificationEventSchema > rejects unknown class value [0.270ms]
✓ NotificationEventSchema > rejects empty string fields [0.270ms]
✓ NotificationEventSchema > rejects invalid emitted_at values [0.140ms]
✓ SessionBellValueSchema > accepts enum values [0.090ms]
✓ SessionBellValueSchema > rejects invalid values [0.080ms]
✓ DeliveryOutcomeSchema > accepts delivered outcomes [0.080ms]
✓ DeliveryOutcomeSchema > accepts failed outcomes [0.050ms]
✓ DeliveryOutcomeSchema > rejects failed outcomes without reason [0.060ms]
✓ CreatePushSubscriptionRequestSchema > accepts a full subscription [0.100ms]
✓ CreatePushSubscriptionRequestSchema > rejects non-url endpoint [0.450ms]
✓ CreatePushSubscriptionRequestSchema > rejects empty subscription keys [0.140ms]
✓ VapidPublicKeyResponseSchema > requires public_key and fingerprint [0.100ms]
✓ contract field names > no contract entry uses 'body' as a field name (must be 'request') [0.130ms]
✓ ErrorCodeSchema — git domain codes > accepts every git.* code from specs/git.md §7 [0.130ms]
✓ ErrorCodeSchema — git domain codes > still accepts the pre-existing generic codes [0.060ms]
✓ ErrorCodeSchema — git domain codes > rejects an unnamespaced git code [0.070ms]
✓ GitRepoPathSchema > accepts a root-relative path [0.380ms]
✓ GitRepoPathSchema > rejects an absolute path (leading slash) [0.150ms]
✓ GitRepoPathSchema > rejects an empty string [0.080ms]
✓ GitStatusEntrySchema > accepts an ordinary modified entry [0.090ms]
✓ GitStatusEntrySchema > accepts a rename entry with origPath [0.080ms]
✓ GitStatusEntrySchema > accepts a conflicted entry with ConflictKind [0.050ms]
✓ GitStatusEntrySchema > accepts an untracked entry [0.050ms]
✓ GitStatusEntrySchema > rejects an invalid XY char [0.090ms]
✓ GitStatusEntrySchema > rejects an unknown conflict kind [0.080ms]
✓ GitRootSummarySchema > accepts a valid root summary with branch info [0.100ms]
✓ GitRootSummarySchema > accepts an invalid root (no repo) with reason, branch omitted [0.060ms]
✓ GitRootSummarySchema > accepts an unborn branch (oid null, head present) [0.080ms]
✓ GitRootSummarySchema > accepts a detached HEAD (head null, detached true) [0.070ms]
✓ GitRootSummarySchema > rejects negative ahead/behind counts [0.110ms]
✓ GitDiffResultSchema > accepts a text diff [0.060ms]
✓ GitDiffResultSchema > accepts a truncated text diff [0.040ms]
✓ GitDiffResultSchema > accepts a binary diff with null byte counts [0.040ms]
✓ GitDiffResultSchema > accepts a too-large diff [0.050ms]
✓ GitDiffResultSchema > rejects a text diff missing the modified side [0.080ms]
✓ GitDiffResultSchema > rejects an unknown kind [0.090ms]
✓ GitPullResultSchema > accepts an ok pull [0.070ms]
✓ GitPullResultSchema > accepts a conflicts pull with conflicted paths [0.080ms]
✓ GitPullResultSchema > rejects a conflicts pull without conflicted array [0.080ms]
✓ GitPathsRequestSchema > accepts root with a non-empty paths array [0.050ms]
✓ GitPathsRequestSchema > rejects an empty paths array [0.060ms]
✓ GitPathsRequestSchema > rejects a missing root [0.080ms]
✓ GitCommitRequestSchema > accepts root with a non-empty message [0.040ms]
✓ GitCommitRequestSchema > rejects an empty commit message [0.050ms]
✓ GitStashRequestSchema > accepts a minimal stash (root only) [0.050ms]
✓ GitStashRequestSchema > accepts a stash with message and includeUntracked [0.040ms]
✓ GitStashPopResponseSchema > accepts a clean pop (empty conflicts) [0.070ms]
✓ GitStashPopResponseSchema > accepts a conflicting pop with paths [0.080ms]
✓ message regenerate schemas > MessageItemSchema parses regenerate metadata fields [0.980ms]
✓ message regenerate schemas > MessageItemSchema parses without regenerate metadata fields [0.080ms]
✓ message regenerate schemas > RegenerateReceiptSchema parses minimal receipt [0.070ms]
✓ message regenerate schemas > RegenerateReceiptSchema parses queued receipt details [0.040ms]

Mentioned in

Type Document
adr ADR-0039: @kaged/wire is the normative wire contract; daemon and UI must consume it
adr ADR-0050: Operator-facing git pane for projects
adr ADR-0052: Message regeneration and two-tier, operator-cancellable retry
spec spec: git
spec Spec: HTTP + WebSocket API
spec Spec: Local config
spec Spec: Session notifications (daemon side)
spec Release pipeline
spec Spec: @kaged/wire