Skip to content

Offer to install Node.js in setup; hyphenate package names - #12

Merged
svincent240 merged 2 commits into
mainfrom
feat/plugin-node-setup
Oct 29, 2026
Merged

svincent240 merged 2 commits into
mainfrom
feat/plugin-node-setup

Conversation

@svincent240

@svincent240 svincent240 commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Stacked on #11, because both change the setup skill and the changelog. Merge #11 first, then change this PR's base to main (the Edit button next to the title). This repo doesn't auto-delete merged branches, so GitHub won't retarget it by itself.

Node.js setup

The setup skill used to stop when Node.js was missing and say "install it from nodejs.org." Now it asks first, then installs the current LTS:

  • macOS: brew install node, or, without Homebrew, it downloads the official .pkg (the newest LTS from https://nodejs.org/dist/index.json) and opens it so the author clicks through.
  • Windows: winget install --id OpenJS.NodeJS.LTS --exact --source winget, or the official .msi if winget is missing.
  • Linux: shows the distribution's commands from nodejs.org and doesn't run sudo unless asked.

It never asks for passwords in chat, falls back to nodejs.org when an install fails or is blocked, and tells the author to quit and reopen their AI tool afterwards. new-course points to setup for missing Node, and the launcher's "Node too old" message now suggests asking the AI tool to set up CourseCode.

Checked today: v26.13.0 is the newest LTS in index.json, and its node-v26.13.0.pkg, -x64.msi, and -arm64.msi all return 200. The OpenJS.NodeJS.LTS manifest exists in microsoft/winget-pkgs.

Package file names

The title part is hyphenated, so Client Manager Course builds client-manager-course_v1.0.0_cmi5.zip (was client_manager_course_v1.0.0_cmi5.zip). Underscores still separate the title, version, and format, so *_cmi5.zip patterns keep matching. Apostrophes and punctuation are dropped, letters in any script are kept (安全研修_v1.0.0_cmi5.zip), and an empty title gives course_…. Nothing in Cloud or Desktop parses these names: Cloud names its own exports (<course>-<client>-<format>.zip), and Desktop lists *.zip.

Codex duplicate tools: no change needed

In Codex's MCP catalog (codex-rs/codex-mcp/src/catalog.rs), servers are keyed by name and project config (precedence tier 2) wins over plugin servers (tier 0). A project's .codex/config.toml coursecode entry replaces the plugin's, so Codex never lists the tools twice. The duplicate is specific to Claude Code, which #11 handles.

Testing

  • npm test: 122 files, 1676 tests pass, including new package-name tests for English, accented, Japanese, and empty titles
  • npm run lint passes
  • npm run smoke:packed-create passes and produces client-manager-course_v1.0.0_cmi5.zip

The Node install steps haven't been run on a machine without Node.

🤖 Generated with Claude Code

The setup skill used to stop when Node.js was missing and point to
nodejs.org. It now asks, then installs the current LTS with Homebrew or
the official installer on macOS, or winget on Windows, and tells the
author to restart their AI tool. Linux and failed installs still get
pointed to nodejs.org.

Package zip names now hyphenate the course title, like project folders,
and keep underscores between title, version, and format so patterns
such as *_cmi5.zip still match. Letters in any script are kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@svincent240
svincent240 changed the base branch from fix/plugin-skip-claude-mcp-json to main October 29, 2026 21:35
@svincent240
svincent240 merged commit bdd7435 into main Oct 29, 2026
2 checks passed
@svincent240 svincent240 mentioned this pull request Oct 29, 2026
@svincent240
svincent240 deleted the feat/plugin-node-setup branch October 29, 2026 22:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant