feat(kyberforge): execute the plugin→APM conversion #95

Merged
Defame1297 merged 49 commits from feat/90-execute-apm-conversion into main 2026-08-14 14:32:36 +00:00
14 changed files with 82 additions and 72 deletions
Showing only changes of commit b0936ad386 - Show all commits

View File

@@ -28,6 +28,7 @@ repos:
- id: pretty-format-json - id: pretty-format-json
stages: ['pre-commit'] stages: ['pre-commit']
args: [--autofix] args: [--autofix]
exclude: '(^|/)(\.claude-plugin/plugin\.json|\.github/plugin/plugin\.json|\.claude-plugin/marketplace\.json)$|^\.agents/plugins/marketplace\.json$'
- id: check-yaml - id: check-yaml
stages: ['pre-commit'] stages: ['pre-commit']
- id: trailing-whitespace - id: trailing-whitespace

View File

@@ -1,10 +1,12 @@
{ {
"name": "bin",
"version": "1.1.1",
"description": "A place for things to be binned",
"author": { "author": {
"email": "defame1297@rkdr.net",
"name": "Defame1297", "name": "Defame1297",
"email": "defame1297@rkdr.net",
"url": "https://git.dev.rkdr.net/Defame1297/" "url": "https://git.dev.rkdr.net/Defame1297/"
}, },
"description": "A place for things to be binned",
"license": "MIT", "license": "MIT",
"mcpServers": { "mcpServers": {
"obsidian": { "obsidian": {
@@ -15,7 +17,5 @@
"command": "npx", "command": "npx",
"type": "stdio" "type": "stdio"
} }
}, }
"name": "bin",
"version": "1.1.1"
} }

View File

@@ -1,11 +1,11 @@
{ {
"name": "bin",
"version": "1.1.1",
"description": "A place for things to be binned",
"author": { "author": {
"email": "defame1297@rkdr.net",
"name": "Defame1297", "name": "Defame1297",
"email": "defame1297@rkdr.net",
"url": "https://git.dev.rkdr.net/Defame1297/" "url": "https://git.dev.rkdr.net/Defame1297/"
}, },
"description": "A place for things to be binned", "license": "MIT"
"license": "MIT",
"name": "bin",
"version": "1.1.1"
} }

View File

@@ -1,18 +1,18 @@
{ {
"name": "core",
"version": "1.1.0",
"description": "Cross-cutting utility skills for everyday AI-assisted coding \u2014 triage, diagnosis, architecture review, and session navigation.",
"author": { "author": {
"email": "defame1297@rkdr.net",
"name": "Defame1297", "name": "Defame1297",
"email": "defame1297@rkdr.net",
"url": "https://git.dev.rkdr.net/Defame1297/" "url": "https://git.dev.rkdr.net/Defame1297/"
}, },
"description": "Cross-cutting utility skills for everyday AI-assisted coding \u2014 triage, diagnosis, architecture review, and session navigation.", "license": "MIT",
"keywords": [ "keywords": [
"cross-cutting", "cross-cutting",
"triage", "triage",
"diagnose", "diagnose",
"architecture", "architecture",
"debug" "debug"
], ]
"license": "MIT",
"name": "core",
"version": "1.1.0"
} }

View File

@@ -1,18 +1,18 @@
{ {
"name": "core",
"version": "1.1.0",
"description": "Cross-cutting utility skills for everyday AI-assisted coding \u2014 triage, diagnosis, architecture review, and session navigation.",
"author": { "author": {
"email": "defame1297@rkdr.net",
"name": "Defame1297", "name": "Defame1297",
"email": "defame1297@rkdr.net",
"url": "https://git.dev.rkdr.net/Defame1297/" "url": "https://git.dev.rkdr.net/Defame1297/"
}, },
"description": "Cross-cutting utility skills for everyday AI-assisted coding \u2014 triage, diagnosis, architecture review, and session navigation.", "license": "MIT",
"keywords": [ "keywords": [
"cross-cutting", "cross-cutting",
"triage", "triage",
"diagnose", "diagnose",
"architecture", "architecture",
"debug" "debug"
], ]
"license": "MIT",
"name": "core",
"version": "1.1.0"
} }

View File

