ima-claude 2.20.0 → 2.26.0

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.
Files changed (80) hide show
  1. package/README.md +74 -9
  2. package/dist/cli.js +2 -1
  3. package/package.json +1 -1
  4. package/plugins/ima-claude/.claude-plugin/plugin.json +2 -2
  5. package/plugins/ima-claude/agents/explorer.md +29 -15
  6. package/plugins/ima-claude/agents/implementer.md +58 -13
  7. package/plugins/ima-claude/agents/memory.md +19 -19
  8. package/plugins/ima-claude/agents/reviewer.md +84 -34
  9. package/plugins/ima-claude/agents/tester.md +59 -16
  10. package/plugins/ima-claude/agents/wp-developer.md +66 -21
  11. package/plugins/ima-claude/hooks/bootstrap.sh +42 -44
  12. package/plugins/ima-claude/hooks/prompt_coach_digest.md +14 -17
  13. package/plugins/ima-claude/hooks/prompt_coach_system.md +10 -12
  14. package/plugins/ima-claude/personalities/README.md +17 -6
  15. package/plugins/ima-claude/personalities/enable-efficient.md +61 -0
  16. package/plugins/ima-claude/personalities/enable-terse.md +71 -0
  17. package/plugins/ima-claude/skills/agentic-workflows/SKILL.md +35 -71
  18. package/plugins/ima-claude/skills/architect/SKILL.md +54 -168
  19. package/plugins/ima-claude/skills/compound-bridge/SKILL.md +41 -94
  20. package/plugins/ima-claude/skills/design-to-code/SKILL.md +43 -78
  21. package/plugins/ima-claude/skills/discourse/SKILL.md +79 -194
  22. package/plugins/ima-claude/skills/discourse-admin/SKILL.md +41 -103
  23. package/plugins/ima-claude/skills/docs-organize/SKILL.md +63 -203
  24. package/plugins/ima-claude/skills/ember-discourse/SKILL.md +90 -200
  25. package/plugins/ima-claude/skills/espocrm/SKILL.md +14 -23
  26. package/plugins/ima-claude/skills/espocrm-api/SKILL.md +79 -192
  27. package/plugins/ima-claude/skills/functional-programmer/SKILL.md +33 -237
  28. package/plugins/ima-claude/skills/gh-cli/SKILL.md +26 -65
  29. package/plugins/ima-claude/skills/ima-bootstrap/SKILL.md +71 -104
  30. package/plugins/ima-claude/skills/ima-bootstrap/references/ima-brand.md +32 -22
  31. package/plugins/ima-claude/skills/ima-brand/SKILL.md +18 -23
  32. package/plugins/ima-claude/skills/ima-copywriting/SKILL.md +68 -179
  33. package/plugins/ima-claude/skills/ima-doc2pdf/SKILL.md +32 -102
  34. package/plugins/ima-claude/skills/ima-editorial-scorecard/SKILL.md +38 -63
  35. package/plugins/ima-claude/skills/ima-editorial-workflow/SKILL.md +69 -114
  36. package/plugins/ima-claude/skills/ima-email-creator/SKILL.md +16 -22
  37. package/plugins/ima-claude/skills/ima-forms-expert/SKILL.md +21 -37
  38. package/plugins/ima-claude/skills/ima-git/SKILL.md +81 -0
  39. package/plugins/ima-claude/skills/jira-checkpoint/SKILL.md +39 -120
  40. package/plugins/ima-claude/skills/jquery/SKILL.md +107 -233
  41. package/plugins/ima-claude/skills/js-fp/SKILL.md +75 -296
  42. package/plugins/ima-claude/skills/js-fp-api/SKILL.md +52 -162
  43. package/plugins/ima-claude/skills/js-fp-react/SKILL.md +47 -270
  44. package/plugins/ima-claude/skills/js-fp-vue/SKILL.md +55 -209
  45. package/plugins/ima-claude/skills/js-fp-wordpress/SKILL.md +59 -204
  46. package/plugins/ima-claude/skills/livecanvas/SKILL.md +19 -32
  47. package/plugins/ima-claude/skills/mcp-atlassian/SKILL.md +92 -162
  48. package/plugins/ima-claude/skills/mcp-context7/SKILL.md +32 -64
  49. package/plugins/ima-claude/skills/mcp-gitea/SKILL.md +98 -188
  50. package/plugins/ima-claude/skills/mcp-github/SKILL.md +60 -124
  51. package/plugins/ima-claude/skills/mcp-memory/SKILL.md +1 -177
  52. package/plugins/ima-claude/skills/mcp-qdrant/SKILL.md +58 -115
  53. package/plugins/ima-claude/skills/mcp-sequential/SKILL.md +32 -87
  54. package/plugins/ima-claude/skills/mcp-serena/SKILL.md +54 -80
  55. package/plugins/ima-claude/skills/mcp-tavily/SKILL.md +40 -63
  56. package/plugins/ima-claude/skills/mcp-vestige/SKILL.md +75 -116
  57. package/plugins/ima-claude/skills/php-authnet/SKILL.md +32 -65
  58. package/plugins/ima-claude/skills/php-fp/SKILL.md +50 -129
  59. package/plugins/ima-claude/skills/php-fp-wordpress/SKILL.md +25 -73
  60. package/plugins/ima-claude/skills/phpunit-wp/SKILL.md +103 -463
  61. package/plugins/ima-claude/skills/playwright/SKILL.md +69 -220
  62. package/plugins/ima-claude/skills/prompt-starter/SKILL.md +33 -83
  63. package/plugins/ima-claude/skills/prompt-starter/references/code-review.md +38 -0
  64. package/plugins/ima-claude/skills/py-fp/SKILL.md +78 -384
  65. package/plugins/ima-claude/skills/quasar-fp/SKILL.md +54 -255
  66. package/plugins/ima-claude/skills/quickstart/SKILL.md +7 -11
  67. package/plugins/ima-claude/skills/rails/SKILL.md +63 -184
  68. package/plugins/ima-claude/skills/resume-session/SKILL.md +14 -35
  69. package/plugins/ima-claude/skills/rg/SKILL.md +61 -146
  70. package/plugins/ima-claude/skills/ruby-fp/SKILL.md +66 -163
  71. package/plugins/ima-claude/skills/save-session/SKILL.md +10 -39
  72. package/plugins/ima-claude/skills/scorecard/SKILL.md +42 -40
  73. package/plugins/ima-claude/skills/skill-analyzer/SKILL.md +42 -71
  74. package/plugins/ima-claude/skills/skill-creator/SKILL.md +79 -250
  75. package/plugins/ima-claude/skills/task-master/SKILL.md +11 -31
  76. package/plugins/ima-claude/skills/task-planner/SKILL.md +44 -153
  77. package/plugins/ima-claude/skills/task-runner/SKILL.md +61 -143
  78. package/plugins/ima-claude/skills/unit-testing/SKILL.md +59 -134
  79. package/plugins/ima-claude/skills/wp-ddev/SKILL.md +38 -120
  80. package/plugins/ima-claude/skills/wp-local/SKILL.md +26 -108
