@amsterdamdatalabs/enact-extensions 0.1.0 → 0.1.3

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 (245) hide show
  1. package/README.md +96 -21
  2. package/dist/index.d.ts +5 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/install.d.ts +171 -1
  7. package/dist/install.d.ts.map +1 -1
  8. package/dist/install.js +402 -49
  9. package/dist/install.js.map +1 -1
  10. package/dist/internal/codex.d.ts.map +1 -1
  11. package/dist/internal/codex.js +7 -1
  12. package/dist/internal/codex.js.map +1 -1
  13. package/dist/internal/platform.d.ts +8 -0
  14. package/dist/internal/platform.d.ts.map +1 -1
  15. package/dist/internal/platform.js +46 -2
  16. package/dist/internal/platform.js.map +1 -1
  17. package/dist/provision.d.ts +30 -0
  18. package/dist/provision.d.ts.map +1 -0
  19. package/dist/provision.js +202 -0
  20. package/dist/provision.js.map +1 -0
  21. package/dist/validate/index.d.ts +44 -0
  22. package/dist/validate/index.d.ts.map +1 -1
  23. package/dist/validate/index.js +157 -0
  24. package/dist/validate/index.js.map +1 -1
  25. package/extensions/cmux/.agents/plugin.json +37 -0
  26. package/extensions/cmux/skills/cmux/SKILL.md +82 -0
  27. package/extensions/cmux/skills/cmux/agents/openai.yaml +4 -0
  28. package/extensions/cmux/skills/cmux/references/handles-and-identify.md +35 -0
  29. package/extensions/cmux/skills/cmux/references/panes-surfaces.md +37 -0
  30. package/extensions/cmux/skills/cmux/references/trigger-flash-and-health.md +23 -0
  31. package/extensions/cmux/skills/cmux/references/windows-workspaces.md +31 -0
  32. package/extensions/cmux/skills/cmux-vm-monitor/SKILL.md +122 -0
  33. package/extensions/cmux/skills/cmux-vm-monitor/agents/openai.yaml +4 -0
  34. package/extensions/cmux/skills/cmux-vm-monitor/references/cmux-commands.md +66 -0
  35. package/extensions/cmux/skills/cmux-vm-monitor/scripts/codex_vm_monitor.sh +45 -0
  36. package/extensions/cmux/skills/cmux-workspace/SKILL.md +93 -0
  37. package/extensions/dev-state/.agents/plugin.json +35 -0
  38. package/extensions/dev-state/skills/dev-state-plan-graduation/SKILL.md +194 -0
  39. package/extensions/dev-state/skills/dev-state-plan-graduation/agents/openai.yaml +4 -0
  40. package/extensions/dev-state/skills/dev-state-plan-graduation/references/reference.md +130 -0
  41. package/extensions/devops/.agents/plugin.json +36 -0
  42. package/extensions/devops/skills/azure-devops-cli/SKILL.md +431 -0
  43. package/extensions/devops/skills/azure-devops-cli/agents/openai.yaml +4 -0
  44. package/extensions/devops/skills/ci-pipeline-strategy/SKILL.md +217 -0
  45. package/extensions/devops/skills/ci-pipeline-strategy/agents/openai.yaml +4 -0
  46. package/extensions/enact-context/.agents/plugin.json +40 -0
  47. package/extensions/enact-context/.mcp.json +8 -0
  48. package/extensions/enact-context/README.md +25 -0
  49. package/extensions/enact-context/assets/icon.png +0 -0
  50. package/extensions/enact-context/assets/logo.png +0 -0
  51. package/extensions/enact-context/hooks/hooks.json +115 -0
  52. package/extensions/enact-context/skills/enact-context/SKILL.md +149 -0
  53. package/extensions/enact-context/skills/enact-context/scripts/install.sh +69 -0
  54. package/extensions/enact-factory/.agents/plugin.json +42 -0
  55. package/extensions/enact-factory/.mcp.json +8 -0
  56. package/extensions/enact-factory/assets/icon.png +0 -0
  57. package/extensions/enact-factory/assets/logo.png +0 -0
  58. package/extensions/enact-factory/hooks/user-prompt-submit.mjs +67 -0
  59. package/extensions/enact-factory/skills/testing-strategy/SKILL.md +167 -0
  60. package/extensions/enact-factory/skills/workitem-triage/SKILL.md +22 -0
  61. package/extensions/enact-operator/.agents/plugin.json +57 -0
  62. package/extensions/enact-operator/.app.json +3 -0
  63. package/extensions/enact-operator/.mcp.json +10 -0
  64. package/extensions/enact-operator/_taxonomy.md +86 -0
  65. package/extensions/enact-operator/agents/README.md +5 -0
  66. package/extensions/enact-operator/agents/architect.toml +25 -0
  67. package/extensions/enact-operator/agents/code-reviewer.toml +24 -0
  68. package/extensions/enact-operator/agents/critic.toml +30 -0
  69. package/extensions/enact-operator/agents/executor.toml +24 -0
  70. package/extensions/enact-operator/agents/explore.toml +23 -0
  71. package/extensions/enact-operator/agents/planner.toml +24 -0
  72. package/extensions/enact-operator/agents/verifier.toml +24 -0
  73. package/extensions/enact-operator/assets/icon.png +0 -0
  74. package/extensions/enact-operator/assets/logo.png +0 -0
  75. package/extensions/enact-operator/commands/doctor.md +39 -0
  76. package/extensions/enact-operator/commands/setup.md +51 -0
  77. package/extensions/enact-operator/hooks/hooks.json +146 -0
  78. package/extensions/enact-operator/skills/_variants.md +44 -0
  79. package/extensions/enact-operator/skills/ai-slop-cleaner/SKILL.md +50 -0
  80. package/extensions/enact-operator/skills/analyze/SKILL.md +91 -0
  81. package/extensions/enact-operator/skills/ask/SKILL.md +47 -0
  82. package/extensions/enact-operator/skills/autopilot/SKILL.md +170 -0
  83. package/extensions/enact-operator/skills/autoresearch-goal/SKILL.md +79 -0
  84. package/extensions/enact-operator/skills/cancel/SKILL.md +99 -0
  85. package/extensions/enact-operator/skills/configure-notifications/SKILL.md +77 -0
  86. package/extensions/enact-operator/skills/deep-interview/SKILL.md +80 -0
  87. package/extensions/enact-operator/skills/doctor/SKILL.md +48 -0
  88. package/extensions/enact-operator/skills/hud/SKILL.md +49 -0
  89. package/extensions/enact-operator/skills/hyperplan/SKILL.md +47 -0
  90. package/extensions/enact-operator/skills/plan/SKILL.md +78 -0
  91. package/extensions/enact-operator/skills/ralph/SKILL.md +201 -0
  92. package/extensions/enact-operator/skills/ralph/gemini.md +18 -0
  93. package/extensions/enact-operator/skills/ralplan/SKILL.md +151 -0
  94. package/extensions/enact-operator/skills/remove-deadcode/SKILL.md +45 -0
  95. package/extensions/enact-operator/skills/research/SKILL.md +74 -0
  96. package/extensions/enact-operator/skills/review/SKILL.md +58 -0
  97. package/extensions/enact-operator/skills/security-research/SKILL.md +54 -0
  98. package/extensions/enact-operator/skills/setup/SKILL.md +91 -0
  99. package/extensions/enact-operator/skills/setup/scripts/install.sh +50 -0
  100. package/extensions/enact-operator/skills/skill/SKILL.md +82 -0
  101. package/extensions/enact-operator/skills/tdd/SKILL.md +59 -0
  102. package/extensions/enact-operator/skills/team/SKILL.md +199 -0
  103. package/extensions/enact-operator/skills/trace/SKILL.md +41 -0
  104. package/extensions/enact-operator/skills/ultragoal/SKILL.md +99 -0
  105. package/extensions/enact-operator/skills/ultraqa/SKILL.md +113 -0
  106. package/extensions/enact-operator/skills/ultrawork/SKILL.md +145 -0
  107. package/extensions/enact-operator/skills/ultrawork/planner.md +28 -0
  108. package/extensions/enact-operator/skills/wiki/SKILL.md +41 -0
  109. package/extensions/enact-operator/skills/work-with-workitem/SKILL.md +51 -0
  110. package/extensions/enact-wiki/.agents/plugin.json +42 -0
  111. package/extensions/enact-wiki/.mcp.json +15 -0
  112. package/extensions/enact-wiki/README.md +44 -0
  113. package/extensions/enact-wiki/assets/icon.png +0 -0
  114. package/extensions/enact-wiki/assets/logo.png +0 -0
  115. package/extensions/enact-wiki/skills/document-parser/SKILL.md +17 -0
  116. package/extensions/enact-wiki/skills/document-parser/scripts/parse.sh +60 -0
  117. package/extensions/enact-wiki/skills/document-parser/skill.json +9 -0
  118. package/extensions/enact-wiki/skills/enact-wiki/SKILL.md +30 -0
  119. package/extensions/enact-wiki/skills/enact-wiki/references/ingest.md +62 -0
  120. package/extensions/enact-wiki/skills/enact-wiki/references/manage.md +34 -0
  121. package/extensions/enact-wiki/skills/enact-wiki/references/query.md +59 -0
  122. package/extensions/enact-wiki/skills/search-lab/SKILL.md +57 -0
  123. package/extensions/enact-wiki/skills/search-lab/scripts/analyze.ts +23 -0
  124. package/{plugins/net-revenue-management/.codex-plugin → extensions/net-revenue-management/.agents}/plugin.json +10 -6
  125. package/extensions/plugin-dev/.agents/plugin.json +42 -0
  126. package/extensions/plugin-dev/.mcp.json +3 -0
  127. package/extensions/plugin-dev/agents/agent-creator.md +199 -0
  128. package/extensions/plugin-dev/agents/plugin-validator.md +91 -0
  129. package/extensions/plugin-dev/agents/skill-reviewer.md +212 -0
  130. package/extensions/plugin-dev/commands/_archive/create-marketplace.md +427 -0
  131. package/extensions/plugin-dev/commands/_archive/plugin-dev-guide.md +12 -0
  132. package/extensions/plugin-dev/commands/create-plugin.md +498 -0
  133. package/extensions/plugin-dev/commands/start.md +81 -0
  134. package/extensions/plugin-dev/hooks/hooks.json +3 -0
  135. package/extensions/plugin-dev/skills/agent-development/SKILL.md +641 -0
  136. package/extensions/plugin-dev/skills/agent-development/examples/agent-creation-prompt.md +250 -0
  137. package/extensions/plugin-dev/skills/agent-development/examples/complete-agent-examples.md +461 -0
  138. package/extensions/plugin-dev/skills/agent-development/references/advanced-agent-fields.md +246 -0
  139. package/extensions/plugin-dev/skills/agent-development/references/agent-creation-system-prompt.md +216 -0
  140. package/extensions/plugin-dev/skills/agent-development/references/permission-modes-rules.md +226 -0
  141. package/extensions/plugin-dev/skills/agent-development/references/system-prompt-design.md +464 -0
  142. package/extensions/plugin-dev/skills/agent-development/references/triggering-examples.md +474 -0
  143. package/extensions/plugin-dev/skills/agent-development/scripts/create-agent-skeleton.sh +176 -0
  144. package/extensions/plugin-dev/skills/agent-development/scripts/test-agent-trigger.sh +227 -0
  145. package/extensions/plugin-dev/skills/agent-development/scripts/validate-agent.sh +227 -0
  146. package/extensions/plugin-dev/skills/command-development/SKILL.md +763 -0
  147. package/extensions/plugin-dev/skills/command-development/examples/plugin-commands.md +612 -0
  148. package/extensions/plugin-dev/skills/command-development/examples/simple-commands.md +527 -0
  149. package/extensions/plugin-dev/skills/command-development/references/advanced-workflows.md +762 -0
  150. package/extensions/plugin-dev/skills/command-development/references/documentation-patterns.md +769 -0
  151. package/extensions/plugin-dev/skills/command-development/references/frontmatter-reference.md +508 -0
  152. package/extensions/plugin-dev/skills/command-development/references/interactive-commands.md +966 -0
  153. package/extensions/plugin-dev/skills/command-development/references/marketplace-considerations.md +943 -0
  154. package/extensions/plugin-dev/skills/command-development/references/plugin-features-reference.md +637 -0
  155. package/extensions/plugin-dev/skills/command-development/references/plugin-integration.md +191 -0
  156. package/extensions/plugin-dev/skills/command-development/references/skill-tool.md +447 -0
  157. package/extensions/plugin-dev/skills/command-development/references/testing-strategies.md +723 -0
  158. package/extensions/plugin-dev/skills/command-development/scripts/check-frontmatter.sh +234 -0
  159. package/extensions/plugin-dev/skills/command-development/scripts/validate-command.sh +160 -0
  160. package/extensions/plugin-dev/skills/hook-development/SKILL.md +861 -0
  161. package/extensions/plugin-dev/skills/hook-development/examples/load-context.sh +55 -0
  162. package/extensions/plugin-dev/skills/hook-development/examples/validate-bash.sh +57 -0
  163. package/extensions/plugin-dev/skills/hook-development/examples/validate-write.sh +48 -0
  164. package/extensions/plugin-dev/skills/hook-development/references/advanced.md +871 -0
  165. package/extensions/plugin-dev/skills/hook-development/references/hook-input-schemas.md +145 -0
  166. package/extensions/plugin-dev/skills/hook-development/references/migration.md +392 -0
  167. package/extensions/plugin-dev/skills/hook-development/references/patterns.md +430 -0
  168. package/extensions/plugin-dev/skills/hook-development/scripts/README.md +181 -0
  169. package/extensions/plugin-dev/skills/hook-development/scripts/hook-linter.sh +153 -0
  170. package/extensions/plugin-dev/skills/hook-development/scripts/test-hook.sh +276 -0
  171. package/extensions/plugin-dev/skills/hook-development/scripts/validate-hook-schema.sh +159 -0
  172. package/extensions/plugin-dev/skills/mcp-integration/SKILL.md +775 -0
  173. package/extensions/plugin-dev/skills/mcp-integration/examples/http-server.json +20 -0
  174. package/extensions/plugin-dev/skills/mcp-integration/examples/sse-server.json +19 -0
  175. package/extensions/plugin-dev/skills/mcp-integration/examples/stdio-server.json +38 -0
  176. package/extensions/plugin-dev/skills/mcp-integration/examples/ws-server.json +26 -0
  177. package/extensions/plugin-dev/skills/mcp-integration/references/authentication.md +601 -0
  178. package/extensions/plugin-dev/skills/mcp-integration/references/server-discovery.md +190 -0
  179. package/extensions/plugin-dev/skills/mcp-integration/references/server-types.md +572 -0
  180. package/extensions/plugin-dev/skills/mcp-integration/references/tool-usage.md +623 -0
  181. package/extensions/plugin-dev/skills/plugin-dev-guide/SKILL.md +222 -0
  182. package/extensions/plugin-dev/skills/plugin-structure/SKILL.md +705 -0
  183. package/extensions/plugin-dev/skills/plugin-structure/examples/advanced-plugin.md +774 -0
  184. package/extensions/plugin-dev/skills/plugin-structure/examples/minimal-plugin.md +83 -0
  185. package/extensions/plugin-dev/skills/plugin-structure/examples/standard-plugin.md +611 -0
  186. package/extensions/plugin-dev/skills/plugin-structure/references/advanced-topics.md +289 -0
  187. package/extensions/plugin-dev/skills/plugin-structure/references/component-patterns.md +592 -0
  188. package/extensions/plugin-dev/skills/plugin-structure/references/github-actions.md +233 -0
  189. package/extensions/plugin-dev/skills/plugin-structure/references/headless-ci-mode.md +193 -0
  190. package/extensions/plugin-dev/skills/plugin-structure/references/manifest-reference.md +625 -0
  191. package/extensions/plugin-dev/skills/plugin-structure/references/output-styles.md +116 -0
  192. package/extensions/plugin-dev/skills/skill-development/SKILL.md +564 -0
  193. package/extensions/plugin-dev/skills/skill-development/examples/complete-skill.md +465 -0
  194. package/extensions/plugin-dev/skills/skill-development/examples/frontmatter-templates.md +167 -0
  195. package/extensions/plugin-dev/skills/skill-development/examples/minimal-skill.md +111 -0
  196. package/extensions/plugin-dev/skills/skill-development/references/advanced-frontmatter.md +225 -0
  197. package/extensions/plugin-dev/skills/skill-development/references/commands-vs-skills.md +39 -0
  198. package/extensions/plugin-dev/skills/skill-development/references/skill-creation-workflow.md +379 -0
  199. package/extensions/plugin-dev/skills/skill-development/references/skill-creator-original.md +210 -0
  200. package/package.json +8 -11
  201. package/scripts/enact-extensions.mjs +823 -21
  202. package/scripts/hooks/session-start-drift-check.mjs +58 -0
  203. package/scripts/lib/build-index.mjs +50 -0
  204. package/scripts/lib/bundle-hash.mjs +137 -0
  205. package/scripts/lib/hooks.mjs +741 -0
  206. package/scripts/lib/ledger.mjs +163 -0
  207. package/scripts/lib/list-bundles.mjs +70 -0
  208. package/scripts/lib/outdated.mjs +144 -0
  209. package/scripts/lib/provision-mcp.mjs +16 -0
  210. package/scripts/lib/resolve-bundle.mjs +121 -0
  211. package/scripts/lib/run-install.mjs +402 -38
  212. package/scripts/lib/run-prune.mjs +73 -0
  213. package/scripts/lib/run-sync.mjs +9 -1
  214. package/scripts/lib/run-uninstall.mjs +244 -0
  215. package/scripts/lib/run-update.mjs +152 -0
  216. package/scripts/lib/run-validate.mjs +21 -18
  217. package/scripts/lib/serve.mjs +472 -0
  218. package/scripts/postinstall.mjs +63 -0
  219. package/scripts/setup-enact-context.sh +2 -2
  220. package/scripts/version-bump.sh +463 -0
  221. package/spec/codex.json +1 -11
  222. package/spec/index.json +59 -0
  223. package/web/assets/README.md +111 -0
  224. package/web/assets/logo-full.png +0 -0
  225. package/web/assets/logo-slim.png +0 -0
  226. package/web/assets/tokens/base.css +45 -0
  227. package/web/assets/tokens/colors.css +248 -0
  228. package/web/assets/tokens/effects.css +24 -0
  229. package/web/assets/tokens/fonts.css +8 -0
  230. package/web/assets/tokens/index.css +18 -0
  231. package/web/assets/tokens/spacing.css +50 -0
  232. package/web/index.html +1188 -0
  233. package/.agents/plugins/marketplace.json +0 -20
  234. package/catalog/enact-context.json +0 -9
  235. package/catalog/enact-factory.json +0 -7
  236. package/catalog/enact-operator.json +0 -7
  237. package/catalog/enact-wiki.json +0 -7
  238. package/catalog/net-revenue-management.json +0 -8
  239. package/scripts/rename-supervisor-to-operator.pl +0 -66
  240. package/scripts/sync-manifests.mjs +0 -23
  241. package/scripts/validate-catalog.mjs +0 -37
  242. package/scripts/validate-plugin.mjs +0 -10
  243. /package/{plugins → extensions}/net-revenue-management/.mcp.json +0 -0
  244. /package/{plugins → extensions}/net-revenue-management/skills/net-revenue-risks/SKILL.md +0 -0
  245. /package/{plugins → extensions}/net-revenue-management/skills/net-revenue-scenario/SKILL.md +0 -0
