@danieljvdm/dev-kit 0.8.0 → 0.10.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.
- package/package.json +1 -1
- package/skill-sources.jsonc +38 -0
- package/skill-sources.lock.json +118 -0
- package/skills/testing/SKILL.md +23 -0
- package/skills/testing/agents/openai.yaml +4 -0
package/package.json
CHANGED
package/skill-sources.jsonc
CHANGED
|
@@ -47,5 +47,43 @@
|
|
|
47
47
|
"include": ["serve-sim"],
|
|
48
48
|
"licensePath": "LICENSE",
|
|
49
49
|
},
|
|
50
|
+
{
|
|
51
|
+
"id": "mattpocock-skills",
|
|
52
|
+
"repository": "https://github.com/mattpocock/skills.git",
|
|
53
|
+
"ref": "main",
|
|
54
|
+
"skillsPath": "skills/engineering",
|
|
55
|
+
"include": ["tdd", "improve-codebase-architecture"],
|
|
56
|
+
"licensePath": "LICENSE",
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "expo-skills",
|
|
60
|
+
"repository": "https://github.com/expo/skills.git",
|
|
61
|
+
"ref": "main",
|
|
62
|
+
"skillsPath": "plugins/expo/skills",
|
|
63
|
+
"include": [
|
|
64
|
+
"eas-app-stores",
|
|
65
|
+
"eas-hosting",
|
|
66
|
+
"eas-observe",
|
|
67
|
+
"eas-simulator",
|
|
68
|
+
"eas-update-insights",
|
|
69
|
+
"eas-workflows",
|
|
70
|
+
"expo-app-clip",
|
|
71
|
+
"expo-brownfield",
|
|
72
|
+
"expo-data-fetching",
|
|
73
|
+
"expo-dev-client",
|
|
74
|
+
"expo-dom",
|
|
75
|
+
"expo-examples",
|
|
76
|
+
"expo-module",
|
|
77
|
+
"expo-native-ui",
|
|
78
|
+
"expo-project-structure",
|
|
79
|
+
"expo-router",
|
|
80
|
+
"expo-skill-feedback",
|
|
81
|
+
"expo-tailwind-setup",
|
|
82
|
+
"expo-ui",
|
|
83
|
+
"expo-upgrade",
|
|
84
|
+
"expo-web-to-native",
|
|
85
|
+
],
|
|
86
|
+
"licensePath": "LICENSE",
|
|
87
|
+
},
|
|
50
88
|
],
|
|
51
89
|
}
|
package/skill-sources.lock.json
CHANGED
|
@@ -125,6 +125,124 @@
|
|
|
125
125
|
"serve-sim": "sha256:782f41d4d79100d5bfc9ec1211e5d4766e978299bbb93fd8e34c6f8d2ecf2114"
|
|
126
126
|
},
|
|
127
127
|
"licensePath": "LICENSE"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"id": "mattpocock-skills",
|
|
131
|
+
"repository": "https://github.com/mattpocock/skills.git",
|
|
132
|
+
"ref": "main",
|
|
133
|
+
"resolved": "2ab958093e83e0ec752e6c1c5932da465bf23e0c",
|
|
134
|
+
"skillsPath": "skills/engineering",
|
|
135
|
+
"include": ["tdd", "improve-codebase-architecture"],
|
|
136
|
+
"skills": ["improve-codebase-architecture", "tdd"],
|
|
137
|
+
"descriptions": {
|
|
138
|
+
"improve-codebase-architecture": "Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.",
|
|
139
|
+
"tdd": "Test-driven development. Use when the user wants to build features or fix bugs test-first, mentions \"red-green-refactor\", or wants integration tests."
|
|
140
|
+
},
|
|
141
|
+
"digests": {
|
|
142
|
+
"improve-codebase-architecture": "sha256:43721b6125a4c703810414e649fbbab252f1f85a62385cdb23f313e0e06ba26a",
|
|
143
|
+
"tdd": "sha256:ea2d26eda005b10a2de4bdb7de44d33072f2a8e82dbf670952ce30a9c2d7c475"
|
|
144
|
+
},
|
|
145
|
+
"licensePath": "LICENSE"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"id": "expo-skills",
|
|
149
|
+
"repository": "https://github.com/expo/skills.git",
|
|
150
|
+
"ref": "main",
|
|
151
|
+
"resolved": "994342f0e343f05b9b8cdd38a0e91356ceef00f6",
|
|
152
|
+
"skillsPath": "plugins/expo/skills",
|
|
153
|
+
"include": [
|
|
154
|
+
"eas-app-stores",
|
|
155
|
+
"eas-hosting",
|
|
156
|
+
"eas-observe",
|
|
157
|
+
"eas-simulator",
|
|
158
|
+
"eas-update-insights",
|
|
159
|
+
"eas-workflows",
|
|
160
|
+
"expo-app-clip",
|
|
161
|
+
"expo-brownfield",
|
|
162
|
+
"expo-data-fetching",
|
|
163
|
+
"expo-dev-client",
|
|
164
|
+
"expo-dom",
|
|
165
|
+
"expo-examples",
|
|
166
|
+
"expo-module",
|
|
167
|
+
"expo-native-ui",
|
|
168
|
+
"expo-project-structure",
|
|
169
|
+
"expo-router",
|
|
170
|
+
"expo-skill-feedback",
|
|
171
|
+
"expo-tailwind-setup",
|
|
172
|
+
"expo-ui",
|
|
173
|
+
"expo-upgrade",
|
|
174
|
+
"expo-web-to-native"
|
|
175
|
+
],
|
|
176
|
+
"skills": [
|
|
177
|
+
"eas-app-stores",
|
|
178
|
+
"eas-hosting",
|
|
179
|
+
"eas-observe",
|
|
180
|
+
"eas-simulator",
|
|
181
|
+
"eas-update-insights",
|
|
182
|
+
"eas-workflows",
|
|
183
|
+
"expo-app-clip",
|
|
184
|
+
"expo-brownfield",
|
|
185
|
+
"expo-data-fetching",
|
|
186
|
+
"expo-dev-client",
|
|
187
|
+
"expo-dom",
|
|
188
|
+
"expo-examples",
|
|
189
|
+
"expo-module",
|
|
190
|
+
"expo-native-ui",
|
|
191
|
+
"expo-project-structure",
|
|
192
|
+
"expo-router",
|
|
193
|
+
"expo-skill-feedback",
|
|
194
|
+
"expo-tailwind-setup",
|
|
195
|
+
"expo-ui",
|
|
196
|
+
"expo-upgrade",
|
|
197
|
+
"expo-web-to-native"
|
|
198
|
+
],
|
|
199
|
+
"descriptions": {
|
|
200
|
+
"eas-app-stores": "EAS service (paid). Deploy Expo apps to the app stores with EAS - build and submit to the iOS App Store, Google Play Store, and TestFlight, configure eas.json build and submit profiles, manage app versions and build numbers, and publish App Store metadata and ASO. Use whenever the user wants to deploy, release, or ship an app to production or the app stores, is preparing a production build, running eas build or eas submit, shipping to TestFlight, bumping version or build numbers, or setting up store listing metadata. For deploying an Expo website or API routes, use the eas-hosting skill.",
|
|
201
|
+
"eas-hosting": "EAS service (paid). Deploy Expo websites and Expo Router API routes to EAS Hosting - export the web bundle, run eas deploy for production and PR preview URLs, manage environment secrets and custom domains, and work within the Cloudflare Workers runtime. Also covers authoring API routes (+api.ts handlers, HTTP methods, request handling, CORS). Use when deploying an Expo web app or API routes, setting up EAS Hosting, or configuring hosting environments and domains. Not for native builds or store releases - use the eas-app-stores skill for those.",
|
|
202
|
+
"eas-observe": "EAS service (paid). Use for anything related to EAS Observe - adding `expo-observe` to an Expo project (AppMetricsRoot/ObserveRoot HOC, markInteractive, the useObserve hook, the Expo Router / React Navigation integrations for per-route metrics, and user-defined events via `Observe.logEvent`), querying via the EAS CLI (`eas observe:metrics-summary`, `observe:metrics`, `observe:routes`, `observe:events`, `observe:versions`), or interpreting the resulting metrics (cold/warm launch, TTR, TTI, navigation cold/warm TTR, update download, and the TTI frameRate params for triaging slow startups).",
|
|
203
|
+
"eas-simulator": "EAS service (paid). Run and control a user's app on a remote iOS/Android simulator hosted on EAS cloud. Read before running any `eas simulator:*` commands - it has the current syntax for this experimental API. Use whenever the user needs a simulator they can't run locally - 'run my app on a cloud simulator', 'use eas simulator to run/install/screenshot my app', 'I'm on Linux/Cursor and need an iOS device', 'no sim on this box / headless CI', 'let an agent click through my app and screenshot it', 'test my dev build on a remote sim with live reload', 'stream a sim to my browser' - even when they don't say 'EAS Simulator' or 'cloud'. On a host WITHOUT a local simulator (Linux, CI, cloud sandbox) it's the default; on macOS, do NOT auto-trigger for a plain 'run on the simulator' - use it only for a cloud/remote/shareable sim, an iOS version they lack, or an agent-driven session. NOT for local sims (expo run:ios, Xcode, Android Studio), EAS Build/Update, web preview, or physical devices.",
|
|
204
|
+
"eas-update-insights": "EAS service (paid). Check the health of published EAS Update: crash rates, install/launch counts, unique users, payload size, and the split between embedded and OTA users per channel. Use when the user asks how an update is performing, whether a rollout is healthy, how many users are on the embedded build vs OTA, or wants to gate CI on update health.",
|
|
205
|
+
"eas-workflows": "EAS service (paid). Helps understand and write EAS workflow YAML files for Expo projects. Use this skill when the user asks about CI/CD or workflows in an Expo or EAS context, mentions .eas/workflows/, or wants help with EAS build pipelines or deployment automation.",
|
|
206
|
+
"expo-app-clip": "Framework (OSS). Add an iOS App Clip target to an Expo app. Use when the user mentions App Clip, AASA, apple-app-site-association, appclips, smart app banner, or wants to ship a lightweight iOS Clip invoked from a URL alongside their parent app.",
|
|
207
|
+
"expo-brownfield": "Framework (OSS). Integrate Expo and React Native into an existing native iOS or Android app. Use when the user mentions brownfield, embedding React Native in a native app, AAR/XCFramework, or adding Expo to an existing Kotlin/Swift project. Covers both the isolated approach and the integrated approach.",
|
|
208
|
+
"expo-data-fetching": "Framework (OSS). Use when implementing or debugging ANY network request, API call, or data fetching. Covers fetch API, React Query, SWR, error handling, caching, offline support, and Expo Router data loaders (`useLoaderData`).",
|
|
209
|
+
"expo-dev-client": "Framework (OSS). Build and distribute Expo development clients locally or via TestFlight for internal testing. For production TestFlight releases and store submission, use the eas-app-stores skill.",
|
|
210
|
+
"expo-dom": "Framework (OSS). Use Expo DOM components to run web code in a webview on native and as-is on web. Migrate web code to native incrementally. For the end-to-end migration of a whole web app, use the expo-web-to-native skill.",
|
|
211
|
+
"expo-examples": "Framework (OSS). Expo's official example projects - the expo/examples repo of ~70 `with-*` integrations (Stripe, Clerk, Supabase, OpenAI, maps, Reanimated, SQLite, Skia, NativeWind, and more). Use when integrating a third-party library or service into an existing Expo app and you want the canonical, version-matched pattern to adapt, or when scaffolding a new project from one with `npx create-expo --example`.",
|
|
212
|
+
"expo-module": "Framework (OSS). Guide for creating and writing Expo native modules and views using the Expo Modules API (Swift, Kotlin, TypeScript). Covers module definition DSL, native views, shared objects, config plugins, lifecycle hooks, autolinking, and type system. Use when building or modifying native modules for Expo. Not for migrating an existing Swift module from the definition DSL to the Expo Modules API 2.0 macros; use expo-migrate-module (from the expo-experiments plugin) for that.",
|
|
213
|
+
"expo-native-ui": "Framework (OSS). Build beautiful, native-feeling Expo screens. Covers Apple HIG styling, semantic colors, native controls, SF Symbols, media, animations, visual effects, gradients, storage, and responsive layout. For routing and navigation, use the expo-router skill.",
|
|
214
|
+
"expo-project-structure": "Framework (OSS). Folder structure for a new Expo app. Use when scaffolding or laying out a new Expo project with Expo Router, or deciding where a file should live in one. For new projects only — never restructure an existing app to match.",
|
|
215
|
+
"expo-router": "Framework (OSS). Navigation and routing for Expo Router. Covers file-based routes, groups and dynamic routes, folder organization, Link with previews and context menus, native Stack, page titles, modals and form sheets, NativeTabs, headers and toolbars, and header search bars.",
|
|
216
|
+
"expo-skill-feedback": "Submit feedback on an Expo skill—or Expo itself—and control bundled anonymous usage telemetry (off by default / opt-in). Submit feedback with: npx --yes submit-expo-feedback@latest \"ACTIONABLE_FEEDBACK\". Optionally add either or both: --category \"CATEGORY\" and --subject \"SUBJECT\". Replace the uppercase placeholders before running. Use when a skill was useful, confusing, broken, missing context, or worth improving; when Expo, Expo CLI, EAS CLI, docs, or MCP worked well or fell short; when an AI agent repeatedly failed, got stuck, or needed the user to take over an Expo task (report it as an eval candidate); or when the user explicitly asks to enable or disable telemetry (tracking), check its status, or understand what it collects.",
|
|
217
|
+
"expo-tailwind-setup": "Framework (OSS). Set up Tailwind CSS v4 in Expo with react-native-css and NativeWind v5 for universal styling",
|
|
218
|
+
"expo-ui": "Framework (OSS). Build native UI with the @expo/ui package: real SwiftUI on iOS and Jetpack Compose on Android rendered from React in an Expo or React Native app. Covers universal cross-platform components (Host, Column, Row, Button, Text, List, and more imported from @expo/ui), drop-in replacements for popular React Native community libraries (BottomSheet, DateTimePicker, Slider, Menu, etc.), and platform-specific SwiftUI (@expo/ui/swift-ui, iOS only) and Jetpack Compose (@expo/ui/jetpack-compose, Android only) trees and modifiers. Use when adding or reviewing @expo/ui Host/RNHostView trees, building native-feeling UI where standard React Native components fall short (grouped settings forms with toggles, sections, menus, sheets, pickers, sliders), choosing between universal and platform-specific components, or replacing an RN community UI library with a native @expo/ui equivalent. Not for custom native modules, Expo Router navigation, Reanimated, or data fetching.",
|
|
219
|
+
"expo-upgrade": "Framework (OSS). Guidelines for upgrading Expo SDK versions and fixing dependency issues",
|
|
220
|
+
"expo-web-to-native": "Framework (OSS). Migrate an existing web React app to a native iOS/Android app with Expo. Use when the user wants to turn a website into a mobile app, port a Next.js/Vite/CRA React codebase to React Native, reuse web code on native incrementally, or asks how web idioms (the DOM, CSS, React Router, localStorage, window) map to native. This is the end-to-end migration guide; use the `expo-dom` skill for the DOM-component mechanism itself."
|
|
221
|
+
},
|
|
222
|
+
"digests": {
|
|
223
|
+
"eas-app-stores": "sha256:830332227adfe1421667abe0e3e90c554c85661c5646de4e05a976b276bd2c74",
|
|
224
|
+
"eas-hosting": "sha256:9d2df9eb3045016b45c69d8578b4d1bdfea5d520b22136145a4593a2ebc57586",
|
|
225
|
+
"eas-observe": "sha256:da1785de84561773ab17d36a80d82a0a2e764ed2585a6234a491b6296fb58e86",
|
|
226
|
+
"eas-simulator": "sha256:461021e81e3a6abf8ed4cd119208e62e420d3779a41edec94f84b5d7ce8cd0f6",
|
|
227
|
+
"eas-update-insights": "sha256:5a98762401a49571a68e8d7824c510bf6b54bd3d2e4d097c846964ee4ff25687",
|
|
228
|
+
"eas-workflows": "sha256:27bee5b70ef49ff91cc3fc3473257444af07733248926acd0115752223045eee",
|
|
229
|
+
"expo-app-clip": "sha256:9129826172144ec4e625ae768e79f2acaebb5cf53a8af51fbc32fb45d82c260a",
|
|
230
|
+
"expo-brownfield": "sha256:0fd07f633c868759a062fd0732b3702826bc3ca3f3a6c094cb7ea7a213ad1dfd",
|
|
231
|
+
"expo-data-fetching": "sha256:a556bea72824a147744fc5b784128207cbeb3425082fa741070ce47799631a27",
|
|
232
|
+
"expo-dev-client": "sha256:dd1a5364386a171d367108519a78cf743ecbac6f9f66f030910e0048e5650788",
|
|
233
|
+
"expo-dom": "sha256:46af40ce11aaa7e94b82fc2c3c38198241b87dbc31c925152da53bbd2a063d4e",
|
|
234
|
+
"expo-examples": "sha256:608f12b9e6c52c6968ae6d655f51d83384194f6a221ea02a0bf812ed23438a2f",
|
|
235
|
+
"expo-module": "sha256:8133a3f27a7b99d60961dc31dd27b9f0ea39b0bbac753be8a17ba8f554f7ef98",
|
|
236
|
+
"expo-native-ui": "sha256:87516edae70305f9e7231599533b2ae27c12a55bb5f0b7205b0d64ababa0c967",
|
|
237
|
+
"expo-project-structure": "sha256:28fafa0754bcd9686ead5dcbc6a8abf8e00325ee756b794989bfb8e11f6ae941",
|
|
238
|
+
"expo-router": "sha256:3d07d7c13c906665725fc235b6fa2cb28bbd8ad7184ec9eba3d2e2ae87baa3c2",
|
|
239
|
+
"expo-skill-feedback": "sha256:6c636f8bcec43c2ad1ed1bf11c90fc32d75b6b15dfe79f23d44387fa45e20307",
|
|
240
|
+
"expo-tailwind-setup": "sha256:de3cc17cc9e11f1989659a61a8fddb98a62b356c58d77c7ec5318b03789e896a",
|
|
241
|
+
"expo-ui": "sha256:b6773a56b0f9bf4cc3dc9cb1858ab50bdfcc3dc9b2d4e500990ab5d24e28d1ca",
|
|
242
|
+
"expo-upgrade": "sha256:6c65f94c60f8127a36ca2d9402b610756314388de42200a2a120bbbea77f131b",
|
|
243
|
+
"expo-web-to-native": "sha256:360359742d72d0a8ed9926d53f19bae7603fb788f6e897a14208bbb35c2ed618"
|
|
244
|
+
},
|
|
245
|
+
"licensePath": "LICENSE"
|
|
128
246
|
}
|
|
129
247
|
]
|
|
130
248
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testing
|
|
3
|
+
description: Set an extremely high bar for automated tests. Use whenever software work raises the question of adding, changing, retaining, or removing tests.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Testing
|
|
7
|
+
|
|
8
|
+
**If in doubt, don't test it.**
|
|
9
|
+
|
|
10
|
+
Committed tests must prove durable value. Tests are permanent product code, not a reflexive companion to each source file.
|
|
11
|
+
|
|
12
|
+
Write a test only when every condition holds:
|
|
13
|
+
|
|
14
|
+
- It protects stable product behavior rather than an implementation detail.
|
|
15
|
+
- A regression is plausible and would be costly.
|
|
16
|
+
- The behavior is observable through a stable public seam.
|
|
17
|
+
- The test will survive likely refactors.
|
|
18
|
+
- The expected result is independent of the implementation.
|
|
19
|
+
- Existing tests, types, static checks, or a smoke check cannot cover the risk adequately.
|
|
20
|
+
|
|
21
|
+
If any condition fails, skip the test and use the cheapest sufficient verification instead. Moving MVP behavior often warrants no committed tests.
|
|
22
|
+
|
|
23
|
+
Test capabilities, not files. Use the fewest tests that protect the risk, and ignore coverage targets unless the user explicitly asks for them.
|