@@ -5,67 +5,27 @@ description: "FP patterns for Vue.js with composables, wrappers, and pure compon
5
5
 
6
6
  # JavaScript FP - Vue.js
7
7
 
8
- Functional programming patterns for Vue.js components with composables, wrapper patterns, and pure component architecture.
8
+ Pure components with business logic in composables, wrapper pattern for side effects, composables over stores (95% of cases). Builds on `../js-fp/SKILL.md`.
9
9
 
10
- ## When to Use This Skill
10
+ ## Pure Component + Composable Pattern
11
11
 
12
- - Building Vue.js 3+ components
13
- - Need pure, testable component logic
14
- - Implementing composables with FP principles
15
- - Wrapper patterns for external dependencies
16
- - Performance optimization without over-engineering
17
-
18
- ## Core Philosophy
19
-
20
- **Pure components** with **business logic in composables**, **wrapper pattern for side effects**, and **simple state management** (composables > stores for 95% of use cases).
21
-
22
- **Foundation**: This skill builds on `js-fp` core principles. Reference `../js-fp/SKILL.md` for purity, composition, dependency injection, and testing patterns.
23
-
24
- ## Pure Component with Composable Pattern
25
-
26
- **Rule**: Separate business logic (composables) from presentation (components).
12
+ Separate business logic (composables) from presentation (components).
27
13
 