@@ -0,0 +1,465 @@
1
+ # Complete Skill Example
2
+
3
+ A full-featured skill demonstrating all optional components and progressive disclosure.
4
+
5
+ ## Directory Structure
6
+
7
+ ```text
8
+ api-testing/
9
+ ├── SKILL.md
10
+ ├── references/
11
+ │ ├── assertion-patterns.md
12
+ │ └── authentication-guide.md
13
+ ├── examples/
14
+ │ ├── rest-api-tests.sh
15
+ │ └── graphql-tests.sh
16
+ └── scripts/
17
+ └── generate-test.sh
18
+ ```
19
+
20
+ ## File Contents
21
+
22
+ ### SKILL.md
23
+
24
+ ````markdown
25
+ ---
26
+ name: api-testing
27
+ description: This skill should be used when the user asks to "write API tests", "test REST endpoints", "test GraphQL queries", "create integration tests for APIs", "mock API responses", "test authentication flows", or needs guidance on API testing patterns, assertion strategies, or test organization.
28
+ ---
29
+
30
+ # API Testing
31
+
32
+ This skill provides guidance for writing comprehensive API tests.
33
+
34
+ ## Quick Start
35
+
36
+ To write an API test:
37
+
38
+ 1. Identify the endpoint and expected behavior
39
+ 2. Set up authentication if required
40
+ 3. Make the request with appropriate headers
41
+ 4. Assert response status, body, and headers
42
+ 5. Clean up test data if needed
43
+
44
+ ## Test Structure
45
+
46
+ Organize tests by resource and operation:
47
+
48
+ ```text
49
+ tests/
50
+ ├── auth/
51
+ │ ├── login.test.js
52
+ │ └── refresh-token.test.js
53
+ ├── users/
54
+ │ ├── create-user.test.js
55
+ │ ├── get-user.test.js
56
+ │ └── update-user.test.js
57
+ └── helpers/
58
+ ├── auth.js
59
+ └── fixtures.js
60
+ ```
61
+ ````
62
+
63
+ ## Core Patterns
64
+
65
+ ### Request Pattern
66
+
67
+ ```javascript
68
+ const response = await request(app)
69
+ .post("/api/users")
70
+ .set("Authorization", `Bearer ${token}`)
71
+ .send({ name: "Test User", email: "test@example.com" })
72
+ .expect(201);
73
+ ```
74
+
75
+ ### Assertion Pattern
76
+
77
+ ```javascript
78
+ expect(response.body).toMatchObject({
79
+ id: expect.any(String),
80
+ name: "Test User",
81
+ createdAt: expect.any(String),
82
+ });
83
+ ```
84
+
85
+ ## Authentication
86
+
87
+ For authenticated endpoints, see `references/authentication-guide.md` for detailed patterns including:
88
+
89
+ - JWT token handling
90
+ - OAuth2 flows
91
+ - API key authentication
92
+ - Session-based auth
93
+
94
+ ## Advanced Assertions
95
+
96
+ For complex assertion patterns including nested objects, arrays, and error responses, see `references/assertion-patterns.md`.
97
+
98
+ ## Generating Tests
99
+
100
+ Use the test generator script for scaffolding:
101
+
102
+ ```bash
103
+ ./scripts/generate-test.sh users create-user POST /api/users
104
+ ```
105
+
106
+ ## Working Examples
107
+
108
+ See `examples/` for complete test files:
109
+
110
+ - `rest-api-tests.sh` - curl-based REST API tests
111
+ - `graphql-tests.sh` - GraphQL query tests
112
+
113
+ ````
114
+
115
+ ### references/authentication-guide.md
116
+
117
+ ```markdown
118
+ # Authentication Testing Guide
119
+
120
+ Detailed patterns for testing authenticated API endpoints.
121
+
122
+ ## JWT Authentication
123
+
124
+ ### Setup Helper
125
+
126
+ ```javascript
127
+ // helpers/auth.js
128
+ const jwt = require('jsonwebtoken');
129
+
130
+ function generateTestToken(userId, role = 'user') {
131
+ return jwt.sign(
132
+ { sub: userId, role },
133
+ process.env.JWT_SECRET,
134
+ { expiresIn: '1h' }
135
+ );
136
+ }
137
+
138
+ function generateExpiredToken(userId) {
139
+ return jwt.sign(
140
+ { sub: userId },
141
+ process.env.JWT_SECRET,
142
+ { expiresIn: '-1h' }
143
+ );
144
+ }
145
+
146
+ module.exports = { generateTestToken, generateExpiredToken };
147
+ ````
148
+
149
+ ### Test Cases
150
+
151
+ ```javascript
152
+ describe("Protected Endpoints", () => {
153
+ it("returns 401 without token", async () => {
154
+ await request(app).get("/api/profile").expect(401);
155
+ });
156
+
157
+ it("returns 401 with expired token", async () => {
158
+ const token = generateExpiredToken("user-123");
159
+ await request(app)
160
+ .get("/api/profile")
161
+ .set("Authorization", `Bearer ${token}`)
162
+ .expect(401);
163
+ });
164
+
165
+ it("returns 200 with valid token", async () => {
166
+ const token = generateTestToken("user-123");
167
+ await request(app)
168
+ .get("/api/profile")
169
+ .set("Authorization", `Bearer ${token}`)
170
+ .expect(200);
171
+ });
172
+ });
173
+ ```
174
+
175
+ ## API Key Authentication
176
+
177
+ ```javascript
178
+ describe("API Key Auth", () => {
179
+ it("accepts valid API key in header", async () => {
180
+ await request(app)
181
+ .get("/api/data")
182
+ .set("X-API-Key", process.env.TEST_API_KEY)
183
+ .expect(200);
184
+ });
185
+
186
+ it("accepts valid API key in query", async () => {
187
+ await request(app)
188
+ .get(`/api/data?api_key=${process.env.TEST_API_KEY}`)
189
+ .expect(200);
190
+ });
191
+ });
192
+ ```
193
+
194
+ ````
195
+
196
+ ### references/assertion-patterns.md
197
+
198
+ ```markdown
199
+ # Assertion Patterns
200
+
201
+ Common assertion patterns for API response validation.
202
+
203
+ ## Object Matching
204
+
205
+ ### Exact Match
206
+
207
+ ```javascript
208
+ expect(response.body).toEqual({
209
+ id: '123',
210
+ name: 'Test',
211
+ active: true
212
+ });
213
+ ````
214
+
215
+ ### Partial Match
216
+
217
+ ```javascript
218
+ expect(response.body).toMatchObject({
219
+ name: "Test",
220
+ active: true,
221
+ // id can be anything
222
+ });
223
+ ```
224
+
225
+ ### Type Matching
226
+
227
+ ```javascript
228
+ expect(response.body).toMatchObject({
229
+ id: expect.any(String),
230
+ count: expect.any(Number),
231
+ tags: expect.any(Array),
232
+ meta: expect.any(Object),
233
+ });
234
+ ```
235
+
236
+ ## Array Assertions
237
+
238
+ ### Contains Item
239
+
240
+ ```javascript
241
+ expect(response.body.items).toContainEqual(
242
+ expect.objectContaining({ name: "Test" }),
243
+ );
244
+ ```
245
+
246
+ ### Array Length
247
+
248
+ ```javascript
249
+ expect(response.body.items).toHaveLength(10);
250
+ ```
251
+
252
+ ### All Items Match
253
+
254
+ ```javascript
255
+ response.body.items.forEach((item) => {
256
+ expect(item).toHaveProperty("id");
257
+ expect(item).toHaveProperty("createdAt");
258
+ });
259
+ ```
260
+
261
+ ## Error Response Assertions
262
+
263
+ ```javascript
264
+ expect(response.body).toMatchObject({
265
+ error: {
266
+ code: "VALIDATION_ERROR",
267
+ message: expect.any(String),
268
+ details: expect.any(Array),
269
+ },
270
+ });
271
+ ```
272
+
273
+ ````
274
+
275
+ ### examples/rest-api-tests.sh
276
+
277
+ ```bash
278
+ #!/bin/bash
279
+ # REST API test examples using curl
280
+
281
+ BASE_URL="${API_URL:-http://localhost:3000}"
282
+ TOKEN="${TEST_TOKEN:-}"
283
+
284
+ # Test: Create user
285
+ echo "Testing POST /api/users..."
286
+ response=$(curl -s -w "\n%{http_code}" \
287
+ -X POST "$BASE_URL/api/users" \
288
+ -H "Content-Type: application/json" \
289
+ -H "Authorization: Bearer $TOKEN" \
290
+ -d '{"name": "Test User", "email": "test@example.com"}')
291
+
292
+ status=$(echo "$response" | tail -1)
293
+ body=$(echo "$response" | head -n -1)
294
+
295
+ if [ "$status" = "201" ]; then
296
+ echo "PASS: User created"
297
+ echo "$body" | jq .
298
+ else
299
+ echo "FAIL: Expected 201, got $status"
300
+ exit 1
301
+ fi
302
+
303
+ # Test: Get user
304
+ echo "Testing GET /api/users/1..."
305
+ response=$(curl -s -w "\n%{http_code}" \
306
+ -X GET "$BASE_URL/api/users/1" \
307
+ -H "Authorization: Bearer $TOKEN")
308
+
309
+ status=$(echo "$response" | tail -1)
310
+
311
+ if [ "$status" = "200" ]; then
312
+ echo "PASS: User retrieved"
313
+ else
314
+ echo "FAIL: Expected 200, got $status"
315
+ exit 1
316
+ fi
317
+
318
+ echo "All tests passed!"
319
+ ````
320
+
321
+ ### examples/graphql-tests.sh
322
+
323
+ ```bash
324
+ #!/bin/bash
325
+ # GraphQL API test examples
326
+
327
+ BASE_URL="${API_URL:-http://localhost:3000/graphql}"
328
+ TOKEN="${TEST_TOKEN:-}"
329
+
330
+ # Test: Query users
331
+ echo "Testing users query..."
332
+ response=$(curl -s -w "\n%{http_code}" \
333
+ -X POST "$BASE_URL" \
334
+ -H "Content-Type: application/json" \
335
+ -H "Authorization: Bearer $TOKEN" \
336
+ -d '{"query": "{ users { id name email } }"}')
337
+
338
+ status=$(echo "$response" | tail -1)
339
+ body=$(echo "$response" | head -n -1)
340
+
341
+ if [ "$status" = "200" ] && echo "$body" | jq -e '.data.users' > /dev/null; then
342
+ echo "PASS: Users query successful"
343
+ else
344
+ echo "FAIL: Query failed"
345
+ exit 1
346
+ fi
347
+
348
+ # Test: Mutation
349
+ echo "Testing createUser mutation..."
350
+ response=$(curl -s -w "\n%{http_code}" \
351
+ -X POST "$BASE_URL" \
352
+ -H "Content-Type: application/json" \
353
+ -H "Authorization: Bearer $TOKEN" \
354
+ -d '{"query": "mutation { createUser(input: {name: \"Test\", email: \"test@example.com\"}) { id } }"}')
355
+
356
+ status=$(echo "$response" | tail -1)
357
+
358
+ if [ "$status" = "200" ]; then
359
+ echo "PASS: Mutation successful"
360
+ else
361
+ echo "FAIL: Mutation failed"
362
+ exit 1
363
+ fi
364
+
365
+ echo "All GraphQL tests passed!"
366
+ ```
367
+
368
+ ### scripts/generate-test.sh
369
+
370
+ ```bash
371
+ #!/bin/bash
372
+ # Generate API test scaffold
373
+ # Usage: ./generate-test.sh <resource> <operation> <method> <endpoint>
374
+ # Example: ./generate-test.sh users create-user POST /api/users
375
+
376
+ set -e
377
+
378
+ RESOURCE="${1:?Resource name required}"
379
+ OPERATION="${2:?Operation name required}"
380
+ METHOD="${3:-GET}"
381
+ ENDPOINT="${4:-/api/$RESOURCE}"
382
+
383
+ OUTPUT_DIR="tests/$RESOURCE"
384
+ OUTPUT_FILE="$OUTPUT_DIR/$OPERATION.test.js"
385
+
386
+ mkdir -p "$OUTPUT_DIR"
387
+
388
+ cat > "$OUTPUT_FILE" << EOF
389
+ const request = require('supertest');
390
+ const app = require('../../src/app');
391
+ const { generateTestToken } = require('../helpers/auth');
392
+
393
+ describe('$METHOD $ENDPOINT', () => {
394
+ let token;
395
+
396
+ beforeAll(() => {
397
+ token = generateTestToken('test-user-id');
398
+ });
399
+
400
+ it('returns expected response', async () => {
401
+ const response = await request(app)
402
+ .${METHOD,,}('$ENDPOINT')
403
+ .set('Authorization', \`Bearer \${token}\`)
404
+ .expect(200);
405
+
406
+ expect(response.body).toBeDefined();
407
+ // Add specific assertions here
408
+ });
409
+
410
+ it('returns 401 without authentication', async () => {
411
+ await request(app)
412
+ .${METHOD,,}('$ENDPOINT')
413
+ .expect(401);
414
+ });
415
+ });
416
+ EOF
417
+
418
+ echo "Generated: $OUTPUT_FILE"
419
+ ```
420
+
421
+ ## Usage
422
+
423
+ After installing the plugin containing this skill:
424
+
425
+ ```text
426
+ $ claude
427
+ > How do I write tests for my REST API?
428
+
429
+ [Skill loads with core patterns, references available for details]
430
+
431
+ > Show me authentication testing patterns
432
+
433
+ [Claude loads references/authentication-guide.md for detailed examples]
434
+
435
+ > Generate a test scaffold for my users endpoint
436
+
437
+ [Claude uses scripts/generate-test.sh or explains the pattern]
438
+ ```
439
+
440
+ ## Key Points
441
+
442
+ 1. **Progressive disclosure**: Core patterns in SKILL.md, details in references/
443
+ 2. **Working examples**: Real executable scripts users can run
444
+ 3. **Utility scripts**: Automation for common tasks
445
+ 4. **Strong triggers**: Multiple specific phrases for different use cases
446
+ 5. **Cross-references**: SKILL.md points to resources when appropriate
447
+
448
+ ## When to Use This Pattern
449
+
450
+ - Complex domains requiring detailed documentation
451
+ - Skills with reusable scripts or utilities
452
+ - Topics with multiple sub-areas (auth, assertions, etc.)
453
+ - Skills that benefit from working code examples
454
+
455
+ ## Progressive Disclosure in Action
456
+
457
+ | Level | Content | Word Count |
458
+ | ----------- | -------------------------- | ---------- |
459
+ | Metadata | name + description | ~50 words |
460
+ | SKILL.md | Core patterns, quick start | ~400 words |
461
+ | references/ | Detailed guides | ~600 words |
462
+ | examples/ | Working code | N/A (code) |
463
+ | scripts/ | Automation | N/A (code) |
464
+
465
+ Total context loaded depends on user needs, not skill complexity.
@@ -0,0 +1,167 @@
1
+ # Frontmatter Templates
2
+
3
+ Copy-paste ready YAML frontmatter templates for common skill patterns.
4
+
5
+ ## Basic Skill
6
+
7
+ The minimal required frontmatter:
8
+
9
+ ```yaml
10
+ ---
11
+ name: skill-name
12
+ description: This skill should be used when the user asks to "do X", "perform Y", or needs guidance on Z.
13
+ ---
14
+ ```
15
+
16
+ **Requirements:**
17
+
18
+ - `name`: kebab-case, matches directory name
19
+ - `description`: Third-person, starts with "This skill should be used when..."
20
+
21
+ ## Skill with Strong Triggers
22
+
23
+ Multiple specific trigger phrases for better activation:
24
+
25
+ ```yaml
26
+ ---
27
+ name: database-migrations
28
+ description: This skill should be used when the user asks to "create a migration", "run migrations", "rollback migration", "migration status", "schema changes", "alter table", "add column", "database versioning", or needs guidance on database migration patterns, schema evolution, or migration best practices.
29
+ ---
30
+ ```
31
+
32
+ **Best practices:**
33
+
34
+ - Include 5-10 specific trigger phrases
35
+ - Use phrases users actually say (quoted)
36
+ - Cover variations ("create a migration", "write migration", "new migration")
37
+ - Include related concepts ("schema changes", "alter table")
38
+
39
+ ## Read-Only Skill
40
+
41
+ Restrict to read-only tools for safe exploration:
42
+
43
+ ```yaml
44
+ ---
45
+ name: codebase-analyzer
46
+ description: This skill should be used when the user asks to "analyze codebase", "find patterns", "code quality report", "architecture overview", "dependency analysis", or needs guidance on understanding existing code structure.
47
+ allowed-tools: Read, Grep, Glob, Task
48
+ ---
49
+ ```
50
+
51
+ **Use cases:**
52
+
53
+ - Code analysis and exploration
54
+ - Documentation generation
55
+ - Security audits
56
+ - Dependency reviews
57
+
58
+ ## Multi-Domain Skill
59
+
60
+ Skill covering related sub-topics:
61
+
62
+ ```yaml
63
+ ---
64
+ name: aws-infrastructure
65
+ description: This skill should be used when the user asks to "deploy to AWS", "configure S3", "set up Lambda", "create EC2 instance", "configure IAM", "CloudFormation template", "AWS CDK", "Terraform for AWS", or needs guidance on AWS services, infrastructure as code, or cloud deployment patterns.
66
+ ---
67
+ ```
68
+
69
+ **Organization tip:** Use references/ subdirectories for sub-topics:
70
+
71
+ ```text
72
+ references/
73
+ ├── compute/
74
+ │ ├── ec2.md
75
+ │ └── lambda.md
76
+ ├── storage/
77
+ │ └── s3.md
78
+ └── iam/
79
+ └── policies.md
80
+ ```
81
+
82
+ ## Security-Focused Skill
83
+
84
+ Restricted tools for sensitive operations:
85
+
86
+ ```yaml
87
+ ---
88
+ name: secrets-manager
89
+ description: This skill should be used when the user asks to "manage secrets", "rotate credentials", "environment variables", "secure configuration", "vault integration", or needs guidance on secrets management patterns.
90
+ allowed-tools: Read, Grep, AskUserQuestion
91
+ ---
92
+ ```
93
+
94
+ **Security considerations:**
95
+
96
+ - Exclude Write, Edit, Bash to prevent accidental exposure
97
+ - Include AskUserQuestion for confirmation flows
98
+ - Document why restrictions exist in SKILL.md
99
+
100
+ ## Plugin-Specific Skill
101
+
102
+ Skill designed for a specific plugin context:
103
+
104
+ ```yaml
105
+ ---
106
+ name: plugin-testing
107
+ description: This skill should be used when the user asks to "test plugin", "validate plugin", "plugin integration tests", "test commands", "test hooks", "test agents", or needs guidance on testing Claude Code plugin components.
108
+ ---
109
+ ```
110
+
111
+ **Plugin context:**
112
+
113
+ - Reference plugin-specific paths with `${CLAUDE_PLUGIN_ROOT}`
114
+ - Assume plugin structure exists
115
+ - Cross-reference other plugin skills
116
+
117
+ ## Frontmatter Field Reference
118
+
119
+ | Field | Required | Type | Description |
120
+ | --------------- | -------- | ------ | ----------------------------- |
121
+ | `name` | Yes | string | Skill identifier (kebab-case) |
122
+ | `description` | Yes | string | When to use (third-person) |
123
+ | `allowed-tools` | No | string | Comma-separated tool names |
124
+
125
+ ## Common Mistakes
126
+
127
+ ### Wrong: Second-person description
128
+
129
+ ```yaml
130
+ # DON'T
131
+ description: Use this skill when you want to create migrations.
132
+ ```
133
+
134
+ ### Right: Third-person description
135
+
136
+ ```yaml
137
+ # DO
138
+ description: This skill should be used when the user asks to "create migrations"...
139
+ ```
140
+
141
+ ### Wrong: Vague triggers
142
+
143
+ ```yaml
144
+ # DON'T
145
+ description: This skill should be used for database stuff.
146
+ ```
147
+
148
+ ### Right: Specific triggers
149
+
150
+ ```yaml
151
+ # DO
152
+ description: This skill should be used when the user asks to "create a migration", "run migrations", "rollback migration"...
153
+ ```
154
+
155
+ ### Wrong: Missing quotes around phrases
156
+
157
+ ```yaml
158
+ # DON'T
159
+ description: This skill should be used when the user asks to create a migration...
160
+ ```
161
+
162
+ ### Right: Quoted trigger phrases
163
+
164
+ ```yaml
165
+ # DO
166
+ description: This skill should be used when the user asks to "create a migration"...
167
+ ```