Repository navigation
feat(web): ship updated web-next UI - #15
Merged
Merged
Conversation
…rol, Select, Spinner, Stepper, Tabs, and utility for class name merging - Implemented Progress component for displaying progress bars with customizable properties. - Created Radio and RadioGroup components for managing radio button selections. - Developed SegmentedControl for selecting between multiple options with a visual indicator. - Added Select component for dropdown selections with customizable styles. - Introduced Spinner component for loading indicators. - Built Stepper component for multi-step navigation with clickable steps. - Implemented Tabs component for tabbed navigation with lazy loading and automatic/manual activation options. - Added utility function for merging Tailwind CSS class names with conflict resolution.
The unquoted src/**/*.test.ts glob was expanded by the shell without globstar, so only one directory level matched: apps/api silently skipped 72 tests (plugins, credentials, setup, ...), and worker and database skipped theirs too. Quoting hands the pattern to node --test, which expands it recursively.
…nner src/migrate.ts used to re-execute the whole 1143-line schema blob on every deploy while the split migrations/ files and their runner sat unused. It now only calls runMigrations, so every compose file keeps its command: a blob-built database is classified as legacy and replayed once (all statements are idempotent), after which only new files run, each in its own transaction and recorded in schema_migrations. Supports --dry-run. Tests that grepped the old blob now read the migration files.
- manifest.credential (providerId, schemaId, secret format, base URL policy fixed/allowlisted/any-https) states what credential a plugin consumes; the four built-ins declare it, manifests without it get a conservative derived one, and the upload validator accepts it (never any-https for uploads). - One host allowlist grammar (hostMatchesAllowlist) shared by SafeHttpClient, Seedance and every save-time check, so nothing is accepted on save that the runtime refuses. - openai-language@1.0.0 and anthropic-language@1.0.0 register the native protocols under the ids migration 0012 backfilled onto language rows; dispatch keeps the native path, so request bytes are unchanged. The worker's availability gate treats both kinds of built-in keys alike. - stored-credential helpers are the single place a provider_credentials row becomes a secret (payload first, legacy column fallback, key id). - Veo requires both client_email and private_key in validateConfig.
Migration 0027 copies any secret still held only in api_key_encrypted into payload_encrypted, fills provider_id (Seedream's Ark account under 'volcengine') and schema_id and makes both NOT NULL, and leaves configured_fields with display metadata only. Nothing is dropped; the legacy columns retire once no deployed code reads them. scripts/reencrypt-provider-credentials.ts re-seals rows still under the pre-rollout PROVIDER_CREDENTIALS_ENCRYPTION_KEY with the current derived key: per-row transaction with compare-and-set, idempotent, --dry-run, audited, logs ids and stable codes only. Migration tests no longer assume the baseline is the last file, and the fake client only fails on the fixture's own injected RAISE.
…in the worker
A credential is now a provider account (provider_id + schema + payload),
validated against plugins' declared contracts and never bound to a plugin
version: one Ark key serves Seedream and Seedance, and upgrading a plugin
no longer strands its credentials.
API
- The 760-line provider-credentials.ts becomes credentials/{input,
validate,service,connectivity,reads}. Legacy request spellings (adapter,
apiKey, credential) still parse; writes go to payload_encrypted only.
- Model binding uses one rule for the plugin and preset save paths:
same provider account, decodable schema, endpoint inside the plugin's
policy (the preset path previously skipped the credential host check).
- Clearing a credential's base URL works; decrypt failures report
INVALID_CREDENTIAL instead of NO_API_KEY.
- Provider templates are generated from manifests for built-in and
uploaded plugins alike; uploads may not claim a built-in provider id.
- Every secret read (create-job, worker jobs and preprocessing, DTOs)
goes through the stored-credential helpers.
Connectivity tests
- Migration 0028 adds a test request on the credential row. The API opens
it and waits up to ~20s; apps/worker claims open requests every 2s with
FOR UPDATE SKIP LOCKED, probes through the availability gate and
settles exactly the request it claimed, auditing the requester. Slow
probes answer 202 pending and the row turns final on its own.
- Uploaded plugins can now be tested, credentials created without a
template are probed by any plugin of their account, and language model
tests record their outcome on the row.
Web
- The credential dialog renders from the template's secret format and
sends providerId + secret; pickers match by provider account and the
template's endpoint policy; a pending status polls until settled.
…-accounts refactor: provider-account credentials, plugin-declared credential contracts, worker-side probes
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.
Summary
Validation
Deployment plan