28
14
  ```vue
29
15
  <script setup lang="ts">
30
- /**
31
- * Business logic in composables, presentation in component
32
- * - Zero side effects in component
33
- * - All logic in composables
34
- * - 100% testable through dependency injection
35
- */
36
-
37
16
  import type { Ref } from 'vue'
38
17
  import { computed, readonly, toRef } from 'vue'
39
18
 
40
- interface UserData {
41
- id: string
42
- name: string
43
- email: string
44
- }
19
+ interface UserData { id: string; name: string; email: string }
20
+ interface UserConfig { showEmail: boolean; variant: 'compact' | 'detailed' }
45
21
 
46
- interface UserConfig {
47
- showEmail: boolean
48
- variant: 'compact' | 'detailed'
49
- }
22
+ const useUserLogic = (userData: Readonly<Ref<UserData>>, config: Readonly<Ref<UserConfig>>) => {
23
+ const displayData = computed(() => ({
24
+ ...userData.value,
25
+ displayName: userData.value.name.trim(),
26
+ ...(config.value.showEmail ? {} : { email: undefined })
27
+ }))
50
28
 
51
- // ───── Composable with pure business logic ─────
52
- const useUserLogic = (
53
- userData: Readonly<Ref<UserData>>,
54
- config: Readonly<Ref<UserConfig>>
55
- ) => {
56
- // Pure computation - no side effects
57
- const displayData = computed(() => {
58
- const user = userData.value
59
- const cfg = config.value
60
-
61
- return {
62
- ...user,
63
- displayName: user.name.trim(),
64
- ...(cfg.showEmail ? {} : { email: undefined })
65
- }
66
- })
67
-
68
- // Pre-compiled CSS for performance
69
29
  const cssClasses = computed(() => ({
70
30
  card: `user-card user-card--${config.value.variant}`,
71
31
  name: `user-card__name user-card__name--${config.value.variant}`
@@ -74,13 +34,7 @@ const useUserLogic = (
74
34
  return { displayData, cssClasses }
75
35
  }
76
36
 
77
- // ───── Component props ─────
78
- const props = defineProps<{
79
- userData: UserData
80
- config: UserConfig
81
- }>()
82
-
83
- // ───── Use composable ─────
37
+ const props = defineProps<{ userData: UserData; config: UserConfig }>()
84
38
  const { displayData, cssClasses } = useUserLogic(
85
39
  readonly(toRef(props, 'userData')),
86
40
  readonly(toRef(props, 'config'))
@@ -95,44 +49,24 @@ const { displayData, cssClasses } = useUserLogic(
95
49
  </template>
96
50
  ```
97
51
 
98
- ## Wrapper Pattern for External Dependencies
52
+ ## Wrapper Pattern for Side Effects
99
53
 
100
- **Rule**: Isolate side effects in wrapper layer, keep inner component pure.
54
+ Pure inner component receives data via props, emits events. Wrapper handles all I/O.
101
55
 
102
56
  ```vue
103
- <!-- UserDisplayPure.vue - Pure Inner Component -->
57
+ <!-- UserDisplayPure.vue -->
104
58
  <script setup lang="ts">
105
- const props = defineProps<{
106
- user: UserData
107
- }>()
108
-
109
- const emit = defineEmits<{
110
- update: [user: UserData]
111
- }>()
112
-
113
- const handleUpdate = (updates: Partial<UserData>) => {
114
- const updatedUser = { ...props.user, ...updates }
115
- emit('update', updatedUser)
116
- }
59
+ const props = defineProps<{ user: UserData }>()
60
+ const emit = defineEmits<{ update: [user: UserData] }>()
61
+ const handleUpdate = (updates: Partial<UserData>) => emit('update', { ...props.user, ...updates })
117
62
  </script>
118
63
 
119
- <template>
120
- <div class="user-display">
121
- <h3>{{ user.name }}</h3>
122
- <button @click="handleUpdate({ name: 'Updated' })">Update</button>
123
- </div>
124
- </template>
125
-
126
- <!-- UserDisplayWrapper.vue - Wrapper with Side Effects -->
64
+ <!-- UserDisplayWrapper.vue -->
127
65
  <script setup lang="ts">
128
66
  import { ref } from 'vue'
129
67
  import UserDisplayPure from './UserDisplayPure.vue'
130
68
 
131
- const props = defineProps<{
132
- userId: string
133
- }>()
134
-
135
- // Side effect: External API call
69
+ const props = defineProps<{ userId: string }>()
136
70
  const user = ref<UserData | null>(null)
137
71
  const loading = ref(true)
138
72
  const error = ref<Error | null>(null)
@@ -148,175 +82,87 @@ const fetchUser = async () => {
148
82
  }
149
83
  }
150
84
 
151
- // Side effect isolated to wrapper
152
85
  const handleUpdate = async (updatedUser: UserData) => {
153
86
  await userApi.updateUser(updatedUser)
154
- await fetchUser() // Refresh
87
+ await fetchUser()
155
88
  }
156
89
 
157
- // Initial load
158
90
  fetchUser()
159
91
  </script>
160
92
 
161
93
  <template>
162
- <UserDisplayPure
163
- v-if="user && !loading"
164
- :user="user"
165
- @update="handleUpdate"
166
- />
94
+ <UserDisplayPure v-if="user && !loading" :user="user" @update="handleUpdate" />
167
95
  <div v-else-if="loading">Loading...</div>
168
96
  <div v-else-if="error">Error: {{ error.message }}</div>
169
97
  </template>
170
98
  ```
