Skip to content

fix(landing): serve hosted install.sh wrapper - #4866

Merged
AmyShang-alt merged 1 commit into
nexu-io:mainfrom
YOMXXX:fix/issue-4136-install-sh
Jul 2, 2026
Merged

fix(landing): serve hosted install.sh wrapper#4866
AmyShang-alt merged 1 commit into
nexu-io:mainfrom
YOMXXX:fix/issue-4136-install-sh

Conversation

@YOMXXX

@YOMXXX YOMXXX commented Jun 28, 2026

Copy link
Copy Markdown
Collaborator

Fixes #4136

Why

I hit this while checking the hosted install path from the issue. https://open-design.ai/install.sh was falling through to the landing-page HTML app, so curl | sh received markup instead of shell and failed immediately.

The actual MCP installer logic already lives in od mcp install. This PR adds a thin hosted shell wrapper so the URL returns executable shell while keeping the product-owned installer in the CLI.

What users will see

curl -fsSL https://open-design.ai/install.sh | sh -s <agent> now receives a shell script that delegates to od mcp install <agent> [options]. The wrapper prints help for --help, fails clearly if od is missing, and rejects non-Open-Design od binaries such as Linux/WSL coreutils /usr/bin/od.

The README also documents the hosted equivalent next to the existing od mcp install <agent> command.

