Repository navigation
feat(protocol): introduce manifest v1 for package icons - #4
Merged
Merged
Conversation
This was referenced Oct 22, 2026
Merged
Lucas1479
marked this pull request as ready for review
October 22, 2026 16:02
Lucas1479
added a commit
to Code-Amadeus/Amadeus
that referenced
this pull request
Oct 22, 2026
…nt (#255) The desktop console now uses consistent controls and clearer navigation across Chat, Settings and Plugins. Chat gains a quieter composer and a compact history/artifact edge; plugin cards put identity, current state and common actions first, while retaining diagnostics in expandable details. Linked design issue: [Amadeus-Extensions #3](Code-Amadeus/Amadeus-Extensions#3). Companion protocol PR: [Amadeus-Extensions #4](Code-Amadeus/Amadeus-Extensions#4). ## User-visible changes - Fix inline chat rename in Electron, Markdown list markers and block spacing, character-initial avatar fallback, and remaining English labels in the Chinese console. - Share console type, weight, radius and icon scales; reuse Switch, icon/text buttons and status chips. Keep Work and wallpaper surfaces on their existing visual styles. - Simplify sidebar navigation, move backend information to Settings > Diagnostics, pin pending approvals above the composer, and show only configured model profiles plus the current selection. - Restore the scene-capability legend and item markers to their original distinct green (ready), orange (needs attention), gray (off) and purple (unverified) palette, with subtle outlines. - Keep Settings sections responsive to the available settings width, remember the selected section, and show restart notes only for pending changes. - Remove the extra background rectangle inside the chat composer while retaining its outer focus indication and text caret. - Collapse the history/artifact rail to an 8 px edge with a subtle handle. Hover or keyboard focus opens the existing overlay; coarse pointers retain a wider target. - Reorganize Plugins using the shared Settings groups and card controls: - installation action beside the group title and expandable installation guidance; - icon, name, author/version, one current-state indicator and enable switch; - concise contribution summaries and common configuration/settings actions; - package ID, saved/loaded revisions, permissions, runtime diagnostics and removal inside Plugin details. - Keep restart-pending state, compatibility warnings and package/contribution failures visible without expanding details. Preserve draft configuration, selected-voice disable/removal confirmation and existing save behavior. ## Versioned plugin icons The Host accepts `amadeus.extension/v0` and `amadeus.extension/v1`. The frozen v0 format has no icon field; existing v0 packages need no migration. Authors opting into icons select v1 and may declare a package-relative `icon`. The Host accepts local PNG/JPEG files up to 1 MiB and 1024 x 1024 pixels, resolves them only through the installed-package registry, and returns them through read-only trusted-renderer IPC. The renderer uses the first name grapheme, uppercased where applicable, when no usable icon exists. Image checks are shared with the theme-image owner; the theme limits remain unchanged. **Protocol dependency:** [Amadeus-Extensions #4](Code-Amadeus/Amadeus-Extensions#4), pinned to `b444dd8b452a914f68cdba439cc3e79a9a1e53cf`. Both versioned schemas and the validator match the canonical source. Review and merge that PR first; after merge, verify the pin is an ancestor of canonical `origin/main` and rerun the source comparison. Update the pin if the accepted commit changes. Offline hash agreement alone does not establish merge ancestry. A v0-only Host rejects v1, even without an icon. Existing Hosts check schema before `engines` and may report `invalid manifest`; raising the Host API requirement cannot change that older behavior. Authors must identify a v1-capable minimum app version in distribution notes. Runtime contracts and the SDK/Host API version remain unchanged. Catalog admission remains separate: its checker is still pinned at `1840c8e`; v1/icon packages must not enter the catalog until that checker is requalified. ## Scope and compatibility This PR includes renderer presentation changes and the bounded plugin-icon protocol/main/preload support above; it is no longer presentation-only. No new dependency or public setting key is introduced. A remembered Settings > Extensions section opens General, and the former `?page=backend` route opens Chat. Narrow Settings tabs wrap to keep every section reachable. The empty chat keeps the character greeting without a second hint line. ## Validation Current host head: `530e77ec07ead97830916611e8289fbe64380df2`. The capability-color update passed 17 existing style/scene tests and `npm run build`; independent rendering checks confirmed all four original colors and 25 matching scene markers in both light and dark themes. Windows validation for the versioned manifest update at `a3b05dfb`: - `python -m pytest tests/test_extension_icons.py tests/test_extensions.py tests/test_extension_resources.py tests/test_catalog_packaging.py tests/test_extension_protocol_provenance.py -q`: 69 passed, 2 skipped. Two runner stderr-thread cleanup warnings occurred; no test failed. Runtime runner code was not changed. - `node --experimental-strip-types --test tests/extensionIcons.test.mjs tests/extensionTheme.test.mjs tests/extensions.test.mjs tests/extensionSettings.test.mjs`: 94 passed. - `npm run build`: passed, including config/SDK/Pi checks and TypeScript. - Independent `extensionSettings.smoke.mjs` and `extensionThemeNative.smoke.mjs`: passed. UI fixtures combine a v1 custom icon with legacy v0 fallback packages. Tests use separate profiles and random ports; the running user instance was not closed or restarted. - Canonical protocol `python -m pytest -q`: 126 passed, 2 skipped; Ruff passed. - `python tools/check_extension_protocol.py --source <canonical-checkout>`: passed at the new pin. Both schema files also load from a built application wheel. Earlier verification: all 15 real model-less smoke checks passed at `0e761b9d` after correcting the install-button locator and removing the obsolete translation. That full application smoke was not rerun for the versioned-schema update while the user instance remains active. The earlier Electron run had 555/559 passes with a preview-port collision; all 16 development-server tests subsequently passed after the port was released. Original UI checks through `c637293d` included 287 Python tests and the broader UI/model-less smoke coverage. Fresh full Python and cross-platform results remain for CI. ## Screenshots All screenshots use synthetic example packages. The before image is a cropped view of the previous cards; the after images show the full page at different widths. | Before | After — light, English | | --- | --- | |  |  | <details> <summary>After — dark theme, Chinese, narrow window</summary>  </details> ## Remaining before merge - Review the linked design issue and companion protocol PR, merge the protocol first, and verify the final canonical pin is reachable from canonical main. - Run full Python and cross-platform CI; those were not rerun locally for these additions.
Lucas1479
added a commit
to Code-Amadeus/Amadeus
that referenced
this pull request
Oct 22, 2026
## Behavior and ownership Adds a functional plugin-store prototype to the existing installer: official catalog browsing/details, progress/cancellation, manual updates, HTTPS mirror downloads, withdrawal, durable blocking/unblocking and damage recovery. The empty catalog remains visible as a preview. Authors use a minimal hashed static-check environment and one submission PR; maintainers use the official reproducible generation/review/publication tools in the companion repository. Electron main owns source resolution, artifact hashes, install transactions and durable security facts. Renderer requests package ID/version only. No new runtime capabilities, automatic updates or rollback guarantee. Admission restrictions remain separate from the runtime contract. Display-cache damage cannot erase known bans; ambiguous settings/backup damage fails closed. Mirrors never replace the official index. ## Integrated review fixes - Merged the already-landed UI/icon and bundled-dictionary mainline while preserving both store and installed-package journeys. Four status colors remain unchanged by user decision; dictionary stays rc2. - Package all `server/extensions/*.schema.json`. Test the actual packaged helper with real v0 and v1 wheel contents, including a negative missing-schema check in isolated staging. - Adapt lifecycle probes to package-scoped card switches, details/removal and sidebar navigation. Keep enable intent separate from configuration drafts. Retain focus using the existing artifact drawer keyboard contract. - Use `catalog/v1/index.json`, locked wallpaper restore and streamed downloads with backpressure/stall timeout. Keep source identity checks strict. - Protocol [Amadeus-Extensions PR #4](Code-Amadeus/Amadeus-Extensions#4) and [PR #5](Code-Amadeus/Amadeus-Extensions#5) are merged. Trusted catalog admission is a separate isolated workflow and now a strict required check on protocol main. A negative then positive real PR qualification was run and closed without merge. Checker SHA `1840c8e4` is retained by `extension-catalog-checker-d1`. - Upgrade only transitive `opentelemetry-api` from 1.44.0 to 1.45.1 after fresh CI audit reported CVE-2026-114603; no new audit ignore. ## Validation Local integration evidence: 603 Electron tests; 158 plugin Python tests (7 existing conditional skips); 31 author/icon/package tests (1 existing conditional skip); 42 packaging/release/dictionary tests (2 existing conditional skips); actual code-only Windows build; actual bundled v0/v1 validation; 27 store UI checks and 12 installed-settings UI checks. Dependency audit and environment consistency pass after the narrow lock update. Complete local source qualification passed 15 desktop + 14 plugin + 18 fault/recovery checks; actual packaged qualification passed 15 + 15 + 18. The official-tool packaged Git/HTTPS roundtrip passed 15 desktop + 27 lifecycle checks across six publications, four app restarts and five installed Notes MCP contract runs. Final merge remains gated on new-head CI. The construction record distinguishes the source run's pre-commit dirty identity from clean cd3f36f packaged/publication starts. Windows CI now executes the complete official-tool local Git/HTTPS publication flow against the packaged desktop, including updates, withdrawal, bans, unblock, restart and NUL damage recovery. Reports distinguish simulated damage from physical power loss and native MCP/TTS contracts from model turns. [Integration record](docs/verification/extensions/community-preview-batch12-2026-10-23.md) · [Repeatable demo](docs/extension_store_demo.md) · [Companion Extensions #5](Code-Amadeus/Amadeus-Extensions#5) No plugin packages or Releases are published by this PR. The fixed historical catalog checker continues to exclude v1 icon packages until a separate mainline checker/manifest-version compatibility qualification. The public runtime itself supports v0 and v1. Historical dated plans and Pi qualification changes are retained as reviewed development evidence.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Plugins need package-owned visual identity without changing the accepted fields of existing v0 manifests. This introduces
amadeus.extension/v1for optional local icons and keepsamadeus.extension/v0unchanged.Closes #3. Host implementation: Amadeus #255.
Contract and compatibility
icon.iconreuses the package-relative path contract. Icons are bundled PNG/JPEG files with matching signatures, at most 1 MiB. The Host additionally enforces native decoding and a 1024 x 1024 maximum, and provides the name-initial fallback.A v0-only Host rejects a v1 manifest, even without an icon. Existing Hosts validate schema before
enginesand can reportinvalid manifest; increasing a Host API requirement cannot retroactively turn that intoincompatible. Authors must state a v1-capable minimum application version in distribution notes.Coordination
Amadeus #255 pins
b444dd8b452a914f68cdba439cc3e79a9a1e53cf. Both PRs remain Draft; this update does not merge or release either one.Review/merge the protocol first. After merge, verify
git merge-base --is-ancestor <host-pinned-commit> origin/main, then run the Host source comparison. If the accepted commit changes, update the Host pin and hashes. Offline hash agreement alone does not establish that the source has reached canonical main.The catalog checker remains independently pinned at
1840c8e. No v1/icon package enters the catalog until that checker is separately requalified. This PR does not modify the store/catalog PRs.Validation
On Windows with CPython 3.12.10:
python -m pytest -q: 126 passed, 2 skipped. Covers both schema versions, all existing contribution examples, v0 icon rejection, unknown versions/fields, file/signature/size boundaries and package-check ownership.python -m ruff check .: passed.b30df73: no difference.python tools/check_extension_protocol.py --source <canonical-checkout>: passed for both schemas and the reference validator at the new pin.The SDK build passed earlier in this PR; SDK sources remain unchanged. Cross-platform CI and contract review remain required.