171
99
 
172
- ## Vue 3 Composition API Best Practices
173
-
174
- ### Reactive vs. Ref
100
+ ## Reactive vs. Ref
175
101
 
176
102
  ```typescript
177
- // Use ref for primitives and simple objects
103
+ // ref for primitives and simple objects (default choice)
178
104
  const count = ref(0)
179
105
  const user = ref<UserData>({ id: '1', name: 'Alice', email: 'alice@test.com' })
180
106
 
181
- // Use reactive sparingly (only for complex nested objects)
182
- const state = reactive({
183
- users: [],
184
- filters: { search: '', minAge: 0 }
185
- })
107
+ // reactive sparingly only for complex nested objects
108
+ const state = reactive({ users: [], filters: { search: '', minAge: 0 } })
186
109
 
187
- // Prefer computed over watch
110
+ // computed over watch for derived state
188
111
  const filteredUsers = computed(() =>
189
112
  state.users.filter(u => u.name.includes(state.filters.search))
190
113
  )
191
114
  ```
192
115
 
193
- ### Lifecycle Hooks
194
-
195
- ```typescript
196
- import { onMounted, onUnmounted } from 'vue'
197
-
198
- // Side effects in lifecycle hooks
199
- onMounted(() => {
200
- fetchData()
201
- const interval = setInterval(refreshData, 60000)
202
-
203
- onUnmounted(() => {
204
- clearInterval(interval)
205
- })
206
- })
207
- ```
208
-
209
- ## Anti-Patterns (AVOID)
210
-
211
- ### Pinia/Vuex Over-Usage
116
+ ## Anti-Patterns
212
117
 
213
118
  ```typescript
214
- // BAD: Complex store for simple state
119
+ // BAD: Pinia store for simple state
215
120
  const useUserStore = defineStore('users', {
216
121
  state: () => ({ users: [], loading: false }),
217
- actions: {
218
- async fetchUsers() { /* complex async logic */ }
219
- }
122
+ actions: { async fetchUsers() { /* ... */ } }
220
123
  })
221
124
 
222
- // GOOD: Simple composable (covers 95% of use cases)
125
+ // GOOD: Composable (covers 95% of cases)
223
126
  const useUsers = () => {
224
127
  const users = ref<UserData[]>([])
225
128
  const loading = ref(false)
226
-
227
129
  const fetchUsers = async () => {
228
130
  loading.value = true
229
131
  users.value = await userApi.getUsers()
230
132
  loading.value = false
231
133
  }
232
-
233
134
  return { users: readonly(users), loading: readonly(loading), fetchUsers }
234
135
  }
235
- ```
236
136
 
237
- ### Reactive Over-Engineering
137
+ // BAD: watch for derived state
138
+ watch([firstName, lastName], () => { fullName.value = `${firstName.value} ${lastName.value}` })
238
139
 
