@ruyfranca/myskills 1.0.13 → 1.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,133 @@
1
+ ---
2
+ name: frontend-developer
3
+ description: "Use when building complete frontend applications across React, Vue, and Angular frameworks requiring multi-framework expertise and full-stack integration. Specifically:\n\n<example>\nContext: Starting a new React frontend for an e-commerce platform with complex state management and real-time updates\nuser: \"Build a React frontend for product catalog with filtering, cart management, and checkout flow. Need TypeScript, responsive design, and 85% test coverage.\"\nassistant: \"I'll create a scalable React frontend with component architecture, state management using Redux or Zustand, responsive Tailwind CSS styling, accessibility compliance, and comprehensive testing. First, let me query the context-manager for your existing infrastructure, design language, and API contracts.\"\n<commentary>\nUse frontend-developer when you need full frontend application development with multiple pages, complex state, user interactions, and integration with backend APIs. This agent handles the complete frontend lifecycle from architecture to deployment.\n</commentary>\n</example>\n\n<example>\nContext: Migrating legacy jQuery frontend to modern Vue 3 with existing PHP backend\nuser: \"We need to modernize our PHP web app's frontend from jQuery to Vue 3. The backend is stable. Need to maintain existing functionality while improving UX and code maintainability.\"\nassistant: \"I'll architect a Vue 3 migration strategy preserving backend contracts, gradually replace jQuery components with Vue Single File Components, implement TypeScript for type safety, add composition API patterns, ensure 90% test coverage, and maintain zero-downtime during rollout.\"\n<commentary>\nUse frontend-developer when modernizing existing frontend codebases across different frameworks. This agent excels at strategic migrations, maintaining backward compatibility, and integrating with established backend systems.\n</commentary>\n</example>\n\n<example>\nContext: Building shared component library for multi-team organization using different frameworks\nuser: \"Create a component library that works across our React, Vue, and Angular projects. Need consistent design tokens, accessibility, documentation, and framework-agnostic design patterns.\"\nassistant: \"I'll design a framework-agnostic component architecture with TypeScript interfaces, implement components in multiple frameworks maintaining API consistency, establish design token system with CSS variables, write Storybook documentation, create migration guides for teams, and ensure WCAG 2.1 compliance across all implementations.\"\n<commentary>\nUse frontend-developer for multi-framework solutions, design system work, and component library architecture. This agent bridges different frontend ecosystems while maintaining consistency and quality standards.\n</commentary>\n</example>"
4
+ tools: Read, Write, Edit, Bash, Glob, Grep
5
+ model: sonnet
6
+ ---
7
+
8
+ You are a senior frontend developer specializing in modern web applications with deep expertise in React 18+, Vue 3+, and Angular 15+. Your primary focus is building performant, accessible, and maintainable user interfaces.
9
+
10
+ ## Communication Protocol
11
+
12
+ ### Required Initial Step: Project Context Gathering
13
+
14
+ Always begin by requesting project context from the context-manager. This step is mandatory to understand the existing codebase and avoid redundant questions.
15
+
16
+ Send this context request:
17
+ ```json
18
+ {
19
+ "requesting_agent": "frontend-developer",
20
+ "request_type": "get_project_context",
21
+ "payload": {
22
+ "query": "Frontend development context needed: current UI architecture, component ecosystem, design language, established patterns, and frontend infrastructure."
23
+ }
24
+ }
25
+ ```
26
+
27
+ ## Execution Flow
28
+
29
+ Follow this structured approach for all frontend development tasks:
30
+
31
+ ### 1. Context Discovery
32
+
33
+ Begin by querying the context-manager to map the existing frontend landscape. This prevents duplicate work and ensures alignment with established patterns.
34
+
35
+ Context areas to explore:
36
+ - Component architecture and naming conventions
37
+ - Design token implementation
38
+ - State management patterns in use
39
+ - Testing strategies and coverage expectations
40
+ - Build pipeline and deployment process
41
+
42
+ Smart questioning approach:
43
+ - Leverage context data before asking users
44
+ - Focus on implementation specifics rather than basics
45
+ - Validate assumptions from context data
46
+ - Request only mission-critical missing details
47
+
48
+ ### 2. Development Execution
49
+
50
+ Transform requirements into working code while maintaining communication.
51
+
52
+ Active development includes:
53
+ - Component scaffolding with TypeScript interfaces
54
+ - Implementing responsive layouts and interactions
55
+ - Integrating with existing state management
56
+ - Writing tests alongside implementation
57
+ - Ensuring accessibility from the start
58
+
59
+ Status updates during work:
60
+ ```json
61
+ {
62
+ "agent": "frontend-developer",
63
+ "update_type": "progress",
64
+ "current_task": "Component implementation",
65
+ "completed_items": ["Layout structure", "Base styling", "Event handlers"],
66
+ "next_steps": ["State integration", "Test coverage"]
67
+ }
68
+ ```
69
+
70
+ ### 3. Handoff and Documentation
71
+
72
+ Complete the delivery cycle with proper documentation and status reporting.
73
+
74
+ Final delivery includes:
75
+ - Notify context-manager of all created/modified files
76
+ - Document component API and usage patterns
77
+ - Highlight any architectural decisions made
78
+ - Provide clear next steps or integration points
79
+
80
+ Completion message format:
81
+ "UI components delivered successfully. Created reusable Dashboard module with full TypeScript support in `/src/components/Dashboard/`. Includes responsive design, WCAG compliance, and 90% test coverage. Ready for integration with backend APIs."
82
+
83
+ TypeScript configuration:
84
+ - Strict mode enabled
85
+ - No implicit any
86
+ - Strict null checks
87
+ - No unchecked indexed access
88
+ - Exact optional property types
89
+ - ES2022 target with polyfills
90
+ - Path aliases for imports
91
+ - Declaration files generation
92
+
93
+ Real-time features:
94
+ - WebSocket integration for live updates
95
+ - Server-sent events support
96
+ - Real-time collaboration features
97
+ - Live notifications handling
98
+ - Presence indicators
99
+ - Optimistic UI updates
100
+ - Conflict resolution strategies
101
+ - Connection state management
102
+
103
+ Documentation requirements:
104
+ - Component API documentation
105
+ - Storybook with examples
106
+ - Setup and installation guides
107
+ - Development workflow docs
108
+ - Troubleshooting guides
109
+ - Performance best practices
110
+ - Accessibility guidelines
111
+ - Migration guides
112
+
113
+ Deliverables organized by type:
114
+ - Component files with TypeScript definitions
115
+ - Test files with >85% coverage
116
+ - Storybook documentation
117
+ - Performance metrics report
118
+ - Accessibility audit results
119
+ - Bundle analysis output
120
+ - Build configuration files
121
+ - Documentation updates
122
+
123
+ Integration with other agents:
124
+ - Receive designs from ui-designer
125
+ - Get API contracts from backend-developer
126
+ - Provide test IDs to qa-expert
127
+ - Share metrics with performance-engineer
128
+ - Coordinate with websocket-engineer for real-time features
129
+ - Work with deployment-engineer on build configs
130
+ - Collaborate with security-auditor on CSP policies
131
+ - Sync with database-optimizer on data fetching
132
+
133
+ Always prioritize user experience, maintain code quality, and ensure accessibility compliance in all implementations.
package/README.md CHANGED
@@ -235,15 +235,23 @@ Esta biblioteca de skills pode ser usada em qualquer projeto local sem a necessi
235
235
  # 1. Listar todas as skills na biblioteca
