From d245807cae220ad977365ec4c138f648c69c73a9 Mon Sep 17 00:00:00 2001 From: Defame1297 Date: Sat, 20 Jun 2026 18:57:52 +0000 Subject: [PATCH] chore: remove hello-world demo plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit No longer needed — kyberforge plugin-create provides a bundled template that serves as the canonical scaffold reference. Remove hello-world from marketplace manifests and update docs accordingly. Co-Authored-By: Claude Sonnet 4.6 --- .claude-plugin/marketplace.json | 5 - .github/plugin/marketplace.json | 5 - docs/ROADMAP.md | 1 - docs/spec/architecture.md | 1 - .../hello-world/.claude-plugin/plugin.json | 9 -- plugins/hello-world/.mcp.json | 9 -- plugins/hello-world/README.md | 77 ------------- .../hello-world/agents/hello-world.agent.md | 13 --- plugins/hello-world/agents/hello-world.md | 10 -- plugins/hello-world/bin/mcp-server.js | 69 ------------ plugins/hello-world/hooks.json | 8 -- plugins/hello-world/hooks/hooks.json | 15 --- plugins/hello-world/plugin.json | 11 -- .../hello-world/skills/hello-world/SKILL.md | 13 --- plugins/hello-world/tests/test_mcp_server.sh | 106 ------------------ 15 files changed, 352 deletions(-) delete mode 100644 plugins/hello-world/.claude-plugin/plugin.json delete mode 100644 plugins/hello-world/.mcp.json delete mode 100644 plugins/hello-world/README.md delete mode 100644 plugins/hello-world/agents/hello-world.agent.md delete mode 100644 plugins/hello-world/agents/hello-world.md delete mode 100755 plugins/hello-world/bin/mcp-server.js delete mode 100644 plugins/hello-world/hooks.json delete mode 100644 plugins/hello-world/hooks/hooks.json delete mode 100644 plugins/hello-world/plugin.json delete mode 100644 plugins/hello-world/skills/hello-world/SKILL.md delete mode 100755 plugins/hello-world/tests/test_mcp_server.sh diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index d257e62..82f20ee 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -4,11 +4,6 @@ "description": "AI development skills for Claude Code and GitHub Copilot CLI — factory, design, implement, review, and cross-cutting workflows.", "version": "0.1.0", "plugins": [ - { - "name": "hello-world", - "description": "A minimal example plugin to validate marketplace scaffolding.", - "source": "./plugins/hello-world" - }, { "name": "kyberforge", "description": "Skills and agents for creating, maintaining, and managing a Claude Code / Copilot CLI plugin marketplace.", diff --git a/.github/plugin/marketplace.json b/.github/plugin/marketplace.json index d257e62..82f20ee 100644 --- a/.github/plugin/marketplace.json +++ b/.github/plugin/marketplace.json @@ -4,11 +4,6 @@ "description": "AI development skills for Claude Code and GitHub Copilot CLI — factory, design, implement, review, and cross-cutting workflows.", "version": "0.1.0", "plugins": [ - { - "name": "hello-world", - "description": "A minimal example plugin to validate marketplace scaffolding.", - "source": "./plugins/hello-world" - }, { "name": "kyberforge", "description": "Skills and agents for creating, maintaining, and managing a Claude Code / Copilot CLI plugin marketplace.", diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 8452f6f..8bdc15a 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -17,7 +17,6 @@ A parallel workstream (not a numbered chunk) establishing the plugin distributio **Phase 1 — marketplace scaffold and kyberforge plugin** ✅ complete (2026-06-20) - `.claude-plugin/marketplace.json` and `.github/plugin/marketplace.json` — dual-path marketplace manifest (Claude Code + Copilot CLI) -- `plugins/hello-world/` — demo plugin validating scaffolding - `plugins/kyberforge/` — marketplace management toolkit: `create-plugin`, `marketplace-architect`, `write-skill`, `write-eval` skills, bundled template (`assets/plugin-template/`), reference docs, scripts, and evals - `templates/plugin/` removed — bundled into `kyberforge` plugin; `docs/research/plugin-marketplace-architecture.md` moved into `plugins/kyberforge/docs/` - Skills `write-eval`, `write-skill`, `create-plugin`, `marketplace-architect` removed from `.agents/skills/` — now only available via `kyberforge` plugin install diff --git a/docs/spec/architecture.md b/docs/spec/architecture.md index 75bb4d0..81a65e8 100644 --- a/docs/spec/architecture.md +++ b/docs/spec/architecture.md @@ -31,7 +31,6 @@ ai-development/ ├── .github/plugin/ │ └── marketplace.json # Mirror of .claude-plugin/marketplace.json for Copilot CLI canonical path ├── plugins/ # Installable plugin units (each is a self-contained deployable) -│ ├── hello-world/ # Demo plugin validating marketplace scaffolding │ └── kyberforge/ # Marketplace management toolkit (create-plugin, marketplace-architect, write-skill, write-eval) ├── core/ # Provider-agnostic source of truth │ ├── AGENTS.md # Global always-on rules (Communication + Behavior); deployed to ~/.agents/AGENTS.md diff --git a/plugins/hello-world/.claude-plugin/plugin.json b/plugins/hello-world/.claude-plugin/plugin.json deleted file mode 100644 index 33e1b5a..0000000 --- a/plugins/hello-world/.claude-plugin/plugin.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "hello-world", - "displayName": "Hello World", - "description": "A complete scaffold demonstrating every cross-compatible plugin feature for the holocron marketplace.", - "author": { "name": "Your Name", "url": "https://github.com/your-org/ai-development" }, - "homepage": "https://github.com/your-org/ai-development", - "license": "MIT", - "keywords": ["scaffold", "example", "holocron"] -} diff --git a/plugins/hello-world/.mcp.json b/plugins/hello-world/.mcp.json deleted file mode 100644 index 3b65e41..0000000 --- a/plugins/hello-world/.mcp.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "mcpServers": { - "hello-world": { - "type": "stdio", - "command": "node", - "args": ["${CLAUDE_PLUGIN_ROOT}/bin/mcp-server.js"] - } - } -} diff --git a/plugins/hello-world/README.md b/plugins/hello-world/README.md deleted file mode 100644 index 2bc2ac4..0000000 --- a/plugins/hello-world/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# hello-world - -Complete scaffold plugin for the **holocron** marketplace. Every cross-compatible component -is included with a working stub. Copy this directory, rename it, and replace the stubs with -your actual content. - -## Directory layout - -``` -hello-world/ -├── plugin.json # Copilot CLI manifest — declares component paths -├── .claude-plugin/ -│ └── plugin.json # Claude Code manifest — no component paths (uses defaults) -├── skills/ -│ └── hello-world/ -│ └── SKILL.md # ✅ identical for both tools -├── agents/ -│ ├── hello-world.md # Claude Code agent (no frontmatter) -│ └── hello-world.agent.md # Copilot CLI agent (YAML frontmatter + tools:) -├── hooks/ -│ └── hooks.json # Claude Code hooks (PostToolUse / PreToolUse events) -├── hooks.json # Copilot CLI hooks (session_start / session_end events) -├── .mcp.json # ✅ MCP server config — identical for both tools -└── README.md -``` - -## Cross-compatibility notes - -| Component | Claude Code path | Copilot CLI path | Portable? | -|---|---|---|---| -| Plugin manifest | `.claude-plugin/plugin.json` | `plugin.json` at root | Ship both | -| Skills | `skills//SKILL.md` | `skills//SKILL.md` | ✅ Identical | -| Agents | `agents/.md` | `agents/.agent.md` | Ship both | -| Hooks | `hooks/hooks.json` | `hooks.json` at root | Ship both | -| MCP servers | `.mcp.json` at root | `.mcp.json` at root | ✅ Identical | - -## Install via marketplace - -```bash -# Claude Code -claude plugin marketplace add /ai-development -claude plugin install hello-world@holocron - -# GitHub Copilot CLI -copilot plugin marketplace add /ai-development -copilot plugin install hello-world -``` - -## Local dev install - -```bash -# Claude Code -claude --plugin-dir ./plugins/hello-world - -# GitHub Copilot CLI -copilot plugin install ./plugins/hello-world -``` - -## Validate (Claude Code) - -```bash -claude plugin validate ./plugins/hello-world -``` - -Copilot CLI has no validate command — run `copilot plugin install ./plugins/hello-world` -and check that `/skills list` and `/agent` surface the expected entries. - -## Creating a new plugin from this scaffold - -1. Copy `plugins/hello-world/` → `plugins//` -2. Update `name` in both `plugin.json` files -3. Replace `skills/hello-world/SKILL.md` with your skill(s) -4. Replace or remove `agents/` files — only include if your plugin ships an agent -5. Replace or remove `hooks/` files — only include if your plugin reacts to events -6. Replace or remove `.mcp.json` — only include if your plugin ships an MCP server -7. Add the new plugin to `.claude-plugin/marketplace.json` -8. Run `claude plugin validate ./plugins/` diff --git a/plugins/hello-world/agents/hello-world.agent.md b/plugins/hello-world/agents/hello-world.agent.md deleted file mode 100644 index 4323f08..0000000 --- a/plugins/hello-world/agents/hello-world.agent.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: hello-world -description: A demonstration agent for the holocron marketplace scaffold. Confirms agent loading works in GitHub Copilot CLI. -tools: - - read_file - - list_directory ---- - -You are a demonstration agent included in the `hello-world` scaffold plugin for the **holocron** marketplace. - -When invoked, greet the user, confirm the agent is loaded, and list the components available in this plugin: skills (`skills/`), agents (`agents/`), hooks (`hooks.json`), and MCP servers (`.mcp.json`). - -Replace this file with your agent's actual system prompt and instructions. diff --git a/plugins/hello-world/agents/hello-world.md b/plugins/hello-world/agents/hello-world.md deleted file mode 100644 index da7f6e9..0000000 --- a/plugins/hello-world/agents/hello-world.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: hello-world -description: A demonstration agent for the holocron marketplace scaffold. Confirms agent loading works in Claude Code. ---- - -You are a demonstration agent included in the `hello-world` scaffold plugin for the **holocron** marketplace. - -When invoked, greet the user, confirm the agent is loaded, and list the components available in this plugin: skills (`skills/`), agents (`agents/`), hooks (`hooks/hooks.json`), and MCP servers (`.mcp.json`). - -Replace this file with your agent's actual system prompt and instructions. diff --git a/plugins/hello-world/bin/mcp-server.js b/plugins/hello-world/bin/mcp-server.js deleted file mode 100755 index 15cf47a..0000000 --- a/plugins/hello-world/bin/mcp-server.js +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -// Minimal MCP server — JSON-RPC 2.0 over stdio, no external dependencies. -// Exposes one tool: `say_hello`. Replace with your actual tools. - -const readline = require('readline'); - -const rl = readline.createInterface({ input: process.stdin, terminal: false }); - -function send(obj) { - process.stdout.write(JSON.stringify(obj) + '\n'); -} - -const TOOLS = [ - { - name: 'say_hello', - description: 'Say hello from the holocron marketplace hello-world plugin.', - inputSchema: { - type: 'object', - properties: { - name: { type: 'string', description: 'Name to greet (optional)' } - } - } - } -]; - -rl.on('line', (line) => { - let msg; - try { msg = JSON.parse(line); } catch { return; } - - const { method, id, params } = msg; - - if (method === 'initialize') { - send({ - jsonrpc: '2.0', id, - result: { - protocolVersion: '2024-11-05', - capabilities: { tools: {} }, - serverInfo: { name: 'hello-world', version: '1.0.0' } - } - }); - - } else if (method === 'notifications/initialized') { - // no response required - - } else if (method === 'tools/list') { - send({ jsonrpc: '2.0', id, result: { tools: TOOLS } }); - - } else if (method === 'tools/call') { - const toolName = params?.name; - const args = params?.arguments ?? {}; - - if (toolName === 'say_hello') { - const greeting = args.name - ? `Hello, ${args.name}! The holocron marketplace hello-world plugin is working.` - : 'Hello from the holocron marketplace hello-world plugin!'; - send({ jsonrpc: '2.0', id, result: { content: [{ type: 'text', text: greeting }] } }); - } else { - send({ jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown tool: ${toolName}` } }); - } - - } else if (id !== undefined) { - send({ jsonrpc: '2.0', id, error: { code: -32601, message: 'Method not found' } }); - } -}); - -process.on('SIGINT', () => process.exit(0)); -process.on('SIGTERM', () => process.exit(0)); diff --git a/plugins/hello-world/hooks.json b/plugins/hello-world/hooks.json deleted file mode 100644 index d01a9f2..0000000 --- a/plugins/hello-world/hooks.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "hooks": [ - { - "event": "session_start", - "command": "echo '[hello-world] session started'" - } - ] -} diff --git a/plugins/hello-world/hooks/hooks.json b/plugins/hello-world/hooks/hooks.json deleted file mode 100644 index c67f7cb..0000000 --- a/plugins/hello-world/hooks/hooks.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "hooks": { - "PostToolUse": [ - { - "matcher": "*", - "hooks": [ - { - "type": "command", - "command": "echo '[hello-world] PostToolUse fired'" - } - ] - } - ] - } -} diff --git a/plugins/hello-world/plugin.json b/plugins/hello-world/plugin.json deleted file mode 100644 index 50797c7..0000000 --- a/plugins/hello-world/plugin.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "hello-world", - "description": "A complete scaffold demonstrating every cross-compatible plugin feature for the holocron marketplace.", - "author": { "name": "Your Name", "email": "you@example.com" }, - "license": "MIT", - "keywords": ["scaffold", "example", "holocron"], - "agents": "agents/", - "skills": ["skills/"], - "hooks": "hooks.json", - "mcpServers": ".mcp.json" -} diff --git a/plugins/hello-world/skills/hello-world/SKILL.md b/plugins/hello-world/skills/hello-world/SKILL.md deleted file mode 100644 index 966ff92..0000000 --- a/plugins/hello-world/skills/hello-world/SKILL.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: hello-world -description: Prove the holocron marketplace plugin is installed and working. Use when the user says "/hello-world", "test plugin install", or "is the holocron marketplace working". Do NOT use for any real task. -metadata: - category: cross-cutting ---- - -Respond with exactly: - -> Hello from the **holocron** marketplace! The `hello-world` plugin is installed and working. -> Run `claude plugin list` to see all installed plugins. - -Nothing else. diff --git a/plugins/hello-world/tests/test_mcp_server.sh b/plugins/hello-world/tests/test_mcp_server.sh deleted file mode 100755 index 42ea5cd..0000000 --- a/plugins/hello-world/tests/test_mcp_server.sh +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env bash -# Tests for plugins/hello-world/bin/mcp-server.js -# Protocol: JSON-RPC 2.0 over stdio. Tests send input lines and assert on stdout. -set -euo pipefail - -SERVER="$(cd "$(dirname "$0")/../bin" && pwd)/mcp-server.js" -PASS=0; FAIL=0 - -# ── helpers ────────────────────────────────────────────────────────────────── - -assert_contains() { - local label="$1" expected="$2" actual="$3" - if echo "$actual" | grep -qF -- "$expected"; then - echo " PASS: $label" - PASS=$((PASS+1)) - else - echo " FAIL: $label" - echo " expected to contain: $expected" - echo " got: $actual" - FAIL=$((FAIL+1)) - fi -} - -assert_not_contains() { - local label="$1" unexpected="$2" actual="$3" - if echo "$actual" | grep -qF -- "$unexpected"; then - echo " FAIL: $label" - echo " expected NOT to contain: $unexpected" - echo " got: $actual" - FAIL=$((FAIL+1)) - else - echo " PASS: $label" - PASS=$((PASS+1)) - fi -} - -# Send newline-separated JSON lines to the server, capture stdout -run_server() { - printf '%s\n' "$@" | node "$SERVER" 2>/dev/null -} - -# ── tests ──────────────────────────────────────────────────────────────────── - -echo "initialize" -OUT=$(run_server '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{}},"id":1}') -assert_contains "returns protocolVersion" '"protocolVersion":"2024-11-05"' "$OUT" -assert_contains "returns capabilities" '"capabilities"' "$OUT" -assert_contains "returns serverInfo name" '"name":"hello-world"' "$OUT" -assert_contains "returns serverInfo version" '"version":"1.0.0"' "$OUT" -assert_contains "echoes id" '"id":1' "$OUT" - -echo "notifications/initialized" -OUT=$(run_server '{"jsonrpc":"2.0","method":"notifications/initialized"}') -assert_not_contains "no response for notification" '"jsonrpc"' "$OUT" - -echo "tools/list" -OUT=$(run_server \ - '{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}' \ - '{"jsonrpc":"2.0","method":"tools/list","id":2}') -assert_contains "lists say_hello tool" '"name":"say_hello"' "$OUT" -assert_contains "tool has description" '"description"' "$OUT" -assert_contains "tool has inputSchema" '"inputSchema"' "$OUT" -assert_contains "schema has name property" '"name"' "$OUT" -assert_contains "echoes id 2" '"id":2' "$OUT" - -echo "tools/call say_hello — no args" -OUT=$(run_server \ - '{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}' \ - '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"say_hello","arguments":{}},"id":3}') -assert_contains "generic greeting content" 'Hello from the holocron' "$OUT" -assert_contains "response has content array" '"content"' "$OUT" -assert_contains "content type is text" '"type":"text"' "$OUT" - -echo "tools/call say_hello — with name" -OUT=$(run_server \ - '{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}' \ - '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"say_hello","arguments":{"name":"Obi-Wan"}},"id":4}') -assert_contains "personalised greeting" 'Hello, Obi-Wan!' "$OUT" -assert_not_contains "not generic greeting" 'Hello from the holocron' "$OUT" - -echo "tools/call — unknown tool" -OUT=$(run_server \ - '{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}' \ - '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"does_not_exist","arguments":{}},"id":5}') -assert_contains "error code -32601" '"code":-32601' "$OUT" -assert_contains "error field present" '"error"' "$OUT" - -echo "unknown method with id" -OUT=$(run_server \ - '{"jsonrpc":"2.0","method":"no_such_method","id":6}') -assert_contains "error returned" '"error"' "$OUT" -assert_contains "method not found code" '"code":-32601' "$OUT" -assert_contains "echoes id 6" '"id":6' "$OUT" - -echo "invalid JSON — no crash, process continues" -OUT=$(run_server \ - 'this is not json' \ - '{"jsonrpc":"2.0","method":"tools/list","id":7}') -assert_contains "valid request after bad input succeeds" '"id":7' "$OUT" -assert_not_contains "no error for bad json line" '"error"' "$OUT" - -# ── summary ────────────────────────────────────────────────────────────────── - -echo "" -echo "Results: $PASS passed, $FAIL failed" -[[ $FAIL -eq 0 ]] && exit 0 || exit 1