--- description: Add TypeScript setup to a markdown-only plugin argument-hint: [plugin-name] model: claude-sonnet-4-5-20250929 allowed-tools: Bash, Write, Edit, Read, Glob --- # Upgrade Plugin to TypeScript Add TypeScript setup to a markdown-only plugin, enabling CLI tools, utilities, and testable logic. ## Instructions You are a plugin maintenance specialist. Safely upgrade plugins to TypeScript while preserving existing content. ### Input The plugin name is provided as `$1` (or `$ARGUMENTS`). ### Validation 1. **Verify plugin exists**: - Check `plugins/{name}` directory exists - If not found, show error and list available plugins 2. **Verify it's a markdown-only plugin**: - Check for absence of `tsconfig.json` - If already TypeScript, inform user and exit ### Files to Create ``` plugins/{name}/ ├── tsconfig.json ✨ CREATE └── src/ ✨ CREATE ├── index.ts ✨ CREATE └── index.test.ts ✨ CREATE ``` ### Files to Modify **package.json** - Replace stub scripts with full TypeScript scripts: Before: ```json { "scripts": { "test": "echo 'No tests'", "typecheck": "echo 'No typecheck'" } } ``` After: ```json { "scripts": { "test": "bun test --recursive", "typecheck": "tsc --noEmit", "format": "biome format --write .", "format:check": "biome format .", "lint": "biome lint .", "check": "biome check --write ." }, "devDependencies": { "@types/bun": "latest" } } ``` ### Template Content **tsconfig.json**: ```json { "extends": "../../tsconfig.base.json", "include": ["src/**/*.ts"], "exclude": ["**/node_modules/**"] } ``` **src/index.ts** - Use template from `$PLUGIN_DIR/src/templates.ts`: - Export interface for plugin result type - Export sample function with JSDoc - Ready for user to add their logic **src/index.test.ts** - Use template from `$PLUGIN_DIR/src/templates.ts`: - Import from bun:test - Basic test for sample function - Ready for user to add more tests ### Execution Steps 1. **Create tsconfig.json** 2. **Create src/ directory** 3. **Create src/index.ts** with template 4. **Create src/index.test.ts** with template 5. **Update package.json**: - Read current package.json - Add full scripts - Add devDependencies - Write updated package.json 6. **Run bun install** 7. **Run tests to verify** ### Files to Preserve Do NOT touch these: - `.claude-plugin/plugin.json` - `commands/` directory - `skills/` directory - `hooks/` directory - `mcp-servers/` directory - `.mcp.json` ### Post-Upgrade Steps ```bash cd plugins/{name} && bun install && bun test ``` ### Output Summary After upgrading: ``` Upgraded 'my-plugin' to TypeScript Created: - tsconfig.json - src/index.ts - src/index.test.ts Modified: - package.json (full scripts + devDependencies) Next steps: 1. Edit src/index.ts to add your logic 2. Add tests to src/index.test.ts 3. Run 'bun test' to verify To strip TypeScript later: /plugin-template:strip my-plugin ``` ### Error Handling - If plugin doesn't exist, list available plugins - If already TypeScript, inform user (no action needed) - If file creation fails, show error and cleanup steps - If bun install fails, show manual steps ### Example Usage ``` User: /plugin-template:upgrade my-plugin ``` Expected flow: 1. Validate plugin exists and is markdown-only 2. Create tsconfig.json 3. Create src/index.ts and src/index.test.ts 4. Update package.json with full scripts 5. Run bun install 6. Run bun test to verify 7. Show summary with next steps