- Five-region CSS grid shell (TopBar, LeftNav, Main, StatusFooter; Inspector collapsed)
- Ten placeholder routes with EmptyState cli/string variants and ApiErrorBoundary
- Extended EmptyState API: nextAction accepts string (button) | { kind: "cli", command }
- Updated CommandPalette: real fuzzy search over three commands (Chat, Proposals, Evals)
with ↑/↓/Enter keyboard nav and useInRouterContext degradation for Branch 1 preview
- TanStack Query hooks for all W-026 endpoints; 30s polling on runtime/status
- TypeScript mirror of workbench/schemas.py at src/types/api.ts
- StatusFooter: mutation_mode badge, git_revision (copy on click), checkpoint_revision
with amber warning + ADR-0157/ADR-0158 expansion note
- TopBar: CORE Workbench wordmark, ⌘K palette trigger, connection pill
- ApiErrorBoundary (class component) catches WorkbenchApiError → ErrorState
- scripts/dump-api-schemas.py: AST-based Python dataclass field extractor
- workbench-ui/api-schema-snapshot.json: checked-in drift sentinel
- 51 tests across 10 files (0 failures); enum-coverage 4/4; clean vite build
86 lines
2.3 KiB
JSON
86 lines
2.3 KiB
JSON
{
|
|
"dataclasses": {
|
|
"RuntimeStatus": {
|
|
"fields": {
|
|
"backend": "Literal['numpy', 'mlx', 'rust', 'unknown']",
|
|
"git_revision": "str",
|
|
"engine_state_present": "bool",
|
|
"checkpoint_revision": "str",
|
|
"revision_warning": "bool",
|
|
"active_session_id": "str | None",
|
|
"mutation_mode": "Literal['read_only', 'runtime_turn']"
|
|
}
|
|
},
|
|
"ArtifactRef": {
|
|
"fields": {
|
|
"artifact_id": "str",
|
|
"kind": "Literal['trace', 'eval_result', 'proposal', 'contemplation_report', 'telemetry', 'engine_state_manifest', 'unknown']",
|
|
"path": "str",
|
|
"digest": "str | None",
|
|
"created_at": "str | None"
|
|
}
|
|
},
|
|
"ArtifactDetail": {
|
|
"fields": {
|
|
"content_type": "Literal['json', 'jsonl', 'text', 'unknown']",
|
|
"content": "Any"
|
|
}
|
|
},
|
|
"ProposalSummary": {
|
|
"fields": {
|
|
"proposal_id": "str",
|
|
"state": "Literal['pending', 'accepted', 'rejected', 'withdrawn', 'unknown']",
|
|
"source_kind": "str",
|
|
"replay_equivalent": "bool | None",
|
|
"created_at": "str | None",
|
|
"downstream_effect": "Literal['unknown', 'none', 'observed']"
|
|
}
|
|
},
|
|
"ProposalDetail": {
|
|
"fields": {
|
|
"proposed_chain": "Any",
|
|
"replay_evidence": "Any",
|
|
"source": "Any",
|
|
"evidence": "list[Any]",
|
|
"artifact_refs": "list[ArtifactRef]",
|
|
"suggested_cli": "str | None"
|
|
}
|
|
},
|
|
"EvalLaneSummary": {
|
|
"fields": {
|
|
"lane": "str",
|
|
"versions": "list[str]",
|
|
"read_only": "bool",
|
|
"description": "str | None"
|
|
}
|
|
},
|
|
"EvalRunResult": {
|
|
"fields": {
|
|
"lane": "str",
|
|
"version": "str",
|
|
"split": "str",
|
|
"passed": "bool | None",
|
|
"metrics": "dict[str, Any]",
|
|
"cases": "list[Any]",
|
|
"source_digest": "str | None"
|
|
}
|
|
},
|
|
"ReplayDivergence": {
|
|
"fields": {
|
|
"path": "str",
|
|
"original": "Any",
|
|
"replay": "Any",
|
|
"severity": "Literal['info', 'warning', 'failure']"
|
|
}
|
|
},
|
|
"ReplayComparison": {
|
|
"fields": {
|
|
"artifact_id": "str",
|
|
"original_hash": "str | None",
|
|
"replay_hash": "str | None",
|
|
"equivalent": "bool",
|
|
"divergences": "list[ReplayDivergence]"
|
|
}
|
|
}
|
|
}
|
|
}
|