239
- ```typescript
240
- // BAD: Unnecessary reactive complexity
241
- const user = reactive({
242
- profile: reactive({
243
- settings: reactive({
244
- theme: 'dark'
245
- })
246
- })
247
- })
140
+ // GOOD: computed
141
+ const fullName = computed(() => `${firstName.value} ${lastName.value}`)
248
142
 
249
- // GOOD: Simple ref with computed when needed
143
+ // BAD: Nested reactive
144
+ const user = reactive({ profile: reactive({ settings: reactive({ theme: 'dark' }) }) })
145
+
146
+ // GOOD: ref with computed
250
147
  const userSettings = ref({ theme: 'dark', notifications: true })
251
148
  const isDarkTheme = computed(() => userSettings.value.theme === 'dark')
252
149
  ```
253
150
 
254
- ### Watch Over-Usage
255
-
256
- ```typescript
257
- // BAD: Watch for derived state
258
- const fullName = ref('')
259
- watch([firstName, lastName], () => {
260
- fullName.value = `${firstName.value} ${lastName.value}`
261
- })
262
-
263
- // GOOD: Computed for derived state
264
- const fullName = computed(() => `${firstName.value} ${lastName.value}`)
265
- ```
266
-
267
151
  ## Quality Gates
268
152
 
269
- Before implementing any Vue component:
270
-
271
- 1. **Pure composable**: Business logic separated from presentation?
272
- 2. **Wrapper pattern**: Side effects isolated to wrapper component?
273
- 3. **Reactive optimization**: Using computed over watch?
274
- 4. **State management**: Using composables instead of store (unless truly global)?
275
- 5. **Testability**: Can inject mocks for all dependencies?
276
- 6. **FP principles**: Pure functions, immutable updates?
277
- 7. **Performance**: Pre-compiled configurations when appropriate?
278
-
279
- ## When to Load Additional Content
280
-
281
- ### Composables Advanced
282
- **File**: `references/composables-advanced.md`
283
- **When**: Complex composable patterns, factory patterns, provide/inject DI
284
- **Contains**: Composable factory, state management, lifecycle integration, composition patterns
285
-
286
- ### Reactivity Patterns
287
- **File**: `references/reactivity-patterns.md`
288
- **When**: Performance optimization, reactivity issues, memory management
289
- **Contains**: Deep reactive vs ref patterns, shallowRef, computed optimization, cleanup patterns
290
-
291
- ### Testing
292
- **File**: `references/testing.md`
293
- **When**: Writing tests for Vue FP components
294
- **Contains**: Testing pure composables, component tests, wrapper tests, mocking patterns
295
-
296
- ### Complete Examples
297
- **File**: `references/complete-examples.md`
298
- **When**: Need full working component examples
299
- **Contains**: Product card, user dashboard with wrapper, form with validation
300
-
301
- ## Foundation Reference
302
-
303
- **Core FP Principles**: `../js-fp/SKILL.md`
304
- - Purity and side effect isolation
305
- - Composition patterns
306
- - Dependency injection
307
- - Immutability
308
- - Testing strategies
309
-
310
- **Deep Dive**: `../js-fp/core-principles.md` for complete FP philosophy
311
-
312
- ## Success Metrics
313
-
314
- - **Testability**: 100% testable composables
315
- - **Performance**: Pre-compiled configurations, reactive optimization
316
- - **Maintainability**: Clear separation of concerns
317
- - **Code Quality**: Simple, readable component logic
318
- - **Bundle Size**: Minimal overhead, tree-shakeable composables
319
-
320
- ## Philosophy
321
-
322
- *"Pure component architecture through composables, wrapper patterns for side effects, and simple state management - optimize for testability and simplicity over clever reactivity."*
153
+ 1. Business logic in composable, not component?
154
+ 2. Side effects isolated to wrapper component?
155
+ 3. computed over watch for derived state?
156
+ 4. Composable instead of store (unless truly global state)?
157
+ 5. All dependencies injectable for testing?
158
+ 6. Immutable updates, pure functions?
159
+
160
+ ## Reference Files
161
+
162
+ | File | Load When |
163
+ |------|-----------|
164
+ | `references/composables-advanced.md` | Factory patterns, provide/inject DI, lifecycle integration |
165
+ | `references/reactivity-patterns.md` | Performance, shallowRef, computed optimization, cleanup |
166
+ | `references/testing.md` | Testing composables, component tests, wrapper tests, mocking |
167
+ | `references/complete-examples.md` | Full working examples (product card, user dashboard, form) |
168
+ | `../js-fp/SKILL.md` | Core FP: purity, composition, DI, immutability, testing |