OxygenHub 0.9.17: the TypeScript types gain the dashboard's proposals, the starter and test reports (refs #349) 041a945f55f8
- Author
- Andy McCall @andymccall <[email protected]>
- via
- agent
agent:claude@andymccall <[email protected]> · keyless, under your grant for changes,refs,seal · key eced9704a8d6
- When
- · 2026-10-29 18:37 UTC
- Signature
- ◈ sealed by agent:claude@andymccall
- Hash
041a945f55f82634df6a9c5f2c75e604185da16f01eb5369b4a2b25b047b8956- Depends on
- 04f9c984439e 166f6e9bf4f1 27322cd2755a 3f4b0ea6eabf 42a0ba4bac4e 4d2e44d79b03 5c6e92fd8d71 71e65fcf95ab b5668108487f b64e2537d702 bf1ab3458db1 d23464c0ac60 ef20fdc14e8b
- Depended on by
- a22e4aec2e28 8f1d76f4169a 75491d35c258 ac689cd21adf
- In bookmarks
- main
- In tags
- v0.9.19 v0.9.20 v0.9.21 v0.9.22 v0.9.23 v0.9.24
- Edits
- 29 atoms, 0 tree operations, 5 files
Browse the tree at this change
modified CHANGELOG.md +2 −2
| … | 1 unchanged lines |
||
| 2 | 2 | ||
| 3 | 3 | OxygenHub runs at https://oxygenhub.io; each deploy's build is on the About page and at `/api/v1/version`. |
|
| 4 | 4 | ||
| 5 | - | ## Unreleased |
|
| 5 | + | ## 0.9.17 (2026-10-29) |
|
| 6 | 6 | ||
| 7 | - | - **Drops over the API: fork, star and comment (#349).** What a drop's page does, for the VS Code extension and other clients: `POST /api/v1/drops/{id}/fork`, `PUT`/`DELETE /api/v1/drops/{id}/star`, `GET`/`POST /api/v1/drops/{id}/comments` and `DELETE /api/v1/drops/{id}/comments/{n}`, by the web's rules (the owner told of a comment; its author, the owner or an administrator deletes it). A drop over the API now says its stars, whether you starred it, what it was forked from and its embed address. `oh drop fork|star|unstar|comments|comment`. |
|
| 7 | + | - **Drops over the API: fork, star and comment (#349).** What a drop's page does, for the VS Code extension and other clients: `POST /api/v1/drops/{id}/fork`, `PUT`/`DELETE /api/v1/drops/{id}/star`, `GET`/`POST /api/v1/drops/{id}/comments` and `DELETE /api/v1/drops/{id}/comments/{n}`, by the web's rules (the owner told of a comment; its author, the owner or an administrator deletes it). A drop over the API now says its stars, whether you starred it, what it was forked from and its embed address. `oh drop fork|star|unstar|comments|comment`. The API's TypeScript types now include the dashboard's proposals, the starter and test reports. |
|
| 8 | 8 | ||
| 9 | 9 | ## 0.9.16 (2026-10-29) |
|
| 10 | 10 | ||
| … | 421 unchanged lines |
modified Cargo.lock +3 −3
| … | 1459 unchanged lines |
||
| 1460 | 1460 | ||
| 1461 | 1461 | [[package]] |
|
| 1462 | 1462 | name = "hub-api" |
|
| 1463 | - | version = "0.9.16" |
|
| 1463 | + | version = "0.9.17" |
|
| 1464 | 1464 | dependencies = [ |
|
| 1465 | 1465 | "schemars", |
|
| 1466 | 1466 | "serde", |
|
| … | 797 unchanged lines |
||
| 2264 | 2264 | ||
| 2265 | 2265 | [[package]] |
|
| 2266 | 2266 | name = "oh" |
|
| 2267 | - | version = "0.9.16" |
|
| 2267 | + | version = "0.9.17" |
|
| 2268 | 2268 | dependencies = [ |
|
| 2269 | 2269 | "anyhow", |
|
| 2270 | 2270 | "axum", |
|
| … | 86 unchanged lines |
||
| 2357 | 2357 | ||
| 2358 | 2358 | [[package]] |
|
| 2359 | 2359 | name = "oxygenhub" |
|
| 2360 | - | version = "0.9.16" |
|
| 2360 | + | version = "0.9.17" |
|
| 2361 | 2361 | dependencies = [ |
|
| 2362 | 2362 | "ammonia", |
|
| 2363 | 2363 | "anyhow", |
|
| … | 2513 unchanged lines |
modified Cargo.toml +1 −1
| … | 6 unchanged lines |
||
| 7 | 7 | resolver = "2" |
|
| 8 | 8 | ||
| 9 | 9 | [workspace.package] |
|
| 10 | - | version = "0.9.16" |
|
| 10 | + | version = "0.9.17" |
|
| 11 | 11 | edition = "2021" |
|
| 12 | 12 | license = "MIT OR Apache-2.0" |
|
| 13 | 13 | authors = ["Andy McCall <[email protected]>"] |
|
| … | 60 unchanged lines |
modified crates/hub-api/src/lib.rs +7 −0
| … | 1553 unchanged lines |
||
| 1554 | 1554 | ("DropStars", schemars::schema_for!(DropStars)), |
|
| 1555 | 1555 | ("NewDrop", schemars::schema_for!(NewDrop)), |
|
| 1556 | 1556 | ("DropEdit", schemars::schema_for!(DropEdit)), |
|
| 1557 | + | ("UserProposals", schemars::schema_for!(UserProposals)), |
|
| 1558 | + | ("ProposalBrief", schemars::schema_for!(ProposalBrief)), |
|
| 1559 | + | ("StarterAssistants", schemars::schema_for!(StarterAssistants)), |
|
| 1560 | + | ("StarterStatus", schemars::schema_for!(StarterStatus)), |
|
| 1561 | + | ("StarterRequest", schemars::schema_for!(StarterRequest)), |
|
| 1562 | + | ("TestReport", schemars::schema_for!(TestReport)), |
|
| 1563 | + | ("TestReportDetail", schemars::schema_for!(TestReportDetail)), |
|
| 1557 | 1564 | ] |
|
| 1558 | 1565 | } |
|
| 1559 | 1566 | ||
| … | 295 unchanged lines |
modified crates/hub-api/ts/index.d.ts +153 −0
| … | 226 unchanged lines |
||
| 227 | 227 | at_ms: number; |
|
| 228 | 228 | id: number; |
|
| 229 | 229 | kind: string; |
|
| 230 | + | label?: string | null; |
|
| 230 | 231 | read: boolean; |
|
| 232 | + | reason?: string; |
|
| 233 | + | repository?: string | null; |
|
| 234 | + | thread?: string; |
|
| 231 | 235 | title: string; |
|
| 232 | 236 | url: string; |
|
| 233 | 237 | }; |
|
| … | 31 unchanged lines |
||
| 265 | 269 | when_ms: number; |
|
| 266 | 270 | }; |
|
| 267 | 271 | ||
| 272 | + | export type DiffLine = { |
|
| 273 | + | kind: string; |
|
| 274 | + | new?: number | null; |
|
| 275 | + | old?: number | null; |
|
| 276 | + | text?: string; |
|
| 277 | + | }; |
|
| 278 | + | ||
| 268 | 279 | export type FileChange = { |
|
| 269 | 280 | added: number; |
|
| 270 | 281 | from?: string | null; |
|
| 271 | 282 | kind: string; |
|
| 283 | + | lines?: DiffLine[]; |
|
| 272 | 284 | path: string; |
|
| 273 | 285 | removed: number; |
|
| 286 | + | truncated?: boolean; |
|
| 274 | 287 | }; |
|
| 275 | 288 | ||
| 276 | 289 | export type ChangeDetail = { |
|
| … | 140 unchanged lines |
||
| 417 | 430 | ||
| 418 | 431 | export type ProposalEdit = { |
|
| 419 | 432 | body?: string | null; |
|
| 433 | + | draft?: boolean | null; |
|
| 420 | 434 | labels?: string[] | null; |
|
| 421 | 435 | state?: string | null; |
|
| 422 | 436 | title?: string | null; |
|
| … | 21 unchanged lines |
||
| 444 | 458 | }; |
|
| 445 | 459 | ||
| 446 | 460 | export type ProjectCard = { |
|
| 461 | + | archived_ms?: number | null; |
|
| 462 | + | assignees?: string[]; |
|
| 447 | 463 | id: number; |
|
| 448 | 464 | kind: string; |
|
| 465 | + | labels?: string[]; |
|
| 449 | 466 | reference: string; |
|
| 450 | 467 | state: string; |
|
| 451 | 468 | title: string; |
|
| … | 110 unchanged lines |
||
| 562 | 579 | }; |
|
| 563 | 580 | ||
| 564 | 581 | export type FlowJob = { |
|
| 582 | + | approval?: string; |
|
| 565 | 583 | depends_on: string[]; |
|
| 566 | 584 | error: string; |
|
| 567 | 585 | exit_code?: number | null; |
|
| 568 | 586 | finished_ms?: number | null; |
|
| 569 | 587 | log_lines: number; |
|
| 570 | 588 | name: string; |
|
| 589 | + | peak_disk_mib?: number | null; |
|
| 590 | + | peak_memory_mib?: number | null; |
|
| 591 | + | phases?: FlowPhase[]; |
|
| 571 | 592 | placed?: string; |
|
| 593 | + | queued_ms?: number | null; |
|
| 594 | + | ready_ms?: number | null; |
|
| 572 | 595 | runner: string; |
|
| 573 | 596 | started_ms?: number | null; |
|
| 574 | 597 | status: string; |
|
| 575 | 598 | waiting?: string; |
|
| 576 | 599 | }; |
|
| 577 | 600 | ||
| 601 | + | export type FlowPhase = { |
|
| 602 | + | ms: number; |
|
| 603 | + | name: string; |
|
| 604 | + | }; |
|
| 605 | + | ||
| 578 | 606 | export type FlowRun = { |
|
| 579 | 607 | actor: string; |
|
| 580 | 608 | bookmark: string; |
|
| … | 16 unchanged lines |
||
| 597 | 625 | stream: string; |
|
| 598 | 626 | t: number; |
|
| 599 | 627 | text: string; |
|
| 628 | + | }; |
|
| 629 | + | ||
| 630 | + | export type ReportFile = { |
|
| 631 | + | path: string; |
|
| 632 | + | size: number; |
|
| 633 | + | }; |
|
| 634 | + | ||
| 635 | + | export type ReportMetric = { |
|
| 636 | + | better: string; |
|
| 637 | + | fail_above?: number | null; |
|
| 638 | + | fail_below?: number | null; |
|
| 639 | + | key: string; |
|
| 640 | + | unit: string; |
|
| 641 | + | value: number; |
|
| 600 | 642 | }; |
|
| 601 | 643 | ||
| 644 | + | export type Report = { |
|
| 645 | + | bookmark: string; |
|
| 646 | + | bytes: number; |
|
| 647 | + | context: unknown; |
|
| 648 | + | created_ms: number; |
|
| 649 | + | files: number; |
|
| 650 | + | files_expired_ms?: number | null; |
|
| 651 | + | id: number; |
|
| 652 | + | job: string; |
|
| 653 | + | kind: string; |
|
| 654 | + | manifest?: ReportFile[]; |
|
| 655 | + | metrics: ReportMetric[]; |
|
| 656 | + | name: string; |
|
| 657 | + | run?: number | null; |
|
| 658 | + | state: string; |
|
| 659 | + | summary: string; |
|
| 660 | + | title: string; |
|
| 661 | + | url: string; |
|
| 662 | + | }; |
|
| 663 | + | ||
| 602 | 664 | export type NewRelease = { |
|
| 603 | 665 | notes?: string | null; |
|
| 604 | 666 | prerelease?: boolean; |
|
| … | 12 unchanged lines |
||
| 617 | 679 | clone_url: string; |
|
| 618 | 680 | created_ms: number; |
|
| 619 | 681 | description: string; |
|
| 682 | + | embed_url?: string; |
|
| 620 | 683 | files: DropFile[]; |
|
| 684 | + | forked_from?: string | null; |
|
| 621 | 685 | id: string; |
|
| 622 | 686 | owner: string; |
|
| 687 | + | starred?: boolean; |
|
| 688 | + | stars?: number; |
|
| 623 | 689 | title: string; |
|
| 624 | 690 | updated_ms: number; |
|
| 625 | 691 | url: string; |
|
| 626 | 692 | visibility: string; |
|
| 693 | + | }; |
|
| 694 | + | ||
| 695 | + | export type DropComment = { |
|
| 696 | + | author: string; |
|
| 697 | + | body: string; |
|
| 698 | + | created_ms: number; |
|
| 699 | + | id: number; |
|
| 700 | + | }; |
|
| 701 | + | ||
| 702 | + | export type NewDropComment = { |
|
| 703 | + | body: string; |
|
| 704 | + | }; |
|
| 705 | + | ||
| 706 | + | export type DropStars = { |
|
| 707 | + | starred: boolean; |
|
| 708 | + | stars: number; |
|
| 627 | 709 | }; |
|
| 628 | 710 | ||
| 629 | 711 | export type NewDropFile = { |
|
| … | 19 unchanged lines |
||
| 649 | 731 | message?: string | null; |
|
| 650 | 732 | secret?: boolean | null; |
|
| 651 | 733 | title?: string | null; |
|
| 734 | + | }; |
|
| 735 | + | ||
| 736 | + | export type ProposalBrief = { |
|
| 737 | + | author: string; |
|
| 738 | + | conflicted: boolean; |
|
| 739 | + | number: number; |
|
| 740 | + | repository: string; |
|
| 741 | + | state: ProposalState; |
|
| 742 | + | title: string; |
|
| 743 | + | updated_ms: number; |
|
| 744 | + | url: string; |
|
| 745 | + | }; |
|
| 746 | + | ||
| 747 | + | export type UserProposals = { |
|
| 748 | + | authored: ProposalBrief[]; |
|
| 749 | + | landable?: ProposalBrief[]; |
|
| 750 | + | review: ProposalBrief[]; |
|
| 751 | + | }; |
|
| 752 | + | ||
| 753 | + | export type StarterAssistant = { |
|
| 754 | + | from: string; |
|
| 755 | + | model: string; |
|
| 756 | + | name: string; |
|
| 757 | + | }; |
|
| 758 | + | ||
| 759 | + | export type StarterAssistants = { |
|
| 760 | + | assistants: StarterAssistant[]; |
|
| 761 | + | }; |
|
| 762 | + | ||
| 763 | + | export type StarterStatus = { |
|
| 764 | + | assistant?: string; |
|
| 765 | + | change?: string; |
|
| 766 | + | error?: string; |
|
| 767 | + | files?: string[]; |
|
| 768 | + | status: string; |
|
| 769 | + | }; |
|
| 770 | + | ||
| 771 | + | export type StarterRequest = { |
|
| 772 | + | assistant?: string | null; |
|
| 773 | + | description: string; |
|
| 774 | + | }; |
|
| 775 | + | ||
| 776 | + | export type TestReport = { |
|
| 777 | + | bookmark: string; |
|
| 778 | + | created_ms: number; |
|
| 779 | + | errors: number; |
|
| 780 | + | failed: number; |
|
| 781 | + | id: number; |
|
| 782 | + | job: string; |
|
| 783 | + | passed: number; |
|
| 784 | + | run: number; |
|
| 785 | + | skipped: number; |
|
| 786 | + | state: string; |
|
| 787 | + | tests: number; |
|
| 788 | + | time_ms: number; |
|
| 789 | + | url: string; |
|
| 790 | + | }; |
|
| 791 | + | ||
| 792 | + | export type TestCase = { |
|
| 793 | + | classname: string; |
|
| 794 | + | message: string; |
|
| 795 | + | name: string; |
|
| 796 | + | output: string; |
|
| 797 | + | status: string; |
|
| 798 | + | suite: string; |
|
| 799 | + | time_ms: number; |
|
| 800 | + | }; |
|
| 801 | + | ||
| 802 | + | export type TestReportDetail = { |
|
| 803 | + | cases: TestCase[]; |
|
| 804 | + | report: TestReport; |
|
| 652 | 805 | }; |
|
| 653 | 806 |