feat(action-collection): action collection store MVP#1690
Conversation
- Featured store picks row on custom-actions page (VS Code marketplace card style) - Publish-to-store dialog (slug removed, description textarea) - id-based detail/install across content script → background → options deep link - decouple orpc hooks; localize-error via ts-pattern; detail dialog tri-state via ts-pattern Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…n-mvp # Conflicts: # src/locales/zh-TW.yml # src/utils/message.ts # src/utils/navigation.ts
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Contributor trust score73/100 — Trusted This score estimates contributor familiarity with Outcome
Score breakdown
Signals used
Policy
Updated automatically when the PR changes or when a maintainer reruns the workflow. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 54813fd07f
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| const config = await getLocalConfig() ?? DEFAULT_CONFIG | ||
| const result = upsertInstalledActionCollection(config, payload) | ||
| await setLocalConfig(result.nextConfig) |
There was a problem hiding this comment.
Use queued config writes when installing collections
In the options page, normal config edits go through writeConfigAtom, which queues storage writes and keeps the optimistic atom state current. This helper reads and writes local storage directly, so if a user installs a collection while an auto-save/provider edit is still queued, it can build nextConfig from stale storage and then replace configAtom with that stale object, dropping the recent edit or having the install overwritten by the queued write. Route this update through the same queued config writer or derive it from the current atom state.
Useful? React with 👍 / 👎.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ed card - import action-collection bridge constants from @read-frog/definitions, drop local bridge.ts - featured card: inline icon with title, install count bottom-right with author, narrower card Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ction Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… context Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
This PR has been inactive for 14 days and is now marked as stale. |
Type of Changes
Description
Action Collection (custom AI instruction store) MVP on the extension side, wired to the new id-based backend contract.
Featured store picks
components/featured-collections.tsx.ActionCollectionDetailDialog(newcomponents/ai-feature-store.tsx) to preview and install; the whole section hides when there are no public collections./my-collections). Newcomponents/my-published-button.tsx.ActionCollectionInstallListenermounted inapp.tsx, reads the install param and opens the detail dialog.Add-action dialog
components/add-action-dialog.tsx,components/action-card-list.tsx.Publish to store
PublishActionButtonmoved to the top-right of the editor card.action-config-form/index.tsx.id-based install deep link
id: content script readsevent.data.id(action-collections.content/{bridge,index}.ts),message.tscarriesrequestActionCollectionInstall({ collectionId }), background opens the options page via the route mechanism (openOptionsPage({ route })).getDetail({ id })/install({ id }); share links are built fromcollectionId.oRPC layer & refactor
src/orpc/action-collection.ts; install business logic ininstall-action-collection.ts.ts-pattern(new dependency):utils/orpc/localize-error.tsinstanceof chain and the detail dialog tri-state render.Config & i18n
types/config/selection-toolbar.ts: custom actions gain an optionalactionCollectionsource snapshot (collection id/version/author/shareUrl/installedAt).Related Issue
Closes #
How Has This Been Tested?
pnpm type-check,pnpm lint, andpnpm test(1315 passed) all pass. Manually verified viadev:localagainst a local backend: featured cards rendering, detail-dialog install, publish flow, and the install deep link.Checklist
Additional Information
The companion backend changes live in the monorepo (
api-contract/packages/api/apps/www) and follow the input=id/ output=collectionIdnaming convention.