Conversation
get_available_models node budget 16384 -> 65536: a standard OMP 18.6 registry (962 models) serializes to 16385 nodes and failed discovery with rpc-response-limit, leaving the provider in error. OMP_MAX_CATALOG_MODELS 256 -> 4096: selection kept the head of OMP order and silently dropped providers past zai (muse-sub, devin, opencode-go, qodeer, z0ne, crof, cline-pass). Boundary tests scaled 257 -> 4097 to preserve intent.
…l, tool boundary explainer
|
Closing: this stack should live on my fork only, not as an upstream PR. The branch remains at masrurimz/paseo-plugins feat/paseo-omp-dx-quick-wins. |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
selectPerProfileAvailability uses require() in an ESM module with an always-true guard, and SUPPORT.md documents a "Copy bundle" UI action that is never wired into the client.
Review effort: Balanced
Findings: 1
Open (2)
What changed in this PR
This PR implements four no-protocol-change DX "quick wins" for the paseo-omp plugin plus release-process ratchets, sourced from the OMP↔Paseo DX integration research. It touches the config surface (restart-required badges, historical-quota labeling, a tool-boundary explainer card), composer pills/diagnostics (a freshness state machine with stale/error banners and a pre-launch availability display), and support/process tooling (a one-click report+transcript bundle RPC, an "instead-hint" side channel on six reject sites, and an offline wire-diff lever with doc updates).
Changes:
- Config surface: per-setting restart/new-session badges,
(historical)quota labels, and a canonical tool-policy boundary card cross-linked toconfiguration.md. - Pills & diagnostics: pure
pill-freshnessmachine driving stale/error annotations and popover banners, plus a pre-launch availability display reusing the existing provider-health query. - Support & process:
get-support-bundleRPC + shared assembler with a 32 KiB transcript cap, non-enumerable "instead" hints on reject paths (messages preserved), andscripts/omp-wire-diff.mjswith README/SUPPORT/TESTING notes; catalog cap raised 256→4096.
| File | Description |
|---|---|
| shared/restart-required.ts | Classifies setting impact (live/new-sessions/restart) and derives restart requirement. |
| shared/availability-display.ts | Maps existing health contract to a four-state availability union + fixed copy. |
| shared/support-bundle.ts | UTF-8-safe transcript truncation, bundle assembler, and get-support-bundle RPC schema. |
| server/support-bundle.ts | Journal-only transcript retrieval and bundle resolver. |
| server/provider/instead-hints.ts | Reject-code hint registry carried as a non-enumerable diagnostic field. |
| server/provider/{session,connection,host-tools,prompt-payload}.ts | Routes six reject sites through hint-carrying helpers (messages unchanged). |
| server/provider/catalog.ts, omp-rpc-transport.ts | Catalog cap 256→4096 and matching response node bound bump. |
| client/pill-freshness.ts | Freshness transitions, label/notice derivation, subscription store. |
| index.client.tsx | Wires freshness store, poll intervals, historical quota label, and pill popover banners. |
| client/provider-diagnostics-state.ts | Availability re-exports, shared health query key, and per-profile availability (has a bug). |
| client/hub-sidebar.tsx, hub-status.ts | Availability banner/trailing badge in the Hub sidebar. |
| client/omp-config-surface.tsx, policy-explainer.ts | Restart badges, restart summary, and tool-boundary explainer card. |
| client/quota-state.ts, quota-popover.tsx | Historical quota suffix/title and popover note. |
| client/support-diagnostics-state.ts | Bundle view-model helper (not yet consumed by any UI). |
| scripts/omp-wire-diff.mjs | Offline wire/SDK drift classifier with self-check. |
| docs/README/SUPPORT/TESTING | Documentation for badges, bundle flow, and the wire-diff lever. |
| tests/* | New/updated unit coverage for the above modules and catalog cap. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| if (failed && (input.errors[provider.id] ?? provider.id.length > 0)) { | ||
| const { displayForStatus } = require("../shared/availability-display") as typeof import( | ||
| "../shared/availability-display" | ||
| ); | ||
| result.set(provider.id, displayForStatus("unrunnable")); |
| - keep adaptation, packaging, and cross-project compatibility work in this repository. | ||
|
|
||
| Do not put credentials, private repository paths, session transcripts, or unredacted RPC payloads in an issue. Report vulnerabilities through the [private GitHub Security Advisory form](https://github.com/omercnet/paseo-plugins/security/advisories/new), not a public issue. | ||
| Do not put credentials, private repository paths, session transcripts, or unredacted RPC payloads in an issue. If a maintainer asks for a transcript excerpt, use **Copy bundle** in **OMP → Help**. It appends an opt-in 32 KiB journal excerpt to the same report, and you must review and redact that excerpt before pasting it. Report vulnerabilities through the [private GitHub Security Advisory form](https://github.com/omercnet/paseo-plugins/security/advisories/new), not a public issue. |


Why
The DX integration research in
paseo-omp/docs/omp-paseo-dx-integration-research.mdnamed four quick wins that need no protocol change, plus release process ratchets. Users hit silent pills, unexplained rejects, and a support flow split across two copy actions. This stack implements all four wins and the ratchets without changing protocol behavior.Scope
shared/restart-required.ts,omp-config-surface.tsx), historical quota label (quota-state.ts,quota-popover.tsx, wired inindex.client.tsx), tool boundary explainer card (policy-explainer.ts) withconfiguration.mdcross-links.client/pill-freshness.ts) with stale and error banners plus retry, pre-launch availability display (shared/availability-display.ts) reusing the existing provider-health query. No new timers, no new RPCs.shared/support-bundle.ts,server/support-bundle.ts, 32 KiB journal excerpt), instead-hint side channel on six reject sites (server/provider/instead-hints.ts, messages byte-identical), offline wire and SDK diff lever (scripts/omp-wire-diff.mjs) with README, SUPPORT, and TESTING notes.server/usage-source.tsin the worktree belongs to another effort and stays out.Tradeoffs
{message}shape, which tests pin, and strict host schemas never see a new key. A future mapper that copies errors withoutrejectDetailsdrops hints silently.Blast Radius
Client pills, config surface, diagnostics views, six server reject sites with messages preserved, one additive RPC. Full suite reads 894 passed with 1 pre-existing failure (
omp-rpc-protocolmulti-provider catalog, red at base0155e0abefore this work).Verification
npm run typecheckclean across client, server, and tests.bun x vitest rungives 894 passed, 7 skipped, 1 failed pre-existing and unrelated.node scripts/omp-wire-diff.mjs --self-checkholds the exit-code contract.bun x biome checkclean on all touched paths.