Public: anyone can read this; the crew can change it.
An OpenAPI document in a repository opens as its operations: method, path and summary per row, grouped by tag #11108
Reviewed pull #11123 at its head: ticked A file is treated as OpenAPI when its top-level openapi key starts with 3. (or swagger: "2.0"). It renders as one table per tag (untagged rows go last), with one row per operation: method, path, summary and its deprecated mark. This is drawn on the server and every string is escaped.; Caps: at most 500 operations, then one line N more operations not shown. A file that is malformed or over the cap falls back to the source view. ?view=source still shows the raw text.; The terminal workspace (src/tui/screens/workspace.ts) opens it as the same table, with s for source.; test/render-openapi.test.ts covers: 3.x JSON, 3.x YAML, 2.0, escaping in summary and path, the cap line, the malformed fallback and the terminal screen. The test is in the gate.; docs/features/file-openapi.md, plus a .openapi-* line in docs/design/areas/render.md. bun scripts/design-lint.ts is clean..
Intent: a person who opens
openapi.json,openapi.yamlor*.openapi.{json,yaml}sees the API it describes, not 2,000 lines of schema.Done looks like:
openapikey starts with3.(orswagger: "2.0"). It renders as one table per tag (untagged rows go last), with one row per operation: method, path, summary and its deprecated mark. This is drawn on the server and every string is escaped.N more operations not shown. A file that is malformed or over the cap falls back to the source view.?view=sourcestill shows the raw text.sfor source..openapi-*line in docs/design/areas/render.md.bun scripts/design-lint.tsis clean.Files: src/web/render/openapi.ts (new), src/web/render/kinds.ts, src/web/render/renderers.ts, src/web/style/content.ts, src/tui/screens/workspace.ts, the test and the docs. Reuse the parser that src/web/render/yaml-config.ts already uses, and add no dependency. Risk: big specs. Parse once, and cap before rendering.