feat(installer): openmillas interactive installer (Unix, v0.3.0) #4
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/spec-installer"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Adds a delegation-based interactive installer for the opencode configuration bundle (
workspace/opencode/install.sh+ companion CLIworkspace/opencode/openmillas). Replaces the manualdeploy.sh --installflow with a one-linecurl | bashinstall that delegates to upstream installers (npx ctx7 setup,codegraph install,npm i -g opencode-subagent-statusline).What ships in this PR
New files
workspace/opencode/install.sh(~556 lines, bash 4+,set -euo pipefail) — interactive Unix installer.workspace/opencode/openmillas(~360 lines, bash) — user-facing CLI; installed to~/.local/bin/openmillasbyinstall.sh.workspace/opencode/lib/jsonc.sh+lib/_jsonc_strip.py— shared JSONC strip + merge helper, sourced by bothdeploy.shandinstall.sh. Replaces the duplicated heredocs inread_bundled_mcpandpatch_global_config. All writes go throughmktemp + mv -ffor atomicity.workspace/opencode/tests/test_install.sh(~800 lines) — 20 tests covering idempotency, prompt rejection, upstream failure recovery, tui.json merge correctness (existing / idempotent / npm-fail), opencode.jsonc MCP-merge preservation, doctor, uninstall, atomic-write, JSONC helper dedup.Modified
workspace/opencode/deploy.sh— sourceslib/jsonc.sh, replaces duplicated heredocs with helper calls, adds copy steps forAGENTS.mdandcodegraph/examples/, runs the additivetui.jsonmerge. Atomic write upgrade applied topatch_global_config. Behavior is byte-identical for users with existing~/.config/opencode/.workspace/opencode/opencode.jsonc— dropsmcp.context7;mcp.codegraphkept as a block withenabled: falseand an inline pointer tohttps://github.com/colbymchenry/codegraph.workspace/opencode/agents/codegraph.md— drops theopencode-codegraphplugin mention (was inconsistent with the bundle'''sopencode.jsonc).README.md,AGENTS.md(root),CHANGELOG.md— version bump 0.2.0 → 0.3.0; new §Install / §Third-party services / §Optional integrations sections in README; new openmillas CLI subsection in AGENTS; Added/Changed entries under [Unreleased].Removed
LICENSE— license-strip pass per user direction. User will relicense at end.spec.md— renamed tospec_memory.md(memory plugin research; license claim stripped).Compatibility for existing
deploy.sh --installusers~/.config/opencode/opencode.jsoncpreserved verbatim (additive MCP merge).~/.config/opencode/tui.jsonpreserved verbatim (additive plugin merge).deploy.sh --checkunchanged.AGENTS.mdandcodegraph/examples/now copied bydeploy.shtoo (was a gap; resolves TD-17).Acceptance criteria met (16 of 16)
Resolves
deploy.sh copy_bundlegap forAGENTS.mdand additivetui.jsonmerge)codegraph.ru/opencode-codegraphreferences in shipped docs)New tech debt (filed for follow-up)
curl | bashself-update has no SHA-256 / GPG / TOFU pin.install.shandopenmillasduplicate ~140 lines of subcommand bodies.lib/jsonc.shships two unused public functions.BUNDLE_DIRaccepts arbitrary paths without integrity verification.install.ps1,openmillas.ps1) is deferred.python3 -Inot used in heredocs (PYTHONPATH needed for_jsonc_strip.pyimport).Out of scope (planned follow-up)
brew tap/scoopformula (spec §12).Forgejo raw URL
Tested both candidate URLs against the repo; both return 404 because the remote is private.
install.shincludes a graceful fallback: when the remote fetch fails, it prints a clear message and instructs the user to clone the repo and runinstall.shlocally. Thecurl | bashUX will work once the repo is published.How to review