Releases: Expert-Vision-Software/opencode-gemiterm-skills
Releases · Expert-Vision-Software/opencode-gemiterm-skills
Release list
v1.1.0
Fixed
- Registration detection no longer keys off the launch directory. The self-checkout carve-out (
directory === packageDir⇒ repo-local) is gone: detection is config-based only — the global config dir, the repo's.opencode/, and a repo-root config — so a plugin never infers registration from where it happens to be launched. - The
confighook can no longer stall OpenCode startup: its entire body is wrapped in try/catch, and any failure (rotted plugin cache, unreadable package metadata, a blocked destination) degrades to a warn log plus a warning toast naming the exact remediation — never a rethrow. The hook never auto-deletes the cache, since that races OpenCode's in-flight installs; hard errors stay CLI-only. - Consumer install snippets now use the correct OpenCode config key
plugin(singular), notplugins. The config schema setsadditionalProperties: false, sopluginsis invalid.
Added
- Format-tolerant registration detection:
opencode.jsoncis honored alongsideopencode.jsonin the global config dir,<repo>/.opencode/, and the repo root..jsoncfiles are parsed leniently — string-aware stripping of//and/* */comments and trailing commas, so$schemaURLs survive — while.jsonstays strict. Config writes still targetopencode.json. - Load-failure advisory (log + toast) with cache-rot remediation: when the
confighook fails, the message namesbunx opencode-gemiterm-skills install --scope globaland the~/.cache/opencode/packages/opencode-gemiterm-skills@<version>directory to clear. The advisory builder itself is infallible, with a static fallback when package metadata is unreadable.
Changed
@opencode-ai/pluginis now classified as adevDependency: every import in the shipped code is type-only and fully erased at runtime, so the published package declares no runtime dependencies.- devDependency ranges are pinned to the tested versions that are actually installed (
@types/bun@^1.3.14,@types/node@^26.6.2) instead of floatinglatest, so installs no longer drift with whatever the registry publishes. The trackedbun.lockis the single source of truth, and the release workflow installs withbun install --frozen-lockfileso CI fails on a lockfile that does not matchpackage.json. @opencode-ai/pluginupdated from^1.16.2to^1.18.31. The type-only surface this package imports (Plugin,PluginInput,Config, and theclient.app.log/client.tui.showToastpayloads) is unchanged across the bump, andbun run checkand the test suite pass against the newer types.
Removed
- The legacy
.versionmarker mechanism is removed outright:removeStaleVersionMarkers, its install call site, andreadLegacySkillVersionare deleted, so no marker is ever read or cleaned up.<configBase>/opencode-gemiterm-skills.manifest.json(version + per-file sha256 hashes) is now the sole installation record — a scope is installed iff its manifest exists with contents, andstatusno longer falls back to a skill directory or a marker. A pre-manifest install (1.0.0-or-earlier, no manifest) is correctly reported as not installed; the nextinstall(or load-hook self-ensure) writes a fresh manifest in one pass with no--forcerequired.
v1.0.0
Changed
- Scope-aware, manifest-gated load-time installation (aligned with the
opencode-auto-qcgatesv1.5.0 model):plugin.tsnow performs read-only registration-scope detection (src/registration.ts): global config / repo.opencode/opencode.json/ repo-rootopencode.json, with semantic@latest-aware name matching. The olddirectory-based global-vs-local guess (which leaked local installs into every consumer repo) is gone.- Installs are gated by
<configBase>/opencode-gemiterm-skills.manifest.json(version + per-file sha256 hashes,src/manifest.ts): up-to-date scope = zero-write no-op; version drift = update that scope only; consumer-modified files = skip + warn at load (--forcestays CLI-only). .versionmarkers are obsolete; they are removed on the first manifest-era install andstatusfalls back to them only for pre-manifest installs.
- Hardening carried into the CLI: unparseable opencode.json is never rewritten from
{}(refuse + warn, preserved byte-for-byte); plugin entries are written canonically asname@latestwith semantic dedup; root-config migration andplugin-array edits are consented CLI actions only — the load hook never performs them. - New
install --forceCLI flag to overwrite consumer-modified installed files. statusnow reports both scopes independently.
Added
- One-shot advisory (log + toast) when the package is registered in no scope and no install exists; fires exactly once per session and performs zero writes.
- Regression-contract test suite (
tests/regression.test.ts) covering the full scope/manifest/--force/detection matrix with a sandboxed global config.
Fixed
- Version drift with byte-identical files no longer stalls: the scope manifest is rewritten on drift even when no file content changed, so drift is reconciled in one load instead of recurring forever.
permission.skillgrants are now ensured on every manifest rewrite, not only when skill files are written.- Registration detection warns (instead of silently reporting "not installed") when an opencode.json it inspects is not valid JSON.
- Advisory/toast helpers moved out of
plugin.tsintosrc/advisory.tsper the repo's src-only rule.
v0.7.0
Changed
- Aligned with GemiTerm update v2.2.0.
v0.6.2
Fixed
installno longer adds a duplicate plugin entry whenopencode-gemiterm-skillsis already present under a different form (e.g.opencode-gemiterm-skills@latestor different casing). Added a sharednormalizePluginName/isOurPluginEntryhelper that strips version tags (@latest,@1.2.3) and lowercases before matching, used byaddPluginToConfig,removePluginFromConfig, andisPluginInConfig. Scoped packages (@scope/pkg) are handled correctly so the leading@isn't mistaken for a version separator.
Added
- Exported
normalizePluginNameandisOurPluginEntryfromsrc/installer.tsfor direct unit testing. - 6 new tests in
tests/skills.test.tscovering version-spec stripping, case-insensitivity, whitespace trimming, scoped-package handling, and matching/rejecting the right entries.
v0.6.1
Changed
- Fixed frontmatter for
debate-with-geminiskill.
v0.6.0
Changed
- GemiTerm is now a Bun-native CLI — the underlying
gemitermCLI has been rewritten to run on Bun instead of Python. All skill documents updated to reflect the new runtime: skills first check for a globalgemiterminstall, fall back tobunx gemitermfor transparent npx-style invocation, and if Bun itself is missing emit platform-aware install instructions (curl -fsSL https://bun.sh/install | bashon macOS/Linux,powershell -c "irm bun.sh/install.ps1 | iex"on Windows) before erroring out. - Added
metadata.runtime: bunto both skill frontmatter entries. - Updated
debate-with-geminiREFERENCE.md subagent template to mentionbunx gemitermfallback for every command and addedbunx gemiterm *to the permissions block. - Rewrote both skill documents —
gemitermanddebate-with-geminiSKILL.md and REFERENCE.md now contain richer, more structured content: thedebate-with-geminiskill includes tactical patterns (Concede-and-Counter, Force Concrete Example, Decision Matrix, Reframe the Question, Line-in-the-Sand), explicit stopping criteria, and a structured debate-report format; thegemitermskill has an expanded command reference with detailed flags and common automation patterns. - Directory restructure — moved
assets/skills/{gemiterm,debate-with-gemini}→skills/{gemiterm,debate-with-gemini}so both skills sit at the standardskills/<name>/SKILL.mdpath recognized by Vercel'sskillsCLI (and the broader skills ecosystem). .claude-plugin/plugin.jsonand.opencode/opencode.jsonupdated to reference the new./skillspath;package.json#filesnow whitelistsskillsinstead ofassets.src/installer.tsandtests/skills.test.tssource-path constants updated accordingly.- Docs (
AGENTS.md,CONTRIBUTING.md) updated to reflect the new layout.
Removed
assets/directory (no longer needed; skills moved to repo root).- All references to
pipx install gemitermand Python-based install paths.
v0.5.1
Added
CONTRIBUTING.md— developer-facing docs with architecture, file layout, coding rules, and troubleshooting (extracted from README)
Changed
- README rewrite — refocused for end-users and SEO: HTML meta comment with keywords, centered hero header, streamlined examples with emoji headers, "Why this plugin?" value-proposition section, call-to-action footer
- README generalized to be agent-agnostic: describes "any AI agent" instead of only OpenCode-specific framing; shows both
bunxandnpxinstall commands; "CLI install (any agent)" as the primary install method debate-with-geminiskill frontmatter: removedmetadata.requiresfield; addedcompatibilityandlicensefieldsgemitermskill frontmatter: addedcompatibilityandlicensefields
Removed
- Test for
metadata.requires: gemitermondebate-with-gemini(field no longer exists)
v0.5.0
Initial public release.
Added
- npm distribution support:
binfield exposesopencode-gemiterm-skillsCLI viabunx/npx(install,uninstall,statussubcommands) engines: { "bun": ">=1.0.0" }andsideEffects: falsemetadata inpackage.jsonhomepageandauthorfields inpackage.jsonprepublishOnlyscript that runstsc --noEmitandbun testbefore publish- Bun shebang (
#!/usr/bin/env bun) onindex.tsso the CLI stub is executable - README: Example use cases section demonstrating both
gemitermanddebate-with-geminiskills with sample prompts and agent responses - README: introduction blurb linking to the
gemitermCLI repository - README:
gemitermCLI link in the Requirements table
Changed
package.jsonfilesarray whitelists.opencode/opencode.jsoninstead of the entire.opencode/directory, preventing dev-only artifacts from shipping.opencode/opencode.json(self-config) stripped of dev-only entries (extra skills path, plugin array, empty MCP block)- Module/CLI refactor:
index.tsis a one-line re-export ofplugin.ts; CLI entry moved tosrc/cli.tswith dynamic version read frompackage.json;package.json#binpoints at./src/cli.ts;package.json#filesincludes"src";tsconfig.json#includeincludes"src/**/*.ts" package.jsonversion bumped to0.5.0