@smicolon/ai-kit 0.3.2 → 0.4.1
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.
- package/README.md +73 -40
- package/dist/index.js +312 -127
- package/package.json +5 -5
- package/.claude-plugin/marketplace.json +0 -369
- package/packs/architect/CHANGELOG.md +0 -17
- package/packs/architect/README.md +0 -58
- package/packs/architect/agents/system-architect.md +0 -768
- package/packs/architect/commands/diagram-create.md +0 -300
- package/packs/better-auth/.mcp.json +0 -14
- package/packs/better-auth/CHANGELOG.md +0 -26
- package/packs/better-auth/README.md +0 -125
- package/packs/better-auth/agents/auth-architect.md +0 -278
- package/packs/better-auth/commands/auth-provider-add.md +0 -265
- package/packs/better-auth/commands/auth-setup.md +0 -298
- package/packs/better-auth/skills/auth-security/SKILL.md +0 -425
- package/packs/better-auth/skills/better-auth-patterns/SKILL.md +0 -455
- package/packs/dev-loop/CHANGELOG.md +0 -69
- package/packs/dev-loop/README.md +0 -155
- package/packs/dev-loop/commands/cancel-dev.md +0 -21
- package/packs/dev-loop/commands/dev-loop.md +0 -72
- package/packs/dev-loop/commands/dev-plan.md +0 -351
- package/packs/dev-loop/hooks/hooks.json +0 -15
- package/packs/dev-loop/hooks/stop-hook.sh +0 -178
- package/packs/dev-loop/scripts/setup-dev-loop.sh +0 -194
- package/packs/dev-loop/skills/tdd-planner/SKILL.md +0 -249
- package/packs/dev-loop/skills/tdd-planner/references/framework-patterns.md +0 -874
- package/packs/dev-loop/skills/tdd-planner/references/good-example.md +0 -260
- package/packs/dev-loop/skills/tdd-planner/references/plan-template.md +0 -275
- package/packs/django/CHANGELOG.md +0 -39
- package/packs/django/README.md +0 -92
- package/packs/django/agents/django-architect.md +0 -182
- package/packs/django/agents/django-builder.md +0 -250
- package/packs/django/agents/django-feature-based.md +0 -420
- package/packs/django/agents/django-reviewer.md +0 -253
- package/packs/django/agents/django-tester.md +0 -230
- package/packs/django/commands/api-endpoint.md +0 -285
- package/packs/django/commands/model-create.md +0 -178
- package/packs/django/commands/test-generate.md +0 -325
- package/packs/django/rules/migrations.md +0 -138
- package/packs/django/rules/models.md +0 -167
- package/packs/django/rules/serializers.md +0 -126
- package/packs/django/rules/services.md +0 -131
- package/packs/django/rules/tests.md +0 -140
- package/packs/django/rules/views.md +0 -102
- package/packs/django/skills/import-convention-enforcer/SKILL.md +0 -226
- package/packs/django/skills/import-convention-enforcer/patterns/django-imports.md +0 -343
- package/packs/django/skills/migration-safety-checker/SKILL.md +0 -375
- package/packs/django/skills/model-entity-validator/SKILL.md +0 -298
- package/packs/django/skills/performance-optimizer/SKILL.md +0 -447
- package/packs/django/skills/red-phase-verifier/SKILL.md +0 -180
- package/packs/django/skills/security-first-validator/SKILL.md +0 -435
- package/packs/django/skills/test-coverage-advisor/SKILL.md +0 -394
- package/packs/django/skills/test-validity-checker/SKILL.md +0 -194
- package/packs/failure-log/CHANGELOG.md +0 -20
- package/packs/failure-log/README.md +0 -168
- package/packs/failure-log/commands/failure-add.md +0 -106
- package/packs/failure-log/commands/failure-list.md +0 -89
- package/packs/failure-log/hooks/hooks.json +0 -16
- package/packs/failure-log/hooks/scripts/inject-failures.sh +0 -64
- package/packs/failure-log/skills/failure-log-manager/SKILL.md +0 -164
- package/packs/flutter/CHANGELOG.md +0 -19
- package/packs/flutter/README.md +0 -170
- package/packs/flutter/agents/flutter-architect.md +0 -166
- package/packs/flutter/agents/flutter-builder.md +0 -303
- package/packs/flutter/agents/release-manager.md +0 -355
- package/packs/flutter/commands/fastlane-setup.md +0 -188
- package/packs/flutter/commands/flutter-build.md +0 -90
- package/packs/flutter/commands/flutter-deploy.md +0 -133
- package/packs/flutter/commands/flutter-test.md +0 -117
- package/packs/flutter/commands/signing-setup.md +0 -209
- package/packs/flutter/hooks/hooks.json +0 -17
- package/packs/flutter/skills/fastlane-knowledge/SKILL.md +0 -193
- package/packs/flutter/skills/flutter-architecture/SKILL.md +0 -127
- package/packs/flutter/skills/store-publishing/SKILL.md +0 -163
- package/packs/hono/CHANGELOG.md +0 -19
- package/packs/hono/README.md +0 -143
- package/packs/hono/agents/hono-architect.md +0 -240
- package/packs/hono/agents/hono-builder.md +0 -285
- package/packs/hono/agents/hono-reviewer.md +0 -279
- package/packs/hono/agents/hono-tester.md +0 -346
- package/packs/hono/commands/middleware-create.md +0 -223
- package/packs/hono/commands/project-init.md +0 -306
- package/packs/hono/commands/route-create.md +0 -153
- package/packs/hono/commands/rpc-client.md +0 -263
- package/packs/hono/skills/cloudflare-bindings/SKILL.md +0 -408
- package/packs/hono/skills/hono-patterns/SKILL.md +0 -309
- package/packs/hono/skills/rpc-typesafe/SKILL.md +0 -388
- package/packs/hono/skills/zod-validation/SKILL.md +0 -332
- package/packs/nestjs/CHANGELOG.md +0 -29
- package/packs/nestjs/README.md +0 -75
- package/packs/nestjs/agents/nestjs-architect.md +0 -402
- package/packs/nestjs/agents/nestjs-builder.md +0 -301
- package/packs/nestjs/agents/nestjs-tester.md +0 -437
- package/packs/nestjs/commands/module-create.md +0 -369
- package/packs/nestjs/rules/controllers.md +0 -92
- package/packs/nestjs/rules/dto.md +0 -124
- package/packs/nestjs/rules/entities.md +0 -102
- package/packs/nestjs/rules/services.md +0 -106
- package/packs/nestjs/skills/barrel-export-manager/SKILL.md +0 -389
- package/packs/nestjs/skills/import-convention-enforcer/SKILL.md +0 -365
- package/packs/nextjs/CHANGELOG.md +0 -36
- package/packs/nextjs/README.md +0 -76
- package/packs/nextjs/agents/frontend-tester.md +0 -680
- package/packs/nextjs/agents/frontend-visual.md +0 -820
- package/packs/nextjs/agents/nextjs-architect.md +0 -331
- package/packs/nextjs/agents/nextjs-modular.md +0 -433
- package/packs/nextjs/commands/component-create.md +0 -398
- package/packs/nextjs/rules/api-routes.md +0 -129
- package/packs/nextjs/rules/components.md +0 -106
- package/packs/nextjs/rules/hooks.md +0 -132
- package/packs/nextjs/skills/accessibility-validator/SKILL.md +0 -445
- package/packs/nextjs/skills/import-convention-enforcer/SKILL.md +0 -399
- package/packs/nextjs/skills/react-form-validator/SKILL.md +0 -569
- package/packs/nuxtjs/CHANGELOG.md +0 -30
- package/packs/nuxtjs/README.md +0 -56
- package/packs/nuxtjs/agents/frontend-tester.md +0 -680
- package/packs/nuxtjs/agents/frontend-visual.md +0 -820
- package/packs/nuxtjs/agents/nuxtjs-architect.md +0 -537
- package/packs/nuxtjs/commands/component-create.md +0 -223
- package/packs/nuxtjs/rules/components.md +0 -101
- package/packs/nuxtjs/rules/composables.md +0 -118
- package/packs/nuxtjs/rules/server-routes.md +0 -127
- package/packs/nuxtjs/skills/accessibility-validator/SKILL.md +0 -183
- package/packs/nuxtjs/skills/import-convention-enforcer/SKILL.md +0 -196
- package/packs/nuxtjs/skills/veevalidate-form-validator/SKILL.md +0 -190
- package/packs/onboard/CHANGELOG.md +0 -22
- package/packs/onboard/README.md +0 -103
- package/packs/onboard/agents/onboard-guide.md +0 -118
- package/packs/onboard/commands/onboard.md +0 -313
- package/packs/onboard/skills/onboard-context-provider/SKILL.md +0 -98
- package/packs/tanstack-router/CHANGELOG.md +0 -30
- package/packs/tanstack-router/README.md +0 -113
- package/packs/tanstack-router/agents/tanstack-architect.md +0 -173
- package/packs/tanstack-router/agents/tanstack-builder.md +0 -360
- package/packs/tanstack-router/agents/tanstack-tester.md +0 -454
- package/packs/tanstack-router/commands/form-create.md +0 -313
- package/packs/tanstack-router/commands/query-create.md +0 -263
- package/packs/tanstack-router/commands/route-create.md +0 -190
- package/packs/tanstack-router/commands/table-create.md +0 -413
- package/packs/tanstack-router/skills/ai-patterns/SKILL.md +0 -370
- package/packs/tanstack-router/skills/db-patterns/SKILL.md +0 -346
- package/packs/tanstack-router/skills/devtools-patterns/SKILL.md +0 -415
- package/packs/tanstack-router/skills/form-patterns/SKILL.md +0 -425
- package/packs/tanstack-router/skills/pacer-patterns/SKILL.md +0 -341
- package/packs/tanstack-router/skills/query-patterns/SKILL.md +0 -359
- package/packs/tanstack-router/skills/router-patterns/SKILL.md +0 -285
- package/packs/tanstack-router/skills/store-patterns/SKILL.md +0 -351
- package/packs/tanstack-router/skills/table-patterns/SKILL.md +0 -531
- package/packs/tanstack-router/skills/tanstack-conventions/SKILL.md +0 -428
- package/packs/tanstack-router/skills/virtual-patterns/SKILL.md +0 -490
- package/packs/worktree/CHANGELOG.md +0 -45
- package/packs/worktree/README.md +0 -219
- package/packs/worktree/commands/wt.md +0 -93
- package/packs/worktree/scripts/wt.sh +0 -957
- package/packs/worktree/skills/worktree-manager/SKILL.md +0 -113
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: vue-accessibility-validator
|
|
3
|
-
description: Automatically validate Vue 3/Nuxt.js components meet WCAG 2.1 AA standards. Use when creating components, forms, buttons, modals, navigation, or any interactive UI elements.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Vue Accessibility Validator
|
|
7
|
-
|
|
8
|
-
## Activation Triggers
|
|
9
|
-
|
|
10
|
-
This skill activates when:
|
|
11
|
-
- Creating Vue components
|
|
12
|
-
- Writing template sections
|
|
13
|
-
- Adding interactive elements
|
|
14
|
-
- Mentioning "component", "form", "button"
|
|
15
|
-
|
|
16
|
-
## Checks
|
|
17
|
-
|
|
18
|
-
### Check 1: Semantic HTML
|
|
19
|
-
|
|
20
|
-
```vue
|
|
21
|
-
<!-- WRONG -->
|
|
22
|
-
<div @click="handleAction">Click me</div>
|
|
23
|
-
|
|
24
|
-
<!-- CORRECT -->
|
|
25
|
-
<button type="button" @click="handleAction">
|
|
26
|
-
Click me
|
|
27
|
-
</button>
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
**Rule**: Interactive elements must use semantic HTML (`<button>`, `<a>`, `<input>`) not generic `<div>` or `<span>`.
|
|
31
|
-
|
|
32
|
-
### Check 2: Form Labels
|
|
33
|
-
|
|
34
|
-
```vue
|
|
35
|
-
<!-- WRONG -->
|
|
36
|
-
<input v-model="email" placeholder="Email" />
|
|
37
|
-
|
|
38
|
-
<!-- CORRECT -->
|
|
39
|
-
<label for="email">Email</label>
|
|
40
|
-
<input id="email" v-model="email" aria-describedby="email-hint" />
|
|
41
|
-
<span id="email-hint">Your work email address</span>
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
**Rule**: All form inputs must have associated labels or aria-label.
|
|
45
|
-
|
|
46
|
-
### Check 3: Keyboard Navigation
|
|
47
|
-
|
|
48
|
-
```vue
|
|
49
|
-
<!-- WRONG - Only mouse -->
|
|
50
|
-
<div @click="toggle" class="dropdown">
|
|
51
|
-
|
|
52
|
-
<!-- CORRECT - Keyboard accessible -->
|
|
53
|
-
<button
|
|
54
|
-
type="button"
|
|
55
|
-
@click="toggle"
|
|
56
|
-
@keydown.enter="toggle"
|
|
57
|
-
@keydown.space.prevent="toggle"
|
|
58
|
-
:aria-expanded="isOpen"
|
|
59
|
-
aria-haspopup="listbox"
|
|
60
|
-
>
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
**Rule**: All interactive elements must be keyboard accessible.
|
|
64
|
-
|
|
65
|
-
### Check 4: Focus Management
|
|
66
|
-
|
|
67
|
-
```vue
|
|
68
|
-
<!-- Modal with focus trap -->
|
|
69
|
-
<template>
|
|
70
|
-
<div
|
|
71
|
-
v-if="isOpen"
|
|
72
|
-
role="dialog"
|
|
73
|
-
aria-modal="true"
|
|
74
|
-
aria-labelledby="modal-title"
|
|
75
|
-
@keydown.escape="close"
|
|
76
|
-
>
|
|
77
|
-
<h2 id="modal-title">Modal Title</h2>
|
|
78
|
-
<!-- Focus trapped inside -->
|
|
79
|
-
<button ref="closeButton" @click="close">Close</button>
|
|
80
|
-
</div>
|
|
81
|
-
</template>
|
|
82
|
-
|
|
83
|
-
<script setup lang="ts">
|
|
84
|
-
import { nextTick, ref, watch } from 'vue'
|
|
85
|
-
|
|
86
|
-
const closeButton = ref<HTMLButtonElement>()
|
|
87
|
-
|
|
88
|
-
watch(isOpen, async (open) => {
|
|
89
|
-
if (open) {
|
|
90
|
-
await nextTick()
|
|
91
|
-
closeButton.value?.focus()
|
|
92
|
-
}
|
|
93
|
-
})
|
|
94
|
-
</script>
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### Check 5: Image Alt Text
|
|
98
|
-
|
|
99
|
-
```vue
|
|
100
|
-
<!-- WRONG -->
|
|
101
|
-
<img :src="product.image" />
|
|
102
|
-
|
|
103
|
-
<!-- CORRECT - Informative image -->
|
|
104
|
-
<img :src="product.image" :alt="product.name" />
|
|
105
|
-
|
|
106
|
-
<!-- CORRECT - Decorative image -->
|
|
107
|
-
<img :src="decorativePattern" alt="" role="presentation" />
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Check 6: Color Contrast
|
|
111
|
-
|
|
112
|
-
Ensure 4.5:1 ratio for normal text, 3:1 for large text.
|
|
113
|
-
|
|
114
|
-
```vue
|
|
115
|
-
<!-- Use Tailwind classes that meet contrast -->
|
|
116
|
-
<p class="text-gray-700 bg-white">Readable text</p>
|
|
117
|
-
|
|
118
|
-
<!-- WRONG - Low contrast -->
|
|
119
|
-
<p class="text-gray-400 bg-white">Hard to read</p>
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Check 7: ARIA Attributes
|
|
123
|
-
|
|
124
|
-
```vue
|
|
125
|
-
<!-- Loading state -->
|
|
126
|
-
<button :aria-busy="isLoading" :disabled="isLoading">
|
|
127
|
-
<span v-if="isLoading" aria-live="polite">Loading...</span>
|
|
128
|
-
<span v-else>Submit</span>
|
|
129
|
-
</button>
|
|
130
|
-
|
|
131
|
-
<!-- Expandable section -->
|
|
132
|
-
<button
|
|
133
|
-
:aria-expanded="isExpanded"
|
|
134
|
-
:aria-controls="panelId"
|
|
135
|
-
@click="toggle"
|
|
136
|
-
>
|
|
137
|
-
Show Details
|
|
138
|
-
</button>
|
|
139
|
-
<div :id="panelId" v-show="isExpanded">
|
|
140
|
-
Details content
|
|
141
|
-
</div>
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
## Auto-Fix Actions
|
|
145
|
-
|
|
146
|
-
When issues detected:
|
|
147
|
-
|
|
148
|
-
1. **div with @click** -> Convert to `<button type="button">`
|
|
149
|
-
2. **Missing label** -> Add `<label>` or `aria-label`
|
|
150
|
-
3. **Missing keyboard handler** -> Add `@keydown` handlers
|
|
151
|
-
4. **Missing ARIA** -> Add appropriate ARIA attributes
|
|
152
|
-
5. **Missing alt** -> Prompt for alt text
|
|
153
|
-
|
|
154
|
-
## Validation Report
|
|
155
|
-
|
|
156
|
-
```
|
|
157
|
-
ACCESSIBILITY VALIDATION
|
|
158
|
-
|
|
159
|
-
File: components/ProductCard.vue
|
|
160
|
-
|
|
161
|
-
Semantic HTML: Using button elements
|
|
162
|
-
Form labels: All inputs labeled
|
|
163
|
-
Keyboard nav: Tab order correct
|
|
164
|
-
Focus management: Modal traps focus
|
|
165
|
-
Image alt text: All images have alt
|
|
166
|
-
|
|
167
|
-
Issues:
|
|
168
|
-
Line 45: <div @click> should be <button>
|
|
169
|
-
Line 72: Input missing aria-describedby for error
|
|
170
|
-
|
|
171
|
-
Summary: 2 issues to fix
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
## WCAG 2.1 AA Checklist
|
|
175
|
-
|
|
176
|
-
- [ ] 1.1.1 Non-text Content: Alt text for images
|
|
177
|
-
- [ ] 1.3.1 Info and Relationships: Semantic markup
|
|
178
|
-
- [ ] 1.4.3 Contrast: 4.5:1 minimum
|
|
179
|
-
- [ ] 2.1.1 Keyboard: All functionality accessible
|
|
180
|
-
- [ ] 2.4.3 Focus Order: Logical tab sequence
|
|
181
|
-
- [ ] 2.4.7 Focus Visible: Focus indicators
|
|
182
|
-
- [ ] 3.3.2 Labels: Form inputs labeled
|
|
183
|
-
- [ ] 4.1.2 Name, Role, Value: ARIA correct
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: nuxtjs-import-enforcer
|
|
3
|
-
description: Automatically enforce consistent import patterns using Nuxt.js ~/ path aliases and proper organization. Use when writing imports, creating new Vue/TS files, or organizing code structure.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Nuxt.js Import Convention Enforcer
|
|
7
|
-
|
|
8
|
-
## Activation Triggers
|
|
9
|
-
|
|
10
|
-
This skill activates when:
|
|
11
|
-
- Writing imports in Vue/TS files
|
|
12
|
-
- Creating new files
|
|
13
|
-
- Modifying existing files with imports
|
|
14
|
-
|
|
15
|
-
## Import Order
|
|
16
|
-
|
|
17
|
-
1. Vue/Nuxt built-ins (usually auto-imported)
|
|
18
|
-
2. Third-party packages
|
|
19
|
-
3. Composables (auto-imported from ~/composables/)
|
|
20
|
-
4. Components (auto-imported from ~/components/)
|
|
21
|
-
5. Types
|
|
22
|
-
|
|
23
|
-
## Pattern
|
|
24
|
-
|
|
25
|
-
```vue
|
|
26
|
-
<script setup lang="ts">
|
|
27
|
-
// 1. Vue (only if explicitly needed - usually auto-imported)
|
|
28
|
-
import { ref, computed, watch } from 'vue'
|
|
29
|
-
|
|
30
|
-
// 2. Third-party
|
|
31
|
-
import { z } from 'zod'
|
|
32
|
-
import dayjs from 'dayjs'
|
|
33
|
-
|
|
34
|
-
// 3. Composables (only if not auto-imported)
|
|
35
|
-
import { useAuth } from '~/composables/useAuth'
|
|
36
|
-
|
|
37
|
-
// 4. Types
|
|
38
|
-
import type { User } from '~/types/user'
|
|
39
|
-
|
|
40
|
-
// Implementation
|
|
41
|
-
const user = ref<User | null>(null)
|
|
42
|
-
</script>
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Path Aliases
|
|
46
|
-
|
|
47
|
-
```typescript
|
|
48
|
-
// CORRECT - Use ~/ alias
|
|
49
|
-
import { useAuth } from '~/composables/useAuth'
|
|
50
|
-
import type { User } from '~/types/user'
|
|
51
|
-
import { formatDate } from '~/utils/date'
|
|
52
|
-
|
|
53
|
-
// WRONG - Relative imports
|
|
54
|
-
import { useAuth } from '../../../composables/useAuth'
|
|
55
|
-
|
|
56
|
-
// WRONG - @ alias (use ~/ for Nuxt)
|
|
57
|
-
import { useAuth } from '@/composables/useAuth'
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
## Auto-Import Awareness
|
|
61
|
-
|
|
62
|
-
Nuxt auto-imports these - DON'T import explicitly:
|
|
63
|
-
|
|
64
|
-
### Vue Composition API
|
|
65
|
-
```typescript
|
|
66
|
-
// DON'T import - auto-imported
|
|
67
|
-
ref, reactive, computed, watch, watchEffect, toRef, toRefs
|
|
68
|
-
onMounted, onUnmounted, onBeforeMount, onBeforeUnmount
|
|
69
|
-
provide, inject
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### Nuxt Composables
|
|
73
|
-
```typescript
|
|
74
|
-
// DON'T import - auto-imported
|
|
75
|
-
useFetch, useAsyncData, useLazyFetch, useLazyAsyncData
|
|
76
|
-
useState, useCookie, useHead, useSeoMeta
|
|
77
|
-
useRoute, useRouter, useRuntimeConfig
|
|
78
|
-
navigateTo, abortNavigation
|
|
79
|
-
definePageMeta, defineNuxtComponent
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Components
|
|
83
|
-
```typescript
|
|
84
|
-
// DON'T import - auto-imported from ~/components/
|
|
85
|
-
// Just use directly in template
|
|
86
|
-
<MyComponent />
|
|
87
|
-
<BaseButton />
|
|
88
|
-
<ui-card />
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## Detection Rules
|
|
92
|
-
|
|
93
|
-
### Rule 1: Unnecessary Vue Imports
|
|
94
|
-
|
|
95
|
-
```typescript
|
|
96
|
-
// WRONG
|
|
97
|
-
import { ref, computed } from 'vue'
|
|
98
|
-
|
|
99
|
-
// CORRECT - Just use directly
|
|
100
|
-
const count = ref(0)
|
|
101
|
-
const doubled = computed(() => count.value * 2)
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
**Action**: Remove unnecessary imports, use auto-imported functions
|
|
105
|
-
|
|
106
|
-
### Rule 2: Unnecessary Nuxt Imports
|
|
107
|
-
|
|
108
|
-
```typescript
|
|
109
|
-
// WRONG
|
|
110
|
-
import { useFetch } from '#app'
|
|
111
|
-
import { useRoute } from 'vue-router'
|
|
112
|
-
|
|
113
|
-
// CORRECT - Just use directly
|
|
114
|
-
const { data } = await useFetch('/api/users')
|
|
115
|
-
const route = useRoute()
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
**Action**: Remove unnecessary imports
|
|
119
|
-
|
|
120
|
-
### Rule 3: Component Imports
|
|
121
|
-
|
|
122
|
-
```vue
|
|
123
|
-
<!-- WRONG -->
|
|
124
|
-
<script setup>
|
|
125
|
-
import MyComponent from '~/components/MyComponent.vue'
|
|
126
|
-
</script>
|
|
127
|
-
<template>
|
|
128
|
-
<MyComponent />
|
|
129
|
-
</template>
|
|
130
|
-
|
|
131
|
-
<!-- CORRECT - Auto-imported -->
|
|
132
|
-
<script setup>
|
|
133
|
-
// No import needed
|
|
134
|
-
</script>
|
|
135
|
-
<template>
|
|
136
|
-
<MyComponent />
|
|
137
|
-
</template>
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
### Rule 4: Relative Import Detection
|
|
141
|
-
|
|
142
|
-
```typescript
|
|
143
|
-
// WRONG
|
|
144
|
-
import { formatDate } from '../utils/date'
|
|
145
|
-
import { User } from '../../types/user'
|
|
146
|
-
|
|
147
|
-
// CORRECT
|
|
148
|
-
import { formatDate } from '~/utils/date'
|
|
149
|
-
import type { User } from '~/types/user'
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
**Action**: Convert to ~/ path alias
|
|
153
|
-
|
|
154
|
-
## Auto-Fix Actions
|
|
155
|
-
|
|
156
|
-
1. **Unnecessary Vue import** -> Remove import statement
|
|
157
|
-
2. **Unnecessary Nuxt import** -> Remove import statement
|
|
158
|
-
3. **Component import** -> Remove import, verify component exists
|
|
159
|
-
4. **Relative import** -> Convert to ~/path
|
|
160
|
-
5. **@ alias** -> Convert to ~/
|
|
161
|
-
|
|
162
|
-
## Validation Report
|
|
163
|
-
|
|
164
|
-
```
|
|
165
|
-
IMPORT CONVENTION CHECK
|
|
166
|
-
|
|
167
|
-
File: pages/users/[id].vue
|
|
168
|
-
|
|
169
|
-
Import order: Correct (third-party, then local)
|
|
170
|
-
Path aliases: Using ~/
|
|
171
|
-
Auto-imports: Correctly utilized
|
|
172
|
-
|
|
173
|
-
Issues:
|
|
174
|
-
Line 3: Remove "import { ref } from 'vue'" - auto-imported
|
|
175
|
-
Line 5: Remove "import { useFetch } from '#app'" - auto-imported
|
|
176
|
-
Line 8: Convert "../utils" to "~/utils"
|
|
177
|
-
|
|
178
|
-
Auto-fix available: Apply 3 fixes
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
## Configuration
|
|
182
|
-
|
|
183
|
-
In `nuxt.config.ts`:
|
|
184
|
-
|
|
185
|
-
```typescript
|
|
186
|
-
export default defineNuxtConfig({
|
|
187
|
-
imports: {
|
|
188
|
-
// Customize auto-import dirs
|
|
189
|
-
dirs: ['composables', 'utils'],
|
|
190
|
-
},
|
|
191
|
-
components: {
|
|
192
|
-
// Customize component auto-import
|
|
193
|
-
dirs: ['~/components'],
|
|
194
|
-
},
|
|
195
|
-
})
|
|
196
|
-
```
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: veevalidate-form-validator
|
|
3
|
-
description: This skill should be used when the user asks to "create a form", "add validation", "handle form submission", "use VeeValidate", or when creating login, signup, or data entry forms in Nuxt.js/Vue 3. Enforces VeeValidate + Zod pattern.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# VeeValidate + Zod Form Validator
|
|
7
|
-
|
|
8
|
-
## Activation Triggers
|
|
9
|
-
|
|
10
|
-
This skill activates when:
|
|
11
|
-
- Creating form components
|
|
12
|
-
- Mentioning "form", "validation", "input"
|
|
13
|
-
- Writing `<form>` or v-model
|
|
14
|
-
- Handling user input
|
|
15
|
-
|
|
16
|
-
## Required Pattern
|
|
17
|
-
|
|
18
|
-
```vue
|
|
19
|
-
<script setup lang="ts">
|
|
20
|
-
import { useForm } from 'vee-validate'
|
|
21
|
-
import { toTypedSchema } from '@vee-validate/zod'
|
|
22
|
-
import { z } from 'zod'
|
|
23
|
-
|
|
24
|
-
// Define schema with Zod
|
|
25
|
-
const schema = toTypedSchema(
|
|
26
|
-
z.object({
|
|
27
|
-
email: z.string().email('Invalid email'),
|
|
28
|
-
password: z.string().min(8, 'Password too short'),
|
|
29
|
-
})
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
// Create form with VeeValidate
|
|
33
|
-
const { handleSubmit, errors, defineField } = useForm({
|
|
34
|
-
validationSchema: schema,
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
// Define reactive fields
|
|
38
|
-
const [email, emailAttrs] = defineField('email')
|
|
39
|
-
const [password, passwordAttrs] = defineField('password')
|
|
40
|
-
|
|
41
|
-
// Type-safe submit handler
|
|
42
|
-
const onSubmit = handleSubmit((values) => {
|
|
43
|
-
// values is typed: { email: string, password: string }
|
|
44
|
-
console.log(values.email, values.password)
|
|
45
|
-
})
|
|
46
|
-
</script>
|
|
47
|
-
|
|
48
|
-
<template>
|
|
49
|
-
<form @submit="onSubmit">
|
|
50
|
-
<div>
|
|
51
|
-
<label for="email">Email</label>
|
|
52
|
-
<input
|
|
53
|
-
id="email"
|
|
54
|
-
v-model="email"
|
|
55
|
-
v-bind="emailAttrs"
|
|
56
|
-
type="email"
|
|
57
|
-
aria-describedby="email-error"
|
|
58
|
-
/>
|
|
59
|
-
<span v-if="errors.email" id="email-error" class="error" role="alert">
|
|
60
|
-
{{ errors.email }}
|
|
61
|
-
</span>
|
|
62
|
-
</div>
|
|
63
|
-
|
|
64
|
-
<div>
|
|
65
|
-
<label for="password">Password</label>
|
|
66
|
-
<input
|
|
67
|
-
id="password"
|
|
68
|
-
v-model="password"
|
|
69
|
-
v-bind="passwordAttrs"
|
|
70
|
-
type="password"
|
|
71
|
-
aria-describedby="password-error"
|
|
72
|
-
/>
|
|
73
|
-
<span v-if="errors.password" id="password-error" class="error" role="alert">
|
|
74
|
-
{{ errors.password }}
|
|
75
|
-
</span>
|
|
76
|
-
</div>
|
|
77
|
-
|
|
78
|
-
<button type="submit">Submit</button>
|
|
79
|
-
</form>
|
|
80
|
-
</template>
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Forbidden Patterns
|
|
84
|
-
|
|
85
|
-
```vue
|
|
86
|
-
<!-- WRONG: No validation -->
|
|
87
|
-
<input v-model="email" />
|
|
88
|
-
<button @click="submit">Submit</button>
|
|
89
|
-
|
|
90
|
-
<!-- WRONG: Manual validation -->
|
|
91
|
-
<input v-model="email" @blur="validateEmail" />
|
|
92
|
-
|
|
93
|
-
<!-- WRONG: Template-only validation -->
|
|
94
|
-
<input v-model="email" :class="{ error: !isValidEmail }" />
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## Complex Form Example
|
|
98
|
-
|
|
99
|
-
```vue
|
|
100
|
-
<script setup lang="ts">
|
|
101
|
-
import { useForm, useFieldArray } from 'vee-validate'
|
|
102
|
-
import { toTypedSchema } from '@vee-validate/zod'
|
|
103
|
-
import { z } from 'zod'
|
|
104
|
-
|
|
105
|
-
const schema = toTypedSchema(
|
|
106
|
-
z.object({
|
|
107
|
-
name: z.string().min(1, 'Name required'),
|
|
108
|
-
email: z.string().email(),
|
|
109
|
-
role: z.enum(['admin', 'user', 'guest']),
|
|
110
|
-
skills: z.array(z.object({
|
|
111
|
-
name: z.string().min(1),
|
|
112
|
-
level: z.number().min(1).max(5),
|
|
113
|
-
})).min(1, 'At least one skill required'),
|
|
114
|
-
})
|
|
115
|
-
)
|
|
116
|
-
|
|
117
|
-
const { handleSubmit, errors, defineField, values } = useForm({
|
|
118
|
-
validationSchema: schema,
|
|
119
|
-
initialValues: {
|
|
120
|
-
name: '',
|
|
121
|
-
email: '',
|
|
122
|
-
role: 'user',
|
|
123
|
-
skills: [{ name: '', level: 1 }],
|
|
124
|
-
},
|
|
125
|
-
})
|
|
126
|
-
|
|
127
|
-
const { fields, push, remove } = useFieldArray('skills')
|
|
128
|
-
|
|
129
|
-
const [name, nameAttrs] = defineField('name')
|
|
130
|
-
const [email, emailAttrs] = defineField('email')
|
|
131
|
-
const [role, roleAttrs] = defineField('role')
|
|
132
|
-
</script>
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
## Error Display Pattern
|
|
136
|
-
|
|
137
|
-
```vue
|
|
138
|
-
<!-- Inline errors -->
|
|
139
|
-
<div class="field">
|
|
140
|
-
<label for="email">Email</label>
|
|
141
|
-
<input
|
|
142
|
-
id="email"
|
|
143
|
-
v-model="email"
|
|
144
|
-
v-bind="emailAttrs"
|
|
145
|
-
:class="{ 'border-red-500': errors.email }"
|
|
146
|
-
aria-invalid="errors.email ? 'true' : undefined"
|
|
147
|
-
aria-describedby="email-error"
|
|
148
|
-
/>
|
|
149
|
-
<Transition name="fade">
|
|
150
|
-
<p v-if="errors.email" id="email-error" class="text-red-500 text-sm" role="alert">
|
|
151
|
-
{{ errors.email }}
|
|
152
|
-
</p>
|
|
153
|
-
</Transition>
|
|
154
|
-
</div>
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
## Async Validation
|
|
158
|
-
|
|
159
|
-
```typescript
|
|
160
|
-
const schema = toTypedSchema(
|
|
161
|
-
z.object({
|
|
162
|
-
username: z.string()
|
|
163
|
-
.min(3)
|
|
164
|
-
.refine(async (val) => {
|
|
165
|
-
const response = await $fetch(`/api/check-username?q=${val}`)
|
|
166
|
-
return response.available
|
|
167
|
-
}, 'Username already taken'),
|
|
168
|
-
})
|
|
169
|
-
)
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Validation Report
|
|
173
|
-
|
|
174
|
-
```
|
|
175
|
-
FORM VALIDATION CHECK
|
|
176
|
-
|
|
177
|
-
File: components/LoginForm.vue
|
|
178
|
-
|
|
179
|
-
VeeValidate: useForm imported and used
|
|
180
|
-
Zod schema: Defined with proper types
|
|
181
|
-
Error display: Errors shown with role="alert"
|
|
182
|
-
Accessibility: Labels and aria attributes present
|
|
183
|
-
Type safety: Form values properly typed
|
|
184
|
-
|
|
185
|
-
Issues:
|
|
186
|
-
Line 23: Missing aria-describedby on password input
|
|
187
|
-
Line 34: Error message not accessible (missing role="alert")
|
|
188
|
-
|
|
189
|
-
Summary: 2 issues to fix
|
|
190
|
-
```
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to smi-onboard will be documented in this file.
|
|
4
|
-
|
|
5
|
-
## [Unreleased]
|
|
6
|
-
|
|
7
|
-
### Changed
|
|
8
|
-
- Renamed from `smi-onboard` to `onboard` as part of ai-kit migration
|
|
9
|
-
- Moved from `plugins/smi-onboard/` to `packs/onboard/`
|
|
10
|
-
|
|
11
|
-
## [0.1.0] - 2026-02-02
|
|
12
|
-
|
|
13
|
-
### Added
|
|
14
|
-
- `/onboard` command for interactive engineer onboarding
|
|
15
|
-
- `@onboard-guide` agent for ongoing personalized Q&A
|
|
16
|
-
- `onboard-context-provider` skill for background-aware assistance
|
|
17
|
-
- Auto-detection of project type and tech stack
|
|
18
|
-
- Adaptive skill assessment (3 core + conditional follow-ups)
|
|
19
|
-
- Knowledge gap analysis with priority levels
|
|
20
|
-
- Personalized explanations using analogies to engineer's background
|
|
21
|
-
- Generated artifacts: profile, cheatsheet, task plan
|
|
22
|
-
- Support for `--quick` and `--task` flags
|
package/packs/onboard/README.md
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
# onboard
|
|
2
|
-
|
|
3
|
-
Intelligent engineer onboarding that cuts ramp-up time by personalizing project guidance based on the engineer's background and first task.
|
|
4
|
-
|
|
5
|
-
## The Problem
|
|
6
|
-
|
|
7
|
-
Onboarding a new engineer typically requires:
|
|
8
|
-
- 1-2 hours of the project lead's time explaining architecture
|
|
9
|
-
- The engineer reading docs that explain things they already know
|
|
10
|
-
- Trial and error to find conventions and patterns
|
|
11
|
-
- Repeated "where does this go?" questions
|
|
12
|
-
|
|
13
|
-
## The Solution
|
|
14
|
-
|
|
15
|
-
One command: `/onboard`
|
|
16
|
-
|
|
17
|
-
- Asks 3-5 adaptive questions about the engineer's background
|
|
18
|
-
- Auto-analyzes the project (tech stack, conventions, patterns)
|
|
19
|
-
- Identifies knowledge gaps and explains only what's new
|
|
20
|
-
- Generates a personalized cheat sheet and task plan
|
|
21
|
-
|
|
22
|
-
## Installation
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
/plugin install onboard
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Usage
|
|
29
|
-
|
|
30
|
-
### First-Time Onboarding
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
/onboard
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
Interactive flow (~3-5 minutes):
|
|
37
|
-
1. Background assessment (adaptive — asks more only if gaps detected)
|
|
38
|
-
2. Automatic project analysis
|
|
39
|
-
3. Knowledge gap identification
|
|
40
|
-
4. Task-specific guidance generation
|
|
41
|
-
|
|
42
|
-
### Quick Mode
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
/onboard --quick
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Skips skill assessment. Assumes mid-level generalist.
|
|
49
|
-
|
|
50
|
-
### With Pre-specified Task
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
/onboard --task "Implement user authentication"
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
Skips the task question, jumps straight to analysis and guidance.
|
|
57
|
-
|
|
58
|
-
### Ongoing Questions
|
|
59
|
-
|
|
60
|
-
After onboarding, use the agent for follow-up questions:
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
@onboard-guide "How do I add a new API endpoint?"
|
|
64
|
-
@onboard-guide "What's the testing pattern here?"
|
|
65
|
-
@onboard-guide "Where should this file go?"
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
Answers are personalized based on your onboarding profile.
|
|
69
|
-
|
|
70
|
-
## Generated Artifacts
|
|
71
|
-
|
|
72
|
-
All saved to `.claude/` (local, gitignored):
|
|
73
|
-
|
|
74
|
-
| File | Purpose |
|
|
75
|
-
|------|---------|
|
|
76
|
-
| `onboard-profile.local.md` | Your background + knowledge gaps |
|
|
77
|
-
| `onboard-cheatsheet.local.md` | Quick reference for commands and conventions |
|
|
78
|
-
| `onboard-task-plan.local.md` | Step-by-step plan for your first task |
|
|
79
|
-
|
|
80
|
-
## How Personalization Works
|
|
81
|
-
|
|
82
|
-
The plugin maps new concepts to what you already know:
|
|
83
|
-
|
|
84
|
-
| You Know | Project Uses | You'll See |
|
|
85
|
-
|----------|-------------|------------|
|
|
86
|
-
| Django views | Next.js Server Components | "Like Django views but in JSX" |
|
|
87
|
-
| React state | Django ORM | "Like useState but for database records" |
|
|
88
|
-
| REST APIs | GraphQL | "Same data, different query language" |
|
|
89
|
-
| JavaScript | TypeScript | "Your JS + type annotations" |
|
|
90
|
-
|
|
91
|
-
Senior engineers get concise syntax-focused answers. Junior engineers get more context and "why" explanations.
|
|
92
|
-
|
|
93
|
-
## Components
|
|
94
|
-
|
|
95
|
-
| Component | Type | Purpose |
|
|
96
|
-
|-----------|------|---------|
|
|
97
|
-
| `/onboard` | Command | Interactive onboarding flow |
|
|
98
|
-
| `@onboard-guide` | Agent | Ongoing personalized Q&A |
|
|
99
|
-
| `onboard-context-provider` | Skill | Auto-personalizes explanations |
|
|
100
|
-
|
|
101
|
-
## Integration
|
|
102
|
-
|
|
103
|
-
Works with all Smicolon framework plugins. When the project uses `django`, `nextjs`, or others, the onboarding automatically includes framework-specific conventions.
|