@@ -1,17 +1,17 @@
{ {
"name": "git",
"version": "1.3.2",
"description": "Skills for working with Git \u2014 conventional commits, branch management, pull requests, and feature flow.",
"author": { "author": {
"email": "defame1297@rkdr.net",
"name": "Defame1297", "name": "Defame1297",
"email": "defame1297@rkdr.net",
"url": "https://git.dev.rkdr.net/Defame1297/" "url": "https://git.dev.rkdr.net/Defame1297/"
}, },
"description": "Skills for working with Git \u2014 conventional commits, branch management, pull requests, and feature flow.", "license": "MIT",
"keywords": [ "keywords": [
"git", "git",
"vcs", "vcs",
"commit", "commit",
"branch" "branch"
], ]
"license": "MIT",
"name": "git",
"version": "1.3.2"
} }

View File

@@ -1,17 +1,17 @@
{ {
"name": "git",
"version": "1.3.2",
"description": "Skills for working with Git \u2014 conventional commits, branch management, pull requests, and feature flow.",
"author": { "author": {
"email": "defame1297@rkdr.net",
"name": "Defame1297", "name": "Defame1297",
"email": "defame1297@rkdr.net",
"url": "https://git.dev.rkdr.net/Defame1297/" "url": "https://git.dev.rkdr.net/Defame1297/"
}, },
"description": "Skills for working with Git \u2014 conventional commits, branch management, pull requests, and feature flow.", "license": "MIT",
"keywords": [ "keywords": [
"git", "git",
"vcs", "vcs",
"commit", "commit",
"branch" "branch"
], ]
"license": "MIT",
"name": "git",
"version": "1.3.2"
} }

View File

@@ -1,10 +1,13 @@
{ {
"name": "gitea",
"version": "1.3.3",
"description": "Skills for managing Gitea repositories \u2014 issues, pull requests, milestones, releases, and wikis.",
"author": { "author": {
"email": "defame1297@rkdr.net",
"name": "Defame1297", "name": "Defame1297",
"email": "defame1297@rkdr.net",
"url": "https://git.dev.rkdr.net/Defame1297/" "url": "https://git.dev.rkdr.net/Defame1297/"
}, },
"description": "Skills for managing Gitea repositories \u2014 issues, pull requests, milestones, releases, and wikis.", "license": "MIT",
"keywords": [ "keywords": [
"gitea", "gitea",
"issues", "issues",
@@ -12,8 +15,5 @@
"milestones", "milestones",
"releases", "releases",
"branches" "branches"
], ]
"license": "MIT",
"name": "gitea",
"version": "1.3.3"
} }

View File

@@ -1,10 +1,13 @@
{ {
"name": "gitea",
"version": "1.3.3",
"description": "Skills for managing Gitea repositories \u2014 issues, pull requests, milestones, releases, and wikis.",
"author": { "author": {
"email": "defame1297@rkdr.net",
"name": "Defame1297", "name": "Defame1297",
"email": "defame1297@rkdr.net",
"url": "https://git.dev.rkdr.net/Defame1297/" "url": "https://git.dev.rkdr.net/Defame1297/"
}, },
"description": "Skills for managing Gitea repositories \u2014 issues, pull requests, milestones, releases, and wikis.", "license": "MIT",
"keywords": [ "keywords": [
"gitea", "gitea",
"issues", "issues",
@@ -12,8 +15,5 @@
"milestones", "milestones",
"releases", "releases",
"branches" "branches"
], ]
"license": "MIT",
"name": "gitea",
"version": "1.3.3"
} }

View File

@@ -1,11 +1,11 @@
{ {
"name": "kyberforge",
"version": "1.4.0",
"description": "Skills and agents for creating, maintaining, and managing a Claude Code / Copilot CLI plugin marketplace.",
"author": { "author": {
"email": "defame1297@rkdr.net",
"name": "Defame1297", "name": "Defame1297",
"email": "defame1297@rkdr.net",
"url": "https://git.dev.rkdr.net/Defame1297/" "url": "https://git.dev.rkdr.net/Defame1297/"
}, },
"description": "Skills and agents for creating, maintaining, and managing a Claude Code / Copilot CLI plugin marketplace.", "license": "MIT"
"license": "MIT",
"name": "kyberforge",
"version": "1.4.0"
} }

View File