Surface area

  • UI — new page / dialog / panel / menu item / setting / empty state in apps/web or apps/desktop (including Electron menu bar)
  • Keyboard shortcut — new or changed
  • CLI / env var — new od subcommand or flag, new tools-dev / tools-pack / tools-pr flag, or new OD_* env var
  • API / contract — new /api/* endpoint, new SSE event, or changed shape in packages/contracts
  • Extension point — new entry under skills/, design-systems/, design-templates/, or craft/, or change to the skills protocol
  • i18n keys — added new translation keys (see TRANSLATIONS.md for the locale workflow)
  • New top-level dependency — adding any new entry to the root package.json (dependencies or devDependencies); workspace-package package.json files are out of scope. Include a paragraph on what we get vs. what bytes we ship (see CONTRIBUTING.md → Code style)
  • Default behavior change — changes what existing users experience without opting in (default model, default setting, file/SQLite schema, auto-network on startup, auto-install)
  • None — internal refactor, docs, tests, or translation update only

Screenshots

No screenshot attached. This is a static hosted shell asset and README update, not a visual UI change.

Bug fix verification

  • Test path that reproduces the bug: apps/landing-page/tests/install-sh-static.test.ts
  • Did the test go red on main and green on this branch? yes — the red case was the missing apps/landing-page/public/install.sh static asset, which meant the hosted route fell back to the HTML app.

Validation

  • PATH=/Users/liguanchen/.nvm/versions/node/v24.15.0/bin:$PATH pnpm --filter @open-design/landing-page test — 29 tests passed
  • PATH=/Users/liguanchen/.nvm/versions/node/v24.15.0/bin:$PATH pnpm --filter @open-design/landing-page build
  • PATH=/Users/liguanchen/.nvm/versions/node/v24.15.0/bin:$PATH pnpm guard
  • PATH=/Users/liguanchen/.nvm/versions/node/v24.15.0/bin:$PATH pnpm typecheck

@lefarcen
lefarcen requested a review from nettee June 28, 2026 15:43
@lefarcen lefarcen added size/M PR changes 100-300 lines risk/medium Medium risk: regular code changes type/bugfix Bug fix needs-validation Runtime change detected; needs human or /explore agent validation. labels Jun 28, 2026
@lefarcen

Copy link
Copy Markdown
Contributor

🧪 This PR changes a user-facing install path, so it needs a manual QA pass before merge — please hold off self-merging for now. We'll loop QA in once it's merge-ready.

@nettee nettee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I found one blocking issue in the new install.sh shadowed-od validation path; details are inline.

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

Comment thread apps/landing-page/public/install.sh Outdated
@lefarcen

Copy link
Copy Markdown
Contributor

Hey @YOMXXX — the current blocker is the one @nettee called out on this head: the shadowed-od guard still accepts binaries that return success for od mcp install --help, so the wrapper can fall through to the wrong executable instead of surfacing the shadowing error.

Once that check validates an Open-Design-specific marker in the help output and the regression test covers the success-exit / non-Open-Design case, this should be ready for another look.

💡 To drive this PR to merge hands-free, paste this to your AI coding agent (Claude Code / Codex / opencode / Cursor …):
Take over nexu-io/open-design#4866 until it merges — read https://raw.githubusercontent.com/nexu-io/looper/main/skills/pr-takeover/SKILL.md and follow it.

@YOMXXX
YOMXXX force-pushed the fix/issue-4136-install-sh branch from 22eb10d to 2af10fe Compare June 29, 2026 00:57

@nettee nettee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I found one non-blocking maintainability issue in the new install.sh identity probe; details are inline.

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

Comment thread apps/landing-page/public/install.sh Outdated
@YOMXXX
YOMXXX force-pushed the fix/issue-4136-install-sh branch from 2af10fe to 592aed3 Compare June 29, 2026 01:08

@nettee nettee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@YOMXXX I re-reviewed the updated hosted installer path on 592aed3f, including the CLI-owned probe token, the landing-page wrapper, and the regression coverage for shadowed od handling. The current shape closes the earlier shadowing and help-text drift concerns cleanly, and the wrapper now fails fast before delegating to a non-Open-Design binary. I wasn’t able to rerun the package tests in this checkout because node_modules are absent here, but the changed-range logic and test coverage line up with the fix. Thanks for iterating on this quickly and tightening the contract between the hosted script and the CLI.

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

@lefarcen

Copy link
Copy Markdown
Contributor

Thanks for the quick turnaround, @YOMXXX — the current head is clear from the earlier review blocker, and I'm queueing the manual QA pass next.

@lefarcen lefarcen added risk/high High risk: apps/desktop, daemon, auth, migration, workflows, package deps and removed risk/medium Medium risk: regular code changes labels Jun 29, 2026
@lefarcen
lefarcen requested a review from AmyShang-alt June 29, 2026 01:27
@lefarcen

Copy link
Copy Markdown
Contributor

Thanks @kokisanai — quick status check from our side: this PR isn't waiting on maintainer review right now. @nettee already approved the current head, and the remaining step is the manual QA pass that's already queued.

@YOMXXX If QA finds anything we'll keep the thread moving here, but there isn't a review blocker from the team at the moment.

@AmyShang-alt AmyShang-alt added validated Runtime change validated (via /explore Pass or manual QA). and removed needs-validation Runtime change detected; needs human or /explore agent validation. labels Jul 2, 2026

@AmyShang-alt AmyShang-alt left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

QA 验收记录

验收范围:

  • 验证 hosted install.sh 不再落到 landing-page HTML fallback。
  • 验证 wrapper 能通过稳定 CLI probe 识别 Open Design od,正常委托 od mcp install <agent> [options]
  • 验证 Linux/WSL 常见的非 Open Design od shadowing 会 fail fast,不会继续执行错误二进制。
  • 验证 landing-page build 与 daemon CLI probe 类型/测试边界。

已验证:

  • PR head: 592aed3f437d7dc79c3856098c37a5e30368c748
  • pnpm install --frozen-lockfile 通过。
  • pnpm --filter @open-design/landing-page test -- install-sh-static 通过:30 tests passed。
  • pnpm --filter @open-design/daemon exec vitest run -c vitest.config.ts tests/mcp-install-cli.test.ts 通过:1 test passed。
  • pnpm --filter @open-design/landing-page build 通过,只有既有 warning/hints,无 error。
  • pnpm --filter @open-design/daemon typecheck 通过。
  • 手工抽验 install.sh --help、缺少 <agent>、fake Open Design od 正常委托、fake/coreutils 风格 od 拒绝均符合预期。
  • 本地 landing preview 访问 /install.sh 返回 shell 脚本内容,不是 HTML fallback。

未验证:

  • 未验证线上 https://open-design.ai/install.sh 部署后的实际响应;该项需等 PR 合并/部署后做最终 curl 抽验。

风险/关注点:

  • 这是公开安装入口,用户影响较高;当前回归测试和手工抽验已覆盖主要失败模式。

结论:

  • 验收通过。当前 head 可移除 needs-validation 并标记 validated

@AmyShang-alt
AmyShang-alt added this pull request to the merge queue Jul 2, 2026
Merged via the queue into nexu-io:main with commit 14f85f3 Jul 2, 2026
27 checks passed
xxiaoxiong pushed a commit to xxiaoxiong/open-design that referenced this pull request Jul 9, 2026
pull Bot pushed a commit to RealShocky/open-design that referenced this pull request Jul 9, 2026
Bring docs/i18n/README.zh-TW.md back in line with README.md:
- Add the hosted `curl ... install.sh | sh` install path plus the
  install.sh wrapper note (nexu-io#4866).
- Add the WSL2 note in the coding-agent install section and the
  WSL2 / wsl-setup.md pointer in the run-from-source line.
- Add the macOS Docker Desktop bridge-networking note.
- Add utm_source / utm_medium / utm_content attribution to the six
  open-design.ai links (nexu-io#4792).

Headings and structure unchanged; all referenced docs (wsl-setup.md,
deploy/README.md#docker-desktop-on-macos, windows-troubleshooting.md)
exist.
xxiaoxiong pushed a commit to xxiaoxiong/open-design that referenced this pull request Jul 13, 2026
xxiaoxiong pushed a commit to xxiaoxiong/open-design that referenced this pull request Jul 13, 2026
Bring docs/i18n/README.zh-TW.md back in line with README.md:
- Add the hosted `curl ... install.sh | sh` install path plus the
  install.sh wrapper note (nexu-io#4866).
- Add the WSL2 note in the coding-agent install section and the
  WSL2 / wsl-setup.md pointer in the run-from-source line.
- Add the macOS Docker Desktop bridge-networking note.
- Add utm_source / utm_medium / utm_content attribution to the six
  open-design.ai links (nexu-io#4792).

Headings and structure unchanged; all referenced docs (wsl-setup.md,
deploy/README.md#docker-desktop-on-macos, windows-troubleshooting.md)
exist.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk/high High risk: apps/desktop, daemon, auth, migration, workflows, package deps size/M PR changes 100-300 lines type/bugfix Bug fix validated Runtime change validated (via /explore Pass or manual QA).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: https://open-design.ai/install.sh doesn't return bash rather loads webpage

4 participants