mirror of
https://github.com/nexu-io/open-design.git
synced 2026-06-01 03:14:35 +07:00
|
Some checks failed
ci / Detect CI change scopes (push) Failing after 2s
landing-page-ci / Validate landing page (push) Failing after 1s
landing-page-deploy / Deploy landing page (push) Has been skipped
nix-check / build (push) Failing after 1s
ci / Preflight (push) Has been skipped
ci / Core package tests (push) Has been skipped
ci / Tools workspace tests (push) Has been skipped
ci / Daemon workspace tests (push) Has been skipped
ci / Web workspace tests (push) Has been skipped
ci / E2E vitest (push) Has been skipped
ci / Playwright critical (push) Has been skipped
ci / Build workspaces (push) Has been skipped
ci / App workspace tests (push) Has been skipped
ci / Validate workspace (push) Failing after 0s
Two-part fix for the Plugin folder card's "Open Design PR" button. The
flow was broken end-to-end: the CLI emitted a 404 URL, and the agent
prompt under-specified the contribution steps so the agent stalled
mid-turn or fell back to the legacy issue-URL path.
Catalog target — `apps/daemon/src/plugins/publish.ts`:
`buildPublishLink({ catalog: 'open-design' })` hardcoded a submission URL
at `github.com/open-design/plugin-registry`, the dedicated registry repo
proposed in docs/plans/plugin-registry.md §1.2. That repo doesn't exist
yet (P3.1 notes "creating the external GitHub repo is an operational
launch step, not a code blocker"), so every generated URL 404'd. Retarget
the catalog at the live `nexu-io/open-design` monorepo and update the
target-path hint in the PR body to `plugins/community/<plugin-name>/`
(the actual layout under main). Plan §1.2 stays the long-term goal — see
the code comment.
Also updates the matching `od plugin yank` issue URL in cli.ts.
Agent prompt — `apps/web/src/components/design-files/pluginFolderActions.ts`:
The `contribute` action prompt only said "use the supported `od plugin
publish` Open Design registry flow", which produces an issue URL (the
legacy path) and left the agent to invent the remaining steps. The agent
ended up calling `AskUserQuestion` mid-turn waiting for input that the
DesignFilesPanel buttons couldn't satisfy, then stalled for 600s.
Rewrite the `contribute` prompt to drive the full PR flow via raw `gh`
commands:
1. preflight `gh --version` / `gh auth status` (detect-and-instruct on
missing CLI, never auto-install anything)
2. read manifest, resolve author login
3. `gh repo fork nexu-io/open-design --remote=false`
4. clone fork, branch, cp plugin into `plugins/community/<name>/`,
commit/push using author's git identity (not a hardcoded bot)
5. `gh pr create ... --web` so the author reviews and clicks Create
Hard bans on `AskUserQuestion`, retry-on-failure, and the legacy
`od plugin publish --to open-design` CLI keep the turn fire-and-forget.
The `install` / `publish` action prompts are unchanged.
Tests:
* `apps/daemon/tests/plugins-publish.test.ts` — assert URL host +
catalogLabel match `nexu-io/open-design`, body contains the new path
hint.
* `apps/web/tests/components/pluginFolderActions.test.ts` (new) — lock
the contribute prompt's command surface, the `--web` review window,
the `AskUserQuestion` ban, the install-tool ban, and folder-path
interpolation. Nine assertions covering the prompt contract without
coupling to exact wording.
Validation:
* `pnpm --filter @open-design/daemon exec vitest run tests/plugins-publish.test.ts`
→ 11/11 passed
* `pnpm --filter @open-design/web exec vitest run tests/components/pluginFolderActions.test.ts`
→ 9/9 passed
* `pnpm --filter @open-design/web typecheck` clean
* E2E: button click in DesignFilesPanel under namespace=e2e-pr-test ran
`gh --version` → fork → clone → branch → commit/push → ended at
`gh pr create --web` opening the GitHub PR draft in browser. No
AskUserQuestion stall this time.
Doesn't touch: `5f71968f` server-side endpoints (`/contribute-open-design`
+ `/publish-github` still in main as dead code — separate cleanup),
plan/spec docs (per maintainer call to keep the dedicated-repo as the
long-term goal), or `registry-backends.test.ts` (plan terminal-state
fixture; no production caller).
|
||
|---|---|---|
| .. | ||
| Theater | ||
| AgentIcon.test.tsx | ||
| App.connectors.test.tsx | ||
| App.mediaProviders.test.tsx | ||
| assistant-message-tool-status.test.tsx | ||
| assistant-message-unfinished-todos.test.tsx | ||
| AssistantMessage.test.ts | ||
| AssistantMessage.test.tsx | ||
| auto-open-file.test.ts | ||
| BoardComposerPopover.pod-chip-hover.test.tsx | ||
| BoardComposerPopover.pod-remove.test.tsx | ||
| chat-feedback.test.tsx | ||
| chat-scroll-preservation.test.tsx | ||
| ChatComposer.context-pickers.test.tsx | ||
| ChatComposer.search.test.tsx | ||
| ChatPane.streaming.test.tsx | ||
| CommentTargetOverlay.hover-class.test.tsx | ||
| ConnectorsBrowser.test.tsx | ||
| ContinueInCliButton.test.tsx | ||
| conversation-timestamps.test.tsx | ||
| CustomSelect.test.tsx | ||
| DesignFilesPanel.test.tsx | ||
| DesignsTab.select-mode.test.tsx | ||
| DesignsTab.test.ts | ||
| DesignSystemFlow.test.tsx | ||
| DesignSystemsTab.test.tsx | ||
| EntryView.test.ts | ||
| examples-tab-filter-counts.test.tsx | ||
| examples-tab-preview-dispatch.test.tsx | ||
| examples-tab-retry.test.tsx | ||
| ExamplesTab.test.tsx | ||
| file-viewer-markdown-copy.test.tsx | ||
| file-viewer-render-mode.test.ts | ||
| FileOpsSummary.test.tsx | ||
| FileViewer.manual-edit-history.test.tsx | ||
| FileViewer.manual-edit.test.tsx | ||
| FileViewer.test.tsx | ||
| FileWorkspace.design-system.test.tsx | ||
| FileWorkspace.test.tsx | ||
| GenUISurfaceRenderer.diff-review.test.tsx | ||
| GenUISurfaceRenderer.schema-form.test.tsx | ||
| GenUISurfaceRenderer.test.tsx | ||
| HomeHero.plugin-picker.test.tsx | ||
| HomeHero.rail.test.tsx | ||
| HomeView.context-picker.test.tsx | ||
| HomeView.media-options.test.tsx | ||
| HomeView.plugin-i18n.test.tsx | ||
| HomeView.prefill.test.tsx | ||
| InlinePluginsRail.test.tsx | ||
| ManualEditPanel.test.tsx | ||
| MarketplaceView.test.tsx | ||
| McpClientSection.oauth.test.tsx | ||
| McpJsonHelper.test.tsx | ||
| MemorySection.test.tsx | ||
| modelOptions.test.tsx | ||
| NewProjectPanel.media.test.tsx | ||
| NewProjectPanel.test.ts | ||
| NewProjectPanel.test.tsx | ||
| PluginDetailsModal.dispatch.test.tsx | ||
| pluginFolderActions.test.ts | ||
| PluginInputsForm.test.tsx | ||
| plugins-home-facets.test.ts | ||
| plugins-home-html-surface.test.tsx | ||
| plugins-home-preview.test.ts | ||
| plugins-home-section.test.tsx | ||
| plugins-home-visualScore.test.ts | ||
| PluginShareMenu.test.tsx | ||
| PluginsSection.test.tsx | ||
| PluginsView.test.tsx | ||
| preview-modal-error-state.test.tsx | ||
| preview-modal-fullscreen.test.tsx | ||
| preview-modal-unavailable-state.test.tsx | ||
| PreviewDrawOverlay.test.tsx | ||
| PreviewModal.test.tsx | ||
| PrivacyConsentModal.test.tsx | ||
| PrivacySection.test.tsx | ||
| ProjectView.api-empty-response.test.tsx | ||
| ProjectView.deleteConversation.test.tsx | ||
| ProjectView.pendingPrompt.test.tsx | ||
| ProjectView.projectInstructions.test.tsx | ||
| ProjectView.run-cleanup.test.tsx | ||
| ProjectView.run-isolation.test.tsx | ||
| ProjectView.tabs-navigation.test.tsx | ||
| QuestionForm.test.tsx | ||
| QuickSwitcher.test.tsx | ||
| RoutinesSection.test.tsx | ||
| SettingsDialog.execution.test.tsx | ||
| SettingsDialog.media.test.tsx | ||
| SettingsDialog.orbit.test.tsx | ||
| SettingsDialog.test.ts | ||
| sketch-model.test.ts | ||
| SkillsSection.test.tsx | ||
| Toast.test.tsx | ||
| TrustBadge.test.tsx | ||
| use-everywhere-agent-guide.test.ts | ||
| WorkspaceTabsBar.test.tsx | ||