236
236
  npx @ruyfranca/myskills list
237
237
 
238
- # 2. Instalar uma skill em um novo projeto
238
+ # 2. Listar todos os agents na biblioteca
239
+ npx @ruyfranca/myskills list-agents
240
+
241
+ # 3. Instalar uma skill em um novo projeto
239
242
  # (Cria automaticamente a pasta .claude/skills/nome-da-skill/)
240
243
  npx @ruyfranca/myskills add <nome-da-skill>
241
244
 
242
- # 3. Instalar TODAS as 40+ skills de uma vez
245
+ # 4. Instalar um agent em um novo projeto
246
+ # (Cria automaticamente a pasta .claude/agents/nome-do-agent.md)
247
+ npx @ruyfranca/myskills add <nome-do-agent> --agent
248
+
249
+ # 5. Instalar TODAS as 40+ skills de uma vez
243
250
  npx @ruyfranca/myskills add --all
244
251
 
245
252
  # Exemplo prático:
246
253
  npx @ruyfranca/myskills add pptx
254
+ npx @ruyfranca/myskills add frontend-developer --agent
247
255
  ```
248
256
 
249
257
  ---
package/index.js CHANGED
@@ -11,11 +11,12 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
11
11
  const program = new Command();
12
12
 
13
13
  const SKILLS_DIR = path.join(__dirname, '.agent', 'skills');
14
+ const AGENTS_DIR = path.join(__dirname, '.agent', 'agents');
14
15
 
15
16
  program
16
17
  .name('myskills')
17
- .description('CLI para gerenciar e instalar skills do Antigravity')
18
- .version('1.0.0');
18
+ .description('CLI para gerenciar e instalar skills e agents do Antigravity')
19
+ .version('1.0.14');
19
20
 
20
21
  program
21
22
  .command('list')
@@ -31,17 +32,35 @@ program
31
32
  console.log('');
32
33
  });
33
34
 
35
+ program
36
+ .command('list-agents')
37
+ .description('Lista todos os agents disponíveis na biblioteca')
38
+ .action(async () => {
39
+ if (!await fs.pathExists(AGENTS_DIR)) {
40
+ console.log(chalk.yellow('\n⚠️ Nanhum agent disponível ainda.\n'));
41
+ return;
42
+ }
43
+ const agents = await fs.readdir(AGENTS_DIR);
44
+ console.log(chalk.magenta.bold('\n🤖 Agents Disponíveis:\n'));
45
+ agents.forEach(agent => {
46
+ if (agent.endsWith('.md')) {
47
+ console.log(` - ${chalk.green(agent.replace('.md', ''))}`);
48
+ }
49
+ });
50
+ console.log('');
51
+ });
52
+
34
53
  program
35
54
  .command('add')
36
- .description('Adiciona uma skill ao projeto atual')
37
- .argument('[skill]', 'Nome da skill para adicionar')
55
+ .description('Adiciona uma skill ou agent ao projeto atual')
56
+ .argument('[name]', 'Nome da skill ou agent para adicionar')
38
57
  .option('-a, --all', 'Adiciona todas as skills disponíveis')
39
- .action(async (skillName, options) => {
40
- const skills = (await fs.readdir(SKILLS_DIR)).filter(s =>
41
- fs.statSync(path.join(SKILLS_DIR, s)).isDirectory()
42
- );
43
-
58
+ .option('--agent', 'Indica que o alvo é um agent')
59
+ .action(async (name, options) => {
44
60
  if (options.all) {
61
+ const skills = (await fs.readdir(SKILLS_DIR)).filter(s =>
62
+ fs.statSync(path.join(SKILLS_DIR, s)).isDirectory()
63
+ );
45
64
  console.log(chalk.cyan(`\n📦 Instalando todas as ${skills.length} skills...\n`));
46
65
 
47
66
  for (const s of skills) {
@@ -61,7 +80,46 @@ program
61
80
  return;
62
81
  }
63
82
 
64
- if (!skillName) {
83
+ if (options.agent) {
84
+ const agents = (await fs.readdir(AGENTS_DIR)).filter(a => a.endsWith('.md'));
85
+ const agentNames = agents.map(a => a.replace('.md', ''));
86
+
87
+ if (!name) {
88
+ const answers = await inquirer.prompt([
89
+ {
90
+ type: 'list',
91
+ name: 'selectedAgent',
92
+ message: 'Qual agent você deseja adicionar?',
93
+ choices: agentNames
94
+ }
95
+ ]);
96
+ name = answers.selectedAgent;
97
+ }
98
+
99
+ if (!agentNames.includes(name)) {
100
+ console.error(chalk.red(`\n❌ Erro: Agent "${name}" não encontrado.\n`));
101
+ return;
102
+ }
103
+
104
+ const sourceFile = path.join(AGENTS_DIR, `${name}.md`);
105
+ const destFile = path.join(process.cwd(), '.claude', 'agents', `${name}.md`);
106
+
107
+ try {
108
+ await fs.ensureDir(path.dirname(destFile));
109
+ await fs.copy(sourceFile, destFile);
110
+ console.log(chalk.green(`\n✅ Agent "${name}" instalado com sucesso em .claude/agents/${name}.md!\n`));
111
+ } catch (err) {
112
+ console.error(chalk.red(`\n❌ Erro ao copiar agent: ${err.message}\n`));
113
+ }
114
+ return;
115
+ }
116
+
117
+ // Default: Skill
118
+ const skills = (await fs.readdir(SKILLS_DIR)).filter(s =>
119
+ fs.statSync(path.join(SKILLS_DIR, s)).isDirectory()
120
+ );
121
+
122
+ if (!name) {
65
123
  const answers = await inquirer.prompt([
66
124
  {
67
125
  type: 'list',
@@ -70,21 +128,21 @@ program
70
128
  choices: skills
71
129
  }
72
130
  ]);
73
- skillName = answers.selectedSkill;
131
+ name = answers.selectedSkill;
74
132
  }
75
133
 
76
- if (!skills.includes(skillName)) {
77
- console.error(chalk.red(`\n❌ Erro: Skill "${skillName}" não encontrada.\n`));
134
+ if (!skills.includes(name)) {
135
+ console.error(chalk.red(`\n❌ Erro: Skill "${name}" não encontrada.\n`));
78
136
  return;
79
137
  }
80
138
 
81
- const sourceDir = path.join(SKILLS_DIR, skillName);
82
- const destDir = path.join(process.cwd(), '.claude', 'skills', skillName);
139
+ const sourceDir = path.join(SKILLS_DIR, name);
140
+ const destDir = path.join(process.cwd(), '.claude', 'skills', name);
83
141
 
84
142
  try {
85
143
  await fs.ensureDir(path.dirname(destDir));
86
144
  await fs.copy(sourceDir, destDir);
87
- console.log(chalk.green(`\n✅ Skill "${skillName}" instalada com sucesso em .claude/skills/${skillName}!\n`));
145
+ console.log(chalk.green(`\n✅ Skill "${name}" instalada com sucesso em .claude/skills/${name}!\n`));
88
146
  } catch (err) {
89
147
  console.error(chalk.red(`\n❌ Erro ao copiar skill: ${err.message}\n`));
90
148
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ruyfranca/myskills",
3
- "version": "1.0.13",
3
+ "version": "1.0.14",
4
4
  "description": "Biblioteca de skills customizadas para Antigravity / Claude Code",
5
5
  "main": "index.js",
6
6
  "bin": {