Repository navigation
Added
-
statusnow resolves the effective version a session would load, per scope, instead of echoing the manifest version. For each scope it reports the config file holding the registration, the raw entry as written (name@latest, a pinned spec, a{ package }object, or a path/file://form), and the resolved source on disk — an npm spec to OpenCode's package cache ($XDG_CACHE_HOME/opencode/npm, falling back to~/.cache/opencode/npm) with the version read from that copy'spackage.jsonand the copy's age as a staleness hint, a path entry to the package checkout viaPluginEntryResolver.packageRoot— and closes with an effective verdict that annotates a double-scope registration (should load: 1.0.0 (cache copy, local + global; both scopes register — double-load)) plus warnings for that double-load, a manifest/resolved version mismatch, a missing or incomplete cached copy, and an unparseable config. The verdict answers from the strongest source available: a resolved copy on disk, else the registration spec (a pinned exact version answers directly;@latestanswers with the published version under--online; ranges stayunresolved), else the manifest version. A manifest without a live registration reports unregistered: the report answers what would load, not what was once installed. New--onlinequeries the npm registry for every registered package — the name comes from the entry, or from the checkout'spackage.jsonfor path-form registrations — and prints the published latest per scope (npm-latest=<version>, also, latest <version>on the verdict), flagging staleness with warn-and-continue on network failure. New--path <dir>resolves against another project directory; both flags are status-only and rejected elsewhere.statusremains read-only. Resolution lives in the newStatusReporter(src/status-reporter.ts) oversrc/loaded-version.ts,src/config-entries.ts, andsrc/registry-version-checker.ts, with entry classification unified insrc/entry-spec.ts;Installeris install/uninstall/cache only and exposesmanifestAt()in place of the retiredstatus()/StatusOutcome. The generated-package templates (registration,plugin-entry,installer,cli) gain the same resolution so packaged extensions inherit it. -
Path-form plugin-entry recognition (the
aurelia-expert@db0736elesson, issue #3): the newsrc/plugin-entry.tsandtemplates/plugin-entry.template.txtresolve afile://URL or filesystem config entry to a package bypackage.jsonname. Registration-scope detection (templates/registration.template.txt) and the surgical config editor (src/plugin-config.ts,templates/plugin-config.template.txt) now count a live path-form entry as registered, so installation never adds a duplicatename@latestentry beside it. The packager and publisher template maps gainedsrc/plugin-entry.ts, and conformance-checklist items B2 and C1 gained the rule.
Changed
- Path-form resolution refinements from the code review: relative path entries resolve against the config file's directory (facts §7) instead of the process working directory;
package.jsonname matching is case-insensitive on Windows in code, as the docs already claimed; resolution memoization is an unbounded map keyed by resolved path;src/plugin-entry.tsis byte-identical to its template again, and the suite gainssrc/plugin-name.ts(byte-identical totemplates/plugin-name.template.txt), both enforced by a new byte-sync test. The registration/config-editor "name match, then path resolve" shape is deduplicated into one shared predicate per file, and the four array fields collapse into keyed records.
Fixed
agents/opencode-plugin-engineer.mdreferenced a nonexistentfilterOurEntries; it now names the real de-dup path (PluginConfigEditor.ensurePluginEntry's zero-write no-op). Historical note: commit6308389was labeleddocs:but also flipped test expectations (the v2 fixture dropped itspluginskey).