Skip to content

feat: add Homebrew support and rename CLI to Grimoire - #218

Open
goniszewski wants to merge 3 commits into
developfrom
feat/homebrew-support-cli-rename
Open

feat: add Homebrew support and rename CLI to Grimoire#218
goniszewski wants to merge 3 commits into
developfrom
feat/homebrew-support-cli-rename

Conversation

@goniszewski

Copy link
Copy Markdown
Owner

Summary

  • Add a Homebrew formula using checksummed release archives, core Bun, frozen dependency installation, executable grimoire and littleimp CLI wrappers, and a managed littleimpd service.
  • Make grimoire the primary CLI name while preserving littleimp as a compatibility alias and keeping existing daemon, service, and data identifiers stable.
  • Route Homebrew-managed updates through brew upgrade grimoire instead of the native self-updater.
  • Exercise the native installer, upgrade/data-preservation path, CLI aliases, service isolation, and uninstall path in the installed-app smoke test.
  • Update installation, migration, diagnostics, FAQ, security, and UI guidance.

Validation

  • npm run check
  • npm run test:e2e:installed
  • Focused packaging tests: 17/17
  • brew style Formula/grimoire.rb
  • Shell and Ruby syntax checks
  • git diff --check

Release note

The formula is prepared for the goniszewski/grimoire tap. Live Homebrew validation still requires publishing a repackaged release archive containing the new CLI entrypoint and update guard, followed by the published-archive and tap smoke tests. This PR does not publish the release or tap.

Copilot AI lite review requested due to automatic review settings August 30, 2026 13:38

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Comment thread daemon/install.sh
fi
info "Installing dependencies…"
(cd "${INSTALL_DIR}" && bun install --production)
(cd "${INSTALL_DIR}" && bun install --production --frozen-lockfile)
cwd: dirs.daemonDir,
env: smokeEnv(dirs, port),
const installEnv = smokeEnv(dirs, port);
const installer = spawnSync("bash", [join(releaseRoot, "daemon", "install.sh")], {
rmSync(dirs.frontendDir, { recursive: true, force: true });
rmSync(join(dirs.binDir, "littleimp"), { force: true });
const uninstallEnv = smokeEnv(dirs, port);
const uninstall = spawnSync("bash", [join(dirs.daemonDir, "install.sh"), "--uninstall"], {

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c02fcc9c58

ℹ️ About Codex in GitHub

Your team has set up Codex to 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 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread daemon/install.sh
fi
local cli_path
for cli_path in "${CLI_BIN}" "${LEGACY_CLI_BIN}"; do
if [[ -f "${cli_path}" ]] && grep -Fq "${INSTALL_DIR}/src/cli.ts" "${cli_path}" 2>/dev/null; then

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Match the escaped CLI path during uninstall

When HOME or another installation-path component contains spaces or shell metacharacters, write_cli_wrapper serializes the target with printf %q (for example, /Users/First\ Last/...), but this check searches for the unescaped ${INSTALL_DIR}/src/cli.ts. Consequently, --uninstall deletes the daemon while leaving both grimoire and littleimp wrappers behind, pointing to a nonexistent file; compare against the escaped representation or otherwise identify installer-owned wrappers without relying on this literal match.

Useful? React with 👍 / 👎.

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
C Security Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

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.

3 participants