Prefix plugin clones with the username so shared clones don't collide

Clones of omarchy.clock become dhh.clock instead of local.clock, so a
published clone carries its author's namespace. The clone command owns
the id derivation and gains --edit to open the result in $EDITOR, and
the shell exposes clonedFrom in listPlugins so the plugin menu no longer
reconstructs clone ids.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
David Heinemeier Hansson
2026-08-01 13:13:39 -05:00
co-authored by Claude Fable 5
parent 2050f28d55
commit 1bc89105d2
9 changed files with 79 additions and 57 deletions
+4 -1
View File
@@ -938,6 +938,8 @@ ShellRoot {
var isBarOption = Array.isArray(kinds) && kinds.indexOf("bar") !== -1
var isBarWidget = Array.isArray(kinds) && kinds.indexOf("bar-widget") !== -1
var active = isBarOption && shell.isActiveBarOption(id)
var metadata = plugins[id].omarchy
var clonedFrom = Util.isPlainObject(metadata) ? String(metadata.clonedFrom || "") : ""
out.push({
id: id,
name: plugins[id].name,
@@ -952,7 +954,8 @@ ShellRoot {
// that a caller offering the verbs does not have to read kinds and
// work it out again.
canDisable: !isBarOption,
firstParty: !!plugins[id].__isFirstParty
firstParty: !!plugins[id].__isFirstParty,
clonedFrom: clonedFrom
})
}
// Consumers should not each invent their own presentation order.