@@ -1,11 +1,11 @@
{ {
"name": "kyberforge",
"version": "1.4.0",
"description": "Skills and agents for creating, maintaining, and managing a Claude Code / Copilot CLI plugin marketplace.",
"author": { "author": {
"email": "defame1297@rkdr.net",
"name": "Defame1297", "name": "Defame1297",
"email": "defame1297@rkdr.net",
"url": "https://git.dev.rkdr.net/Defame1297/" "url": "https://git.dev.rkdr.net/Defame1297/"
}, },
"description": "Skills and agents for creating, maintaining, and managing a Claude Code / Copilot CLI plugin marketplace.", "license": "MIT"
"license": "MIT",
"name": "kyberforge",
"version": "1.4.0"
} }

View File

@@ -1,17 +1,17 @@
{ {
"name": "lint",
"version": "1.1.5",
"description": "Skills and agents for configuring and running linters.",
"author": { "author": {
"email": "defame1297@rkdr.net",
"name": "Defame1297", "name": "Defame1297",
"email": "defame1297@rkdr.net",
"url": "https://git.dev.rkdr.net/Defame1297/" "url": "https://git.dev.rkdr.net/Defame1297/"
}, },
"description": "Skills and agents for configuring and running linters.", "license": "MIT",
"keywords": [ "keywords": [
"lint", "lint",
"style", "style",
"prose", "prose",
"linter" "linter"
], ]
"license": "MIT",
"name": "lint",
"version": "1.1.5"
} }

View File

@@ -1,17 +1,17 @@
{ {
"name": "lint",
"version": "1.1.5",
"description": "Skills and agents for configuring and running linters.",
"author": { "author": {
"email": "defame1297@rkdr.net",
"name": "Defame1297", "name": "Defame1297",
"email": "defame1297@rkdr.net",
"url": "https://git.dev.rkdr.net/Defame1297/" "url": "https://git.dev.rkdr.net/Defame1297/"
}, },
"description": "Skills and agents for configuring and running linters.", "license": "MIT",
"keywords": [ "keywords": [
"lint", "lint",
"style", "style",
"prose", "prose",
"linter" "linter"
], ]
"license": "MIT",
"name": "lint",
"version": "1.1.5"
} }

View File

@@ -15,9 +15,15 @@ set -euo pipefail
# #
# plugin.json, apm.lock.yaml, and .mcp.json from the bundle are deliberately NOT # plugin.json, apm.lock.yaml, and .mcp.json from the bundle are deliberately NOT
# copied: .claude-plugin/plugin.json + .github/plugin/plugin.json are already # copied: .claude-plugin/plugin.json + .github/plugin/plugin.json are already
# generated correctly by a separate apm code path (core/plugin_manifest.py, run as # generated in-place at the plugin root by a separate apm code path
# part of the same `apm pack` invocation), and .mcp.json is hand-authored at the # (core/plugin_manifest.py, run as part of the same `apm pack` invocation, keyed off
# plugin root per ADR-0015 (it is not an .apm/ primitive). # cwd rather than -o), and .mcp.json is hand-authored at the plugin root per ADR-0015
# (it is not an .apm/ primitive). Real-mode syncs pass --force so that path actually
# refreshes both files from current apm.yml/.apm/ content -- apm pack silently skips
# regenerating an existing plugin.json otherwise ("already exists; skipping plugin.json
# generation"), which would let them go stale after a name/version/description edit.
# --check does NOT pass --force (it must not mutate the plugin root), so plugin.json
# staleness is not currently detected by --check -- only fixed by the next real sync.
# #
# hooks.json is only synced when .apm/hooks/ actually produces one -- a plugin with # hooks.json is only synced when .apm/hooks/ actually produces one -- a plugin with
# no .apm/hooks/ content is left alone even if a root-level hooks.json already exists # no .apm/hooks/ content is left alone even if a root-level hooks.json already exists
@@ -126,7 +132,10 @@ sync_one() {
mkdir -p "$scratch" mkdir -p "$scratch"
pack_log="$(mktemp)" pack_log="$(mktemp)"
if ! (cd "$plugin_dir" && apm pack --format plugin -o "$scratch") >"$pack_log" 2>&1; then local force_flag=()
[[ "$CHECK" -eq 0 ]] && force_flag=(--force)
if ! (cd "$plugin_dir" && apm pack --format plugin "${force_flag[@]}" -o "$scratch") >"$pack_log" 2>&1; then
echo "FAIL $plugin_dir: apm pack failed:" >&2 echo "FAIL $plugin_dir: apm pack failed:" >&2
sed 's/^/ /' "$pack_log" >&2 sed 's/^/ /' "$pack_log" >&2
rm -f "$pack_log" rm -f "$pack_log"