@gallopsystems/agent-skills 1.6.0 → 1.6.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 +0 -1
- package/package.json +1 -1
- package/plugins/nuxt-nitro-api/skills/nuxt-nitro-api/SKILL.md +1 -3
- package/plugins/nuxt-nitro-api/skills/nuxt-nitro-api/composables-utils.md +1 -1
- package/plugins/vue-nuxt/skills/vue-nuxt/SKILL.md +8 -4
- package/plugins/{nuxt-nitro-api/skills/nuxt-nitro-api → vue-nuxt/skills/vue-nuxt}/formatters.md +2 -1
- /package/plugins/{nuxt-nitro-api/skills/nuxt-nitro-api → vue-nuxt/skills/vue-nuxt}/page-structure.md +0 -0
package/README.md
CHANGED
|
@@ -95,7 +95,6 @@ Covers:
|
|
|
95
95
|
- useFetch vs $fetch vs useAsyncData
|
|
96
96
|
- Type inference (don't add manual types!)
|
|
97
97
|
- nuxt-auth-utils (OAuth, WebAuthn, middleware)
|
|
98
|
-
- Page structure (keep pages thin)
|
|
99
98
|
- Composables vs utils
|
|
100
99
|
- SSR + localStorage patterns
|
|
101
100
|
- Deep linking (URL params sync)
|
package/package.json
CHANGED
|
@@ -31,9 +31,7 @@ For detailed patterns, see these topic-focused reference files:
|
|
|
31
31
|
- [auth-patterns.md](./auth-patterns.md) - nuxt-auth-utils, OAuth, WebAuthn, middleware
|
|
32
32
|
- [error-handling.md](./error-handling.md) - createError (fatal), error.vue, clearError, NuxtErrorBoundary
|
|
33
33
|
- [state-management.md](./state-management.md) - useState (never a module-scope ref), clearNuxtState, callOnce
|
|
34
|
-
- [page-structure.md](./page-structure.md) - Keep pages thin, components do the work
|
|
35
34
|
- [composables-utils.md](./composables-utils.md) - composables vs utils, runtimeConfig public/private, runWithContext
|
|
36
|
-
- [formatters.md](./formatters.md) - Centralize currency/date/number formatters in useFormatters, never inline
|
|
37
35
|
- [ssr-client.md](./ssr-client.md) - SSR + localStorage, hydration, useRequestURL/Headers, useCookie, VueUse
|
|
38
36
|
- [deep-linking.md](./deep-linking.md) - URL params sync with filters and useFetch
|
|
39
37
|
- [caching.md](./caching.md) - defineCachedFunction/EventHandler, SWR, per-key invalidation (Nitro v2)
|
|
@@ -62,7 +60,7 @@ Working examples from a Nuxt project:
|
|
|
62
60
|
2. **Use h3 validation** - `getValidatedQuery()`, `readValidatedBody()` with Zod schemas
|
|
63
61
|
3. **Composables for context, utils for pure functions** - Composables access Nuxt context, utils are pure
|
|
64
62
|
4. **SSR-safe code** - Guard browser APIs with `import.meta.client` or `onMounted`
|
|
65
|
-
5. **Keep pages thin** - Pages = layout + route params + components. Components own data fetching and logic.
|
|
63
|
+
5. **Keep pages thin** - Pages = layout + route params + components. Components own data fetching and logic. (Page composition + display formatting now live in the `vue-nuxt` skill.)
|
|
66
64
|
|
|
67
65
|
## Auto-Imports Quick Reference
|
|
68
66
|
|
|
@@ -82,7 +82,7 @@ export const usePermissions = () => {
|
|
|
82
82
|
> **Formatters belong in one shared place.** The examples below show util *placement*,
|
|
83
83
|
> not where to call formatters from. Never define a currency/date/number formatter inline
|
|
84
84
|
> at the call site — centralize them in `useFormatters` or a shared util, and prefer
|
|
85
|
-
> VueUse / date-fns over hand-rolling. See
|
|
85
|
+
> VueUse / date-fns over hand-rolling. See the `vue-nuxt` skill's `formatters.md`.
|
|
86
86
|
|
|
87
87
|
```typescript
|
|
88
88
|
// utils/formatting.ts
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vue-nuxt
|
|
3
|
-
description: Author Vue 3 components inside a Nuxt 4 app. Covers Nuxt auto-import rules, component authoring (props/emits/withDefaults/generics), v-model/defineModel, reactivity, when watch is a code smell, and Vue-shaped template idioms.
|
|
3
|
+
description: Author Vue 3 components inside a Nuxt 4 app. Covers Nuxt auto-import rules, component authoring (props/emits/withDefaults/generics), v-model/defineModel, slots, composables, reactivity, when watch is a code smell, page structure, display formatting, and Vue-shaped template idioms.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Vue-in-Nuxt component authoring
|
|
7
7
|
|
|
8
8
|
Patterns for writing Vue 3 `<script setup>` components inside a Nuxt 4 app. This
|
|
9
9
|
is the **frontend authoring** slice — the data layer (`useFetch`/`$fetch`, SSR
|
|
10
|
-
storage, hydration, `definePageMeta`/auth
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
storage, hydration, `definePageMeta`/auth) lives in the `nuxt-nitro-api` skill;
|
|
11
|
+
Volt/PrimeVue styling and dark mode live in `volt-primevue`. This skill
|
|
12
|
+
cross-links to those rather than restating them.
|
|
13
13
|
|
|
14
14
|
## When to Use This Skill
|
|
15
15
|
|
|
@@ -19,6 +19,8 @@ storage, hydration, `definePageMeta`/auth, formatters) lives in the
|
|
|
19
19
|
- Wiring `v-model` on a component
|
|
20
20
|
- Designing a component's content API — props vs slots, named/scoped slots
|
|
21
21
|
- Authoring a composable — argument shape, what to return, cleanup
|
|
22
|
+
- Structuring a page — thin pages, components own the data + logic
|
|
23
|
+
- Formatting display values (currency/date/number) consistently
|
|
22
24
|
- Anything reactivity-shaped: `computed` vs `watch`, prop→state sync, DOM measurement
|
|
23
25
|
- You see `watch` and want to know if it should be something else
|
|
24
26
|
|
|
@@ -32,6 +34,8 @@ storage, hydration, `definePageMeta`/auth, formatters) lives in the
|
|
|
32
34
|
- [reactivity.md](./reactivity.md) — `ref` over `reactive`, `useTemplateRef`, pure computeds, mutate-don't-reassign, DOM-measure + `ResizeObserver`, `shallowRef`, watch-getter prop sync, `:key` remount, listener cleanup
|
|
33
35
|
- [watch.md](./watch.md) — **`watch` is the escape hatch, not the default**: when it's right, and the four smell shapes (with refactors) found auditing 159 real watchers
|
|
34
36
|
- [template-idioms.md](./template-idioms.md) — duplicate-`@keyup` TS error, `:deep()`/`:slotted()`/`:global()`, click-outside marker class, `NuxtLink`/thin `app.vue`, `useHead`, `v-bind` shorthand, `useId`, `<Teleport>`/`<KeepAlive>`, `v-memo`/`v-once`, file-input reset
|
|
37
|
+
- [page-structure.md](./page-structure.md) — keep pages thin: route-param parsing + layout in the page, data/logic/forms in components
|
|
38
|
+
- [formatters.md](./formatters.md) — never inline a currency/date/number formatter; centralize in `useFormatters`, prefer Intl/date-fns
|
|
35
39
|
|
|
36
40
|
## Core Principles
|
|
37
41
|
|
package/plugins/{nuxt-nitro-api/skills/nuxt-nitro-api → vue-nuxt/skills/vue-nuxt}/formatters.md
RENAMED
|
@@ -84,7 +84,8 @@ let a blanket "convert all date fields to Date" transform touch DATE columns.
|
|
|
84
84
|
|
|
85
85
|
## Where to put the formatters
|
|
86
86
|
|
|
87
|
-
Pick the location by what the formatter needs (
|
|
87
|
+
Pick the location by what the formatter needs (the composable-vs-util decision
|
|
88
|
+
tree lives in the `nuxt-nitro-api` skill's `composables-utils.md`):
|
|
88
89
|
|
|
89
90
|
- **Needs Nuxt/Vue context** (e.g. reads locale/currency from `useRuntimeConfig()`,
|
|
90
91
|
`useI18n()`, or user preferences) → **composable** `useFormatters` in
|
/package/plugins/{nuxt-nitro-api/skills/nuxt-nitro-api → vue-nuxt/skills/vue-nuxt}/page-structure.md
RENAMED
|
File without changes
|