@heytherevibin/skillforge 0.2.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.
Files changed (402) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/CODE_OF_CONDUCT.md +34 -0
  3. package/CONTRIBUTING.md +38 -0
  4. package/LICENSE +21 -0
  5. package/README.md +337 -0
  6. package/RELEASING.md +93 -0
  7. package/SECURITY.md +31 -0
  8. package/STRATEGY.md +26 -0
  9. package/bin/cli.js +547 -0
  10. package/lib/packs.js +184 -0
  11. package/package.json +38 -0
  12. package/python/app/__init__.py +0 -0
  13. package/python/app/__pycache__/__init__.cpython-312.pyc +0 -0
  14. package/python/app/__pycache__/auth.cpython-312.pyc +0 -0
  15. package/python/app/__pycache__/main.cpython-312.pyc +0 -0
  16. package/python/app/auth.py +63 -0
  17. package/python/app/cli.py +78 -0
  18. package/python/app/db_paths.py +26 -0
  19. package/python/app/events_cli.py +175 -0
  20. package/python/app/main.py +647 -0
  21. package/python/app/materialize.py +138 -0
  22. package/python/app/mcp_server.py +610 -0
  23. package/python/app/route_cli.py +117 -0
  24. package/python/requirements-dev.txt +1 -0
  25. package/python/requirements.txt +7 -0
  26. package/python/tests/test_db_paths.py +41 -0
  27. package/skills/accessibility/SKILL.md +145 -0
  28. package/skills/agent-architecture-audit/SKILL.md +256 -0
  29. package/skills/agent-eval/SKILL.md +144 -0
  30. package/skills/agent-harness-construction/SKILL.md +72 -0
  31. package/skills/agent-introspection-debugging/SKILL.md +152 -0
  32. package/skills/agent-payment-x402/SKILL.md +224 -0
  33. package/skills/agent-sort/SKILL.md +214 -0
  34. package/skills/agentic-engineering/SKILL.md +62 -0
  35. package/skills/agentic-os/SKILL.md +386 -0
  36. package/skills/ai-first-engineering/SKILL.md +50 -0
  37. package/skills/ai-regression-testing/SKILL.md +384 -0
  38. package/skills/android-clean-architecture/SKILL.md +338 -0
  39. package/skills/angular-developer/SKILL.md +153 -0
  40. package/skills/angular-developer/references/angular-animations.md +160 -0
  41. package/skills/angular-developer/references/angular-aria.md +410 -0
  42. package/skills/angular-developer/references/cli.md +86 -0
  43. package/skills/angular-developer/references/component-harnesses.md +59 -0
  44. package/skills/angular-developer/references/component-styling.md +91 -0
  45. package/skills/angular-developer/references/components.md +117 -0
  46. package/skills/angular-developer/references/creating-services.md +97 -0
  47. package/skills/angular-developer/references/data-resolvers.md +69 -0
  48. package/skills/angular-developer/references/define-routes.md +67 -0
  49. package/skills/angular-developer/references/defining-providers.md +72 -0
  50. package/skills/angular-developer/references/di-fundamentals.md +120 -0
  51. package/skills/angular-developer/references/e2e-testing.md +56 -0
  52. package/skills/angular-developer/references/effects.md +83 -0
  53. package/skills/angular-developer/references/hierarchical-injectors.md +43 -0
  54. package/skills/angular-developer/references/host-elements.md +80 -0
  55. package/skills/angular-developer/references/injection-context.md +63 -0
  56. package/skills/angular-developer/references/inputs.md +101 -0
  57. package/skills/angular-developer/references/linked-signal.md +59 -0
  58. package/skills/angular-developer/references/loading-strategies.md +61 -0
  59. package/skills/angular-developer/references/mcp.md +108 -0
  60. package/skills/angular-developer/references/navigate-to-routes.md +69 -0
  61. package/skills/angular-developer/references/outputs.md +86 -0
  62. package/skills/angular-developer/references/reactive-forms.md +122 -0
  63. package/skills/angular-developer/references/rendering-strategies.md +44 -0
  64. package/skills/angular-developer/references/resource.md +77 -0
  65. package/skills/angular-developer/references/route-animations.md +56 -0
  66. package/skills/angular-developer/references/route-guards.md +52 -0
  67. package/skills/angular-developer/references/router-lifecycle.md +45 -0
  68. package/skills/angular-developer/references/router-testing.md +87 -0
  69. package/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
  70. package/skills/angular-developer/references/signal-forms.md +795 -0
  71. package/skills/angular-developer/references/signals-overview.md +94 -0
  72. package/skills/angular-developer/references/tailwind-css.md +69 -0
  73. package/skills/angular-developer/references/template-driven-forms.md +114 -0
  74. package/skills/angular-developer/references/testing-fundamentals.md +65 -0
  75. package/skills/api-connector-builder/SKILL.md +120 -0
  76. package/skills/api-design/SKILL.md +522 -0
  77. package/skills/architecture-decision-records/SKILL.md +178 -0
  78. package/skills/article-writing/SKILL.md +78 -0
  79. package/skills/automation-audit-ops/SKILL.md +141 -0
  80. package/skills/autonomous-agent-harness/SKILL.md +272 -0
  81. package/skills/autonomous-loops/SKILL.md +609 -0
  82. package/skills/backend-patterns/SKILL.md +560 -0
  83. package/skills/benchmark/SKILL.md +92 -0
  84. package/skills/blueprint/SKILL.md +104 -0
  85. package/skills/browser-qa/SKILL.md +86 -0
  86. package/skills/bun-runtime/SKILL.md +83 -0
  87. package/skills/canary-watch/SKILL.md +98 -0
  88. package/skills/carrier-relationship-management/SKILL.md +211 -0
  89. package/skills/cisco-ios-patterns/SKILL.md +163 -0
  90. package/skills/ck/SKILL.md +147 -0
  91. package/skills/ck/commands/forget.mjs +44 -0
  92. package/skills/ck/commands/info.mjs +24 -0
  93. package/skills/ck/commands/init.mjs +143 -0
  94. package/skills/ck/commands/list.mjs +40 -0
  95. package/skills/ck/commands/migrate.mjs +202 -0
  96. package/skills/ck/commands/resume.mjs +36 -0
  97. package/skills/ck/commands/save.mjs +210 -0
  98. package/skills/ck/commands/shared.mjs +387 -0
  99. package/skills/ck/hooks/session-start.mjs +224 -0
  100. package/skills/claude-devfleet/SKILL.md +103 -0
  101. package/skills/click-path-audit/SKILL.md +244 -0
  102. package/skills/clickhouse-io/SKILL.md +438 -0
  103. package/skills/code-tour/SKILL.md +235 -0
  104. package/skills/codebase-onboarding/SKILL.md +232 -0
  105. package/skills/coding-standards/SKILL.md +548 -0
  106. package/skills/compose-multiplatform-patterns/SKILL.md +298 -0
  107. package/skills/connections-optimizer/SKILL.md +188 -0
  108. package/skills/content-engine/SKILL.md +126 -0
  109. package/skills/content-hash-cache-pattern/SKILL.md +160 -0
  110. package/skills/context-budget/SKILL.md +134 -0
  111. package/skills/continuous-agent-loop/SKILL.md +44 -0
  112. package/skills/continuous-learning/SKILL.md +129 -0
  113. package/skills/continuous-learning/config.json +18 -0
  114. package/skills/continuous-learning/evaluate-session.sh +69 -0
  115. package/skills/continuous-learning-v2/SKILL.md +358 -0
  116. package/skills/continuous-learning-v2/agents/observer-loop.sh +322 -0
  117. package/skills/continuous-learning-v2/agents/observer.md +198 -0
  118. package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
  119. package/skills/continuous-learning-v2/agents/start-observer.sh +248 -0
  120. package/skills/continuous-learning-v2/config.json +8 -0
  121. package/skills/continuous-learning-v2/hooks/observe.sh +476 -0
  122. package/skills/continuous-learning-v2/scripts/detect-project.sh +288 -0
  123. package/skills/continuous-learning-v2/scripts/instinct-cli.py +1519 -0
  124. package/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
  125. package/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
  126. package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1018 -0
  127. package/skills/cost-aware-llm-pipeline/SKILL.md +182 -0
  128. package/skills/cost-tracking/SKILL.md +147 -0
  129. package/skills/council/SKILL.md +202 -0
  130. package/skills/cpp-coding-standards/SKILL.md +722 -0
  131. package/skills/cpp-testing/SKILL.md +323 -0
  132. package/skills/crosspost/SKILL.md +110 -0
  133. package/skills/csharp-testing/SKILL.md +320 -0
  134. package/skills/customer-billing-ops/SKILL.md +139 -0
  135. package/skills/customs-trade-compliance/SKILL.md +262 -0
  136. package/skills/dart-flutter-patterns/SKILL.md +562 -0
  137. package/skills/dashboard-builder/SKILL.md +108 -0
  138. package/skills/data-scraper-agent/SKILL.md +764 -0
  139. package/skills/database-migrations/SKILL.md +428 -0
  140. package/skills/deep-research/SKILL.md +158 -0
  141. package/skills/defi-amm-security/SKILL.md +166 -0
  142. package/skills/deployment-patterns/SKILL.md +426 -0
  143. package/skills/design-system/SKILL.md +81 -0
  144. package/skills/django-celery/SKILL.md +456 -0
  145. package/skills/django-patterns/SKILL.md +733 -0
  146. package/skills/django-security/SKILL.md +592 -0
  147. package/skills/django-tdd/SKILL.md +728 -0
  148. package/skills/django-verification/SKILL.md +468 -0
  149. package/skills/dmux-workflows/SKILL.md +190 -0
  150. package/skills/docker-patterns/SKILL.md +363 -0
  151. package/skills/documentation-lookup/SKILL.md +89 -0
  152. package/skills/dotnet-patterns/SKILL.md +320 -0
  153. package/skills/e2e-testing/SKILL.md +325 -0
  154. package/skills/email-ops/SKILL.md +120 -0
  155. package/skills/energy-procurement/SKILL.md +227 -0
  156. package/skills/enterprise-agent-ops/SKILL.md +49 -0
  157. package/skills/error-handling/SKILL.md +375 -0
  158. package/skills/eval-harness/SKILL.md +269 -0
  159. package/skills/evm-token-decimals/SKILL.md +130 -0
  160. package/skills/exa-search/SKILL.md +106 -0
  161. package/skills/fal-ai-media/SKILL.md +287 -0
  162. package/skills/fastapi-patterns/SKILL.md +327 -0
  163. package/skills/finance-billing-ops/SKILL.md +126 -0
  164. package/skills/flox-environments/SKILL.md +496 -0
  165. package/skills/flutter-dart-code-review/SKILL.md +434 -0
  166. package/skills/foundation-models-on-device/SKILL.md +243 -0
  167. package/skills/frontend-design-direction/SKILL.md +92 -0
  168. package/skills/frontend-patterns/SKILL.md +641 -0
  169. package/skills/frontend-slides/SKILL.md +183 -0
  170. package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
  171. package/skills/frontend-slides/animation-patterns.md +122 -0
  172. package/skills/frontend-slides/html-template.md +419 -0
  173. package/skills/frontend-slides/scripts/export-pdf.sh +418 -0
  174. package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
  175. package/skills/frontend-slides/viewport-base.css +153 -0
  176. package/skills/fsharp-testing/SKILL.md +279 -0
  177. package/skills/gan-style-harness/SKILL.md +278 -0
  178. package/skills/gateguard/SKILL.md +125 -0
  179. package/skills/git-workflow/SKILL.md +714 -0
  180. package/skills/github-ops/SKILL.md +143 -0
  181. package/skills/golang-patterns/SKILL.md +673 -0
  182. package/skills/golang-testing/SKILL.md +719 -0
  183. package/skills/google-workspace-ops/SKILL.md +94 -0
  184. package/skills/healthcare-cdss-patterns/SKILL.md +245 -0
  185. package/skills/healthcare-emr-patterns/SKILL.md +159 -0
  186. package/skills/healthcare-eval-harness/SKILL.md +207 -0
  187. package/skills/healthcare-phi-compliance/SKILL.md +145 -0
  188. package/skills/hermes-imports/SKILL.md +87 -0
  189. package/skills/hexagonal-architecture/SKILL.md +275 -0
  190. package/skills/hipaa-compliance/SKILL.md +78 -0
  191. package/skills/homelab-network-readiness/SKILL.md +169 -0
  192. package/skills/homelab-network-setup/SKILL.md +129 -0
  193. package/skills/homelab-pihole-dns/SKILL.md +274 -0
  194. package/skills/homelab-vlan-segmentation/SKILL.md +311 -0
  195. package/skills/homelab-wireguard-vpn/SKILL.md +305 -0
  196. package/skills/hookify-rules/SKILL.md +128 -0
  197. package/skills/inventory-demand-planning/SKILL.md +246 -0
  198. package/skills/investor-materials/SKILL.md +95 -0
  199. package/skills/investor-outreach/SKILL.md +90 -0
  200. package/skills/ios-icon-gen/SKILL.md +157 -0
  201. package/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
  202. package/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
  203. package/skills/iterative-retrieval/SKILL.md +209 -0
  204. package/skills/java-coding-standards/SKILL.md +382 -0
  205. package/skills/jira-integration/SKILL.md +292 -0
  206. package/skills/jpa-patterns/SKILL.md +150 -0
  207. package/skills/knowledge-ops/SKILL.md +153 -0
  208. package/skills/kotlin-coroutines-flows/SKILL.md +283 -0
  209. package/skills/kotlin-exposed-patterns/SKILL.md +718 -0
  210. package/skills/kotlin-ktor-patterns/SKILL.md +688 -0
  211. package/skills/kotlin-patterns/SKILL.md +710 -0
  212. package/skills/kotlin-testing/SKILL.md +823 -0
  213. package/skills/laravel-patterns/SKILL.md +414 -0
  214. package/skills/laravel-plugin-discovery/SKILL.md +228 -0
  215. package/skills/laravel-security/SKILL.md +284 -0
  216. package/skills/laravel-tdd/SKILL.md +282 -0
  217. package/skills/laravel-verification/SKILL.md +178 -0
  218. package/skills/lead-intelligence/SKILL.md +320 -0
  219. package/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
  220. package/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
  221. package/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
  222. package/skills/lead-intelligence/agents/signal-scorer.md +60 -0
  223. package/skills/liquid-glass-design/SKILL.md +279 -0
  224. package/skills/llm-trading-agent-security/SKILL.md +146 -0
  225. package/skills/logistics-exception-management/SKILL.md +221 -0
  226. package/skills/make-interfaces-feel-better/SKILL.md +151 -0
  227. package/skills/manim-video/SKILL.md +88 -0
  228. package/skills/manim-video/assets/network_graph_scene.py +52 -0
  229. package/skills/market-research/SKILL.md +74 -0
  230. package/skills/mcp-server-patterns/SKILL.md +68 -0
  231. package/skills/messages-ops/SKILL.md +103 -0
  232. package/skills/mle-workflow/SKILL.md +345 -0
  233. package/skills/motion-advanced/SKILL.md +596 -0
  234. package/skills/motion-foundations/SKILL.md +299 -0
  235. package/skills/motion-patterns/SKILL.md +435 -0
  236. package/skills/motion-ui/SKILL.md +574 -0
  237. package/skills/mysql-patterns/SKILL.md +411 -0
  238. package/skills/nanoclaw-repl/SKILL.md +32 -0
  239. package/skills/nestjs-patterns/SKILL.md +229 -0
  240. package/skills/netmiko-ssh-automation/SKILL.md +173 -0
  241. package/skills/network-bgp-diagnostics/SKILL.md +167 -0
  242. package/skills/network-config-validation/SKILL.md +210 -0
  243. package/skills/network-interface-health/SKILL.md +152 -0
  244. package/skills/nextjs-turbopack/SKILL.md +43 -0
  245. package/skills/nodejs-keccak256/SKILL.md +102 -0
  246. package/skills/nutrient-document-processing/SKILL.md +166 -0
  247. package/skills/nuxt4-patterns/SKILL.md +99 -0
  248. package/skills/openclaw-persona-forge/SKILL.md +288 -0
  249. package/skills/openclaw-persona-forge/gacha.py +224 -0
  250. package/skills/openclaw-persona-forge/gacha.sh +5 -0
  251. package/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
  252. package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
  253. package/skills/openclaw-persona-forge/references/error-handling.md +53 -0
  254. package/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
  255. package/skills/openclaw-persona-forge/references/naming-system.md +39 -0
  256. package/skills/openclaw-persona-forge/references/output-template.md +166 -0
  257. package/skills/opensource-pipeline/SKILL.md +254 -0
  258. package/skills/perl-patterns/SKILL.md +503 -0
  259. package/skills/perl-security/SKILL.md +502 -0
  260. package/skills/perl-testing/SKILL.md +474 -0
  261. package/skills/plan-orchestrate/SKILL.md +253 -0
  262. package/skills/plankton-code-quality/SKILL.md +236 -0
  263. package/skills/postgres-patterns/SKILL.md +146 -0
  264. package/skills/product-capability/SKILL.md +140 -0
  265. package/skills/product-lens/SKILL.md +91 -0
  266. package/skills/production-audit/SKILL.md +206 -0
  267. package/skills/production-scheduling/SKILL.md +237 -0
  268. package/skills/project-flow-ops/SKILL.md +110 -0
  269. package/skills/prompt-optimizer/SKILL.md +398 -0
  270. package/skills/python-patterns/SKILL.md +749 -0
  271. package/skills/python-testing/SKILL.md +815 -0
  272. package/skills/pytorch-patterns/SKILL.md +395 -0
  273. package/skills/quality-nonconformance/SKILL.md +259 -0
  274. package/skills/quarkus-patterns/SKILL.md +721 -0
  275. package/skills/quarkus-security/SKILL.md +466 -0
  276. package/skills/quarkus-tdd/SKILL.md +810 -0
  277. package/skills/quarkus-verification/SKILL.md +478 -0
  278. package/skills/ralphinho-rfc-pipeline/SKILL.md +66 -0
  279. package/skills/redis-patterns/SKILL.md +402 -0
  280. package/skills/regex-vs-llm-structured-text/SKILL.md +219 -0
  281. package/skills/remotion-video-creation/SKILL.md +43 -0
  282. package/skills/remotion-video-creation/rules/3d.md +86 -0
  283. package/skills/remotion-video-creation/rules/animations.md +29 -0
  284. package/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
  285. package/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
  286. package/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
  287. package/skills/remotion-video-creation/rules/assets.md +78 -0
  288. package/skills/remotion-video-creation/rules/audio.md +172 -0
  289. package/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
  290. package/skills/remotion-video-creation/rules/can-decode.md +75 -0
  291. package/skills/remotion-video-creation/rules/charts.md +58 -0
  292. package/skills/remotion-video-creation/rules/compositions.md +146 -0
  293. package/skills/remotion-video-creation/rules/display-captions.md +126 -0
  294. package/skills/remotion-video-creation/rules/extract-frames.md +229 -0
  295. package/skills/remotion-video-creation/rules/fonts.md +152 -0
  296. package/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
  297. package/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
  298. package/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
  299. package/skills/remotion-video-creation/rules/gifs.md +138 -0
  300. package/skills/remotion-video-creation/rules/images.md +130 -0
  301. package/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
  302. package/skills/remotion-video-creation/rules/lottie.md +67 -0
  303. package/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
  304. package/skills/remotion-video-creation/rules/measuring-text.md +143 -0
  305. package/skills/remotion-video-creation/rules/sequencing.md +106 -0
  306. package/skills/remotion-video-creation/rules/tailwind.md +11 -0
  307. package/skills/remotion-video-creation/rules/text-animations.md +20 -0
  308. package/skills/remotion-video-creation/rules/timing.md +179 -0
  309. package/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
  310. package/skills/remotion-video-creation/rules/transitions.md +122 -0
  311. package/skills/remotion-video-creation/rules/trimming.md +52 -0
  312. package/skills/remotion-video-creation/rules/videos.md +171 -0
  313. package/skills/repo-scan/SKILL.md +78 -0
  314. package/skills/research-ops/SKILL.md +111 -0
  315. package/skills/returns-reverse-logistics/SKILL.md +239 -0
  316. package/skills/rules-distill/SKILL.md +263 -0
  317. package/skills/rules-distill/scripts/scan-rules.sh +58 -0
  318. package/skills/rules-distill/scripts/scan-skills.sh +129 -0
  319. package/skills/rust-patterns/SKILL.md +498 -0
  320. package/skills/rust-testing/SKILL.md +499 -0
  321. package/skills/safety-guard/SKILL.md +74 -0
  322. package/skills/santa-method/SKILL.md +306 -0
  323. package/skills/scientific-db-pubmed-database/SKILL.md +175 -0
  324. package/skills/scientific-db-uspto-database/SKILL.md +177 -0
  325. package/skills/scientific-pkg-gget/SKILL.md +166 -0
  326. package/skills/scientific-thinking-literature-review/SKILL.md +192 -0
  327. package/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
  328. package/skills/search-first/SKILL.md +181 -0
  329. package/skills/security-bounty-hunter/SKILL.md +99 -0
  330. package/skills/security-review/SKILL.md +502 -0
  331. package/skills/security-review/cloud-infrastructure-security.md +361 -0
  332. package/skills/seo/SKILL.md +153 -0
  333. package/skills/skill-comply/SKILL.md +57 -0
  334. package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
  335. package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
  336. package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
  337. package/skills/skill-comply/prompts/classifier.md +24 -0
  338. package/skills/skill-comply/prompts/scenario_generator.md +62 -0
  339. package/skills/skill-comply/prompts/spec_generator.md +42 -0
  340. package/skills/skill-comply/pyproject.toml +15 -0
  341. package/skills/skill-comply/scripts/__init__.py +0 -0
  342. package/skills/skill-comply/scripts/classifier.py +85 -0
  343. package/skills/skill-comply/scripts/grader.py +124 -0
  344. package/skills/skill-comply/scripts/parser.py +107 -0
  345. package/skills/skill-comply/scripts/report.py +170 -0
  346. package/skills/skill-comply/scripts/run.py +127 -0
  347. package/skills/skill-comply/scripts/runner.py +186 -0
  348. package/skills/skill-comply/scripts/scenario_generator.py +70 -0
  349. package/skills/skill-comply/scripts/spec_generator.py +72 -0
  350. package/skills/skill-comply/scripts/utils.py +13 -0
  351. package/skills/skill-comply/tests/test_grader.py +197 -0
  352. package/skills/skill-comply/tests/test_parser.py +90 -0
  353. package/skills/skill-comply/tests/test_runner.py +172 -0
  354. package/skills/skill-scout/SKILL.md +139 -0
  355. package/skills/skill-stocktake/SKILL.md +193 -0
  356. package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
  357. package/skills/skill-stocktake/scripts/save-results.sh +56 -0
  358. package/skills/skill-stocktake/scripts/scan.sh +170 -0
  359. package/skills/social-graph-ranker/SKILL.md +153 -0
  360. package/skills/springboot-patterns/SKILL.md +313 -0
  361. package/skills/springboot-security/SKILL.md +271 -0
  362. package/skills/springboot-tdd/SKILL.md +157 -0
  363. package/skills/springboot-verification/SKILL.md +230 -0
  364. package/skills/strategic-compact/SKILL.md +129 -0
  365. package/skills/strategic-compact/suggest-compact.sh +54 -0
  366. package/skills/swift-actor-persistence/SKILL.md +142 -0
  367. package/skills/swift-concurrency-6-2/SKILL.md +216 -0
  368. package/skills/swift-protocol-di-testing/SKILL.md +189 -0
  369. package/skills/swiftui-patterns/SKILL.md +259 -0
  370. package/skills/tdd-workflow/SKILL.md +462 -0
  371. package/skills/team-builder/SKILL.md +166 -0
  372. package/skills/terminal-ops/SKILL.md +108 -0
  373. package/skills/tinystruct-patterns/SKILL.md +130 -0
  374. package/skills/tinystruct-patterns/references/architecture.md +77 -0
  375. package/skills/tinystruct-patterns/references/data-handling.md +35 -0
  376. package/skills/tinystruct-patterns/references/routing.md +57 -0
  377. package/skills/tinystruct-patterns/references/system-usage.md +74 -0
  378. package/skills/tinystruct-patterns/references/testing.md +59 -0
  379. package/skills/token-budget-advisor/SKILL.md +133 -0
  380. package/skills/ui-demo/SKILL.md +464 -0
  381. package/skills/ui-to-vue/SKILL.md +134 -0
  382. package/skills/unified-notifications-ops/SKILL.md +186 -0
  383. package/skills/verification-loop/SKILL.md +125 -0
  384. package/skills/video-editing/SKILL.md +309 -0
  385. package/skills/videodb/SKILL.md +373 -0
  386. package/skills/videodb/reference/api-reference.md +550 -0
  387. package/skills/videodb/reference/capture-reference.md +407 -0
  388. package/skills/videodb/reference/capture.md +101 -0
  389. package/skills/videodb/reference/editor.md +443 -0
  390. package/skills/videodb/reference/generative.md +331 -0
  391. package/skills/videodb/reference/rtstream-reference.md +564 -0
  392. package/skills/videodb/reference/rtstream.md +65 -0
  393. package/skills/videodb/reference/search.md +230 -0
  394. package/skills/videodb/reference/streaming.md +406 -0
  395. package/skills/videodb/reference/use-cases.md +118 -0
  396. package/skills/videodb/scripts/ws_listener.py +282 -0
  397. package/skills/visa-doc-translate/README.md +86 -0
  398. package/skills/visa-doc-translate/SKILL.md +117 -0
  399. package/skills/vite-patterns/SKILL.md +448 -0
  400. package/skills/windows-desktop-e2e/SKILL.md +787 -0
  401. package/skills/workspace-surface-audit/SKILL.md +124 -0
  402. package/skills/x-api/SKILL.md +233 -0
@@ -0,0 +1,560 @@
1
+ ---
2
+ name: backend-patterns
3
+ description: Backend architecture patterns, API design, database optimization, and server-side best practices for Node.js, Express, and Next.js API routes.
4
+ ---
5
+
6
+ # Backend Development Patterns
7
+
8
+ Backend architecture patterns and best practices for scalable server-side applications.
9
+
10
+ ## When to Activate
11
+
12
+ - Designing REST or GraphQL API endpoints
13
+ - Implementing repository, service, or controller layers
14
+ - Optimizing database queries (N+1, indexing, connection pooling)
15
+ - Adding caching (Redis, in-memory, HTTP cache headers)
16
+ - Setting up background jobs or async processing
17
+ - Structuring error handling and validation for APIs
18
+ - Building middleware (auth, logging, rate limiting)
19
+
20
+ ## API Design Patterns
21
+
22
+ ### RESTful API Structure
23
+
24
+ ```typescript
25
+ // PASS: Resource-based URLs
26
+ GET /api/markets # List resources
27
+ GET /api/markets/:id # Get single resource
28
+ POST /api/markets # Create resource
29
+ PUT /api/markets/:id # Replace resource
30
+ PATCH /api/markets/:id # Update resource
31
+ DELETE /api/markets/:id # Delete resource
32
+
33
+ // PASS: Query parameters for filtering, sorting, pagination
34
+ GET /api/markets?status=active&sort=volume&limit=20&offset=0
35
+ ```
36
+
37
+ ### Repository Pattern
38
+
39
+ ```typescript
40
+ // Abstract data access logic
41
+ interface MarketRepository {
42
+ findAll(filters?: MarketFilters): Promise<Market[]>
43
+ findById(id: string): Promise<Market | null>
44
+ create(data: CreateMarketDto): Promise<Market>
45
+ update(id: string, data: UpdateMarketDto): Promise<Market>
46
+ delete(id: string): Promise<void>
47
+ }
48
+
49
+ class SupabaseMarketRepository implements MarketRepository {
50
+ async findAll(filters?: MarketFilters): Promise<Market[]> {
51
+ let query = supabase.from('markets').select('*')
52
+
53
+ if (filters?.status) {
54
+ query = query.eq('status', filters.status)
55
+ }
56
+
57
+ if (filters?.limit) {
58
+ query = query.limit(filters.limit)
59
+ }
60
+
61
+ const { data, error } = await query
62
+
63
+ if (error) throw new Error(error.message)
64
+ return data
65
+ }
66
+
67
+ // Other methods...
68
+ }
69
+ ```
70
+
71
+ ### Service Layer Pattern
72
+
73
+ ```typescript
74
+ // Business logic separated from data access
75
+ class MarketService {
76
+ constructor(private marketRepo: MarketRepository) {}
77
+
78
+ async searchMarkets(query: string, limit: number = 10): Promise<Market[]> {
79
+ // Business logic
80
+ const embedding = await generateEmbedding(query)
81
+ const results = await this.vectorSearch(embedding, limit)
82
+
83
+ // Fetch full data
84
+ const markets = await this.marketRepo.findByIds(results.map(r => r.id))
85
+
86
+ // Sort by similarity
87
+ return markets.sort((a, b) => {
88
+ const scoreA = results.find(r => r.id === a.id)?.score || 0
89
+ const scoreB = results.find(r => r.id === b.id)?.score || 0
90
+ return scoreA - scoreB
91
+ })
92
+ }
93
+
94
+ private async vectorSearch(embedding: number[], limit: number) {
95
+ // Vector search implementation
96
+ }
97
+ }
98
+ ```
99
+
100
+ ### Middleware Pattern
101
+
102
+ ```typescript
103
+ // Request/response processing pipeline
104
+ export function withAuth(handler: NextApiHandler): NextApiHandler {
105
+ return async (req, res) => {
106
+ const token = req.headers.authorization?.replace('Bearer ', '')
107
+
108
+ if (!token) {
109
+ return res.status(401).json({ error: 'Unauthorized' })
110
+ }
111
+
112
+ try {
113
+ const user = await verifyToken(token)
114
+ req.user = user
115
+ return handler(req, res)
116
+ } catch (error) {
117
+ return res.status(401).json({ error: 'Invalid token' })
118
+ }
119
+ }
120
+ }
121
+
122
+ // Usage
123
+ export default withAuth(async (req, res) => {
124
+ // Handler has access to req.user
125
+ })
126
+ ```
127
+
128
+ ## Database Patterns
129
+
130
+ ### Query Optimization
131
+
132
+ ```typescript
133
+ // PASS: GOOD: Select only needed columns
134
+ const { data } = await supabase
135
+ .from('markets')
136
+ .select('id, name, status, volume')
137
+ .eq('status', 'active')
138
+ .order('volume', { ascending: false })
139
+ .limit(10)
140
+
141
+ // FAIL: BAD: Select everything
142
+ const { data } = await supabase
143
+ .from('markets')
144
+ .select('*')
145
+ ```
146
+
147
+ ### N+1 Query Prevention
148
+
149
+ ```typescript
150
+ // FAIL: BAD: N+1 query problem
151
+ const markets = await getMarkets()
152
+ for (const market of markets) {
153
+ market.creator = await getUser(market.creator_id) // N queries
154
+ }
155
+
156
+ // PASS: GOOD: Batch fetch
157
+ const markets = await getMarkets()
158
+ const creatorIds = markets.map(m => m.creator_id)
159
+ const creators = await getUsers(creatorIds) // 1 query
160
+ const creatorMap = new Map(creators.map(c => [c.id, c]))
161
+
162
+ markets.forEach(market => {
163
+ market.creator = creatorMap.get(market.creator_id)
164
+ })
165
+ ```
166
+
167
+ ### Transaction Pattern
168
+
169
+ ```typescript
170
+ async function createMarketWithPosition(
171
+ marketData: CreateMarketDto,
172
+ positionData: CreatePositionDto
173
+ ) {
174
+ // Use Supabase transaction
175
+ const { data, error } = await supabase.rpc('create_market_with_position', {
176
+ market_data: marketData,
177
+ position_data: positionData
178
+ })
179
+
180
+ if (error) throw new Error('Transaction failed')
181
+ return data
182
+ }
183
+
184
+ // SQL function in Supabase
185
+ CREATE OR REPLACE FUNCTION create_market_with_position(
186
+ market_data jsonb,
187
+ position_data jsonb
188
+ )
189
+ RETURNS jsonb
190
+ LANGUAGE plpgsql
191
+ AS $$
192
+ BEGIN
193
+ -- Start transaction automatically
194
+ INSERT INTO markets VALUES (market_data);
195
+ INSERT INTO positions VALUES (position_data);
196
+ RETURN jsonb_build_object('success', true);
197
+ EXCEPTION
198
+ WHEN OTHERS THEN
199
+ -- Rollback happens automatically
200
+ RETURN jsonb_build_object('success', false, 'error', SQLERRM);
201
+ END;
202
+ $$;
203
+ ```
204
+
205
+ ## Caching Strategies
206
+
207
+ ### Redis Caching Layer
208
+
209
+ ```typescript
210
+ class CachedMarketRepository implements MarketRepository {
211
+ constructor(
212
+ private baseRepo: MarketRepository,
213
+ private redis: RedisClient
214
+ ) {}
215
+
216
+ async findById(id: string): Promise<Market | null> {
217
+ // Check cache first
218
+ const cached = await this.redis.get(`market:${id}`)
219
+
220
+ if (cached) {
221
+ return JSON.parse(cached)
222
+ }
223
+
224
+ // Cache miss - fetch from database
225
+ const market = await this.baseRepo.findById(id)
226
+
227
+ if (market) {
228
+ // Cache for 5 minutes
229
+ await this.redis.setex(`market:${id}`, 300, JSON.stringify(market))
230
+ }
231
+
232
+ return market
233
+ }
234
+
235
+ async invalidateCache(id: string): Promise<void> {
236
+ await this.redis.del(`market:${id}`)
237
+ }
238
+ }
239
+ ```
240
+
241
+ ### Cache-Aside Pattern
242
+
243
+ ```typescript
244
+ async function getMarketWithCache(id: string): Promise<Market> {
245
+ const cacheKey = `market:${id}`
246
+
247
+ // Try cache
248
+ const cached = await redis.get(cacheKey)
249
+ if (cached) return JSON.parse(cached)
250
+
251
+ // Cache miss - fetch from DB
252
+ const market = await db.markets.findUnique({ where: { id } })
253
+
254
+ if (!market) throw new Error('Market not found')
255
+
256
+ // Update cache
257
+ await redis.setex(cacheKey, 300, JSON.stringify(market))
258
+
259
+ return market
260
+ }
261
+ ```
262
+
263
+ ## Error Handling Patterns
264
+
265
+ ### Centralized Error Handler
266
+
267
+ ```typescript
268
+ class ApiError extends Error {
269
+ constructor(
270
+ public statusCode: number,
271
+ public message: string,
272
+ public isOperational = true
273
+ ) {
274
+ super(message)
275
+ Object.setPrototypeOf(this, ApiError.prototype)
276
+ }
277
+ }
278
+
279
+ export function errorHandler(error: unknown, req: Request): Response {
280
+ if (error instanceof ApiError) {
281
+ return NextResponse.json({
282
+ success: false,
283
+ error: error.message
284
+ }, { status: error.statusCode })
285
+ }
286
+
287
+ if (error instanceof z.ZodError) {
288
+ return NextResponse.json({
289
+ success: false,
290
+ error: 'Validation failed',
291
+ details: error.errors
292
+ }, { status: 400 })
293
+ }
294
+
295
+ // Log unexpected errors
296
+ console.error('Unexpected error:', error)
297
+
298
+ return NextResponse.json({
299
+ success: false,
300
+ error: 'Internal server error'
301
+ }, { status: 500 })
302
+ }
303
+
304
+ // Usage
305
+ export async function GET(request: Request) {
306
+ try {
307
+ const data = await fetchData()
308
+ return NextResponse.json({ success: true, data })
309
+ } catch (error) {
310
+ return errorHandler(error, request)
311
+ }
312
+ }
313
+ ```
314
+
315
+ ### Retry with Exponential Backoff
316
+
317
+ ```typescript
318
+ async function fetchWithRetry<T>(
319
+ fn: () => Promise<T>,
320
+ maxRetries = 3
321
+ ): Promise<T> {
322
+ let lastError: Error
323
+
324
+ for (let i = 0; i < maxRetries; i++) {
325
+ try {
326
+ return await fn()
327
+ } catch (error) {
328
+ lastError = error as Error
329
+
330
+ if (i < maxRetries - 1) {
331
+ // Exponential backoff: 1s, 2s, 4s
332
+ const delay = Math.pow(2, i) * 1000
333
+ await new Promise(resolve => setTimeout(resolve, delay))
334
+ }
335
+ }
336
+ }
337
+
338
+ throw lastError!
339
+ }
340
+
341
+ // Usage
342
+ const data = await fetchWithRetry(() => fetchFromAPI())
343
+ ```
344
+
345
+ ## Authentication & Authorization
346
+
347
+ ### JWT Token Validation
348
+
349
+ ```typescript
350
+ import jwt from 'jsonwebtoken'
351
+
352
+ interface JWTPayload {
353
+ userId: string
354
+ email: string
355
+ role: 'admin' | 'user'
356
+ }
357
+
358
+ export function verifyToken(token: string): JWTPayload {
359
+ try {
360
+ const payload = jwt.verify(token, process.env.JWT_SECRET!) as JWTPayload
361
+ return payload
362
+ } catch (error) {
363
+ throw new ApiError(401, 'Invalid token')
364
+ }
365
+ }
366
+
367
+ export async function requireAuth(request: Request) {
368
+ const token = request.headers.get('authorization')?.replace('Bearer ', '')
369
+
370
+ if (!token) {
371
+ throw new ApiError(401, 'Missing authorization token')
372
+ }
373
+
374
+ return verifyToken(token)
375
+ }
376
+
377
+ // Usage in API route
378
+ export async function GET(request: Request) {
379
+ const user = await requireAuth(request)
380
+
381
+ const data = await getDataForUser(user.userId)
382
+
383
+ return NextResponse.json({ success: true, data })
384
+ }
385
+ ```
386
+
387
+ ### Role-Based Access Control
388
+
389
+ ```typescript
390
+ type Permission = 'read' | 'write' | 'delete' | 'admin'
391
+
392
+ interface User {
393
+ id: string
394
+ role: 'admin' | 'moderator' | 'user'
395
+ }
396
+
397
+ const rolePermissions: Record<User['role'], Permission[]> = {
398
+ admin: ['read', 'write', 'delete', 'admin'],
399
+ moderator: ['read', 'write', 'delete'],
400
+ user: ['read', 'write']
401
+ }
402
+
403
+ export function hasPermission(user: User, permission: Permission): boolean {
404
+ return rolePermissions[user.role].includes(permission)
405
+ }
406
+
407
+ export function requirePermission(permission: Permission) {
408
+ return (handler: (request: Request, user: User) => Promise<Response>) => {
409
+ return async (request: Request) => {
410
+ const user = await requireAuth(request)
411
+
412
+ if (!hasPermission(user, permission)) {
413
+ throw new ApiError(403, 'Insufficient permissions')
414
+ }
415
+
416
+ return handler(request, user)
417
+ }
418
+ }
419
+ }
420
+
421
+ // Usage - HOF wraps the handler
422
+ export const DELETE = requirePermission('delete')(
423
+ async (request: Request, user: User) => {
424
+ // Handler receives authenticated user with verified permission
425
+ return new Response('Deleted', { status: 200 })
426
+ }
427
+ )
428
+ ```
429
+
430
+ ## Rate Limiting
431
+
432
+ Rate limiting must use a shared store such as Redis, a gateway, or the
433
+ platform's native limiter. Do not use per-process in-memory counters for
434
+ production APIs: they reset on deploy, split across replicas, and fail open in
435
+ serverless or multi-instance environments.
436
+
437
+ Keep the backend layer responsible for choosing the integration point and error
438
+ shape; use `api-design` for the HTTP contract and `security-review` for abuse
439
+ case review.
440
+
441
+ ## Background Jobs & Queues
442
+
443
+ ### Simple Queue Pattern
444
+
445
+ ```typescript
446
+ class JobQueue<T> {
447
+ private queue: T[] = []
448
+ private processing = false
449
+
450
+ async add(job: T): Promise<void> {
451
+ this.queue.push(job)
452
+
453
+ if (!this.processing) {
454
+ this.process()
455
+ }
456
+ }
457
+
458
+ private async process(): Promise<void> {
459
+ this.processing = true
460
+
461
+ while (this.queue.length > 0) {
462
+ const job = this.queue.shift()!
463
+
464
+ try {
465
+ await this.execute(job)
466
+ } catch (error) {
467
+ console.error('Job failed:', error)
468
+ }
469
+ }
470
+
471
+ this.processing = false
472
+ }
473
+
474
+ private async execute(job: T): Promise<void> {
475
+ // Job execution logic
476
+ }
477
+ }
478
+
479
+ // Usage for indexing markets
480
+ interface IndexJob {
481
+ marketId: string
482
+ }
483
+
484
+ const indexQueue = new JobQueue<IndexJob>()
485
+
486
+ export async function POST(request: Request) {
487
+ const { marketId } = await request.json()
488
+
489
+ // Add to queue instead of blocking
490
+ await indexQueue.add({ marketId })
491
+
492
+ return NextResponse.json({ success: true, message: 'Job queued' })
493
+ }
494
+ ```
495
+
496
+ ## Logging & Monitoring
497
+
498
+ ### Structured Logging
499
+
500
+ ```typescript
501
+ interface LogContext {
502
+ userId?: string
503
+ requestId?: string
504
+ method?: string
505
+ path?: string
506
+ [key: string]: unknown
507
+ }
508
+
509
+ class Logger {
510
+ log(level: 'info' | 'warn' | 'error', message: string, context?: LogContext) {
511
+ const entry = {
512
+ timestamp: new Date().toISOString(),
513
+ level,
514
+ message,
515
+ ...context
516
+ }
517
+
518
+ console.log(JSON.stringify(entry))
519
+ }
520
+
521
+ info(message: string, context?: LogContext) {
522
+ this.log('info', message, context)
523
+ }
524
+
525
+ warn(message: string, context?: LogContext) {
526
+ this.log('warn', message, context)
527
+ }
528
+
529
+ error(message: string, error: Error, context?: LogContext) {
530
+ this.log('error', message, {
531
+ ...context,
532
+ error: error.message,
533
+ stack: error.stack
534
+ })
535
+ }
536
+ }
537
+
538
+ const logger = new Logger()
539
+
540
+ // Usage
541
+ export async function GET(request: Request) {
542
+ const requestId = crypto.randomUUID()
543
+
544
+ logger.info('Fetching markets', {
545
+ requestId,
546
+ method: 'GET',
547
+ path: '/api/markets'
548
+ })
549
+
550
+ try {
551
+ const markets = await fetchMarkets()
552
+ return NextResponse.json({ success: true, data: markets })
553
+ } catch (error) {
554
+ logger.error('Failed to fetch markets', error as Error, { requestId })
555
+ return NextResponse.json({ error: 'Internal error' }, { status: 500 })
556
+ }
557
+ }
558
+ ```
559
+
560
+ **Remember**: Backend patterns enable scalable, maintainable server-side applications. Choose patterns that fit your complexity level.
@@ -0,0 +1,92 @@
1
+ ---
2
+ name: benchmark
3
+ description: Use this skill to measure performance baselines, detect regressions before/after PRs, and compare stack alternatives.
4
+ ---
5
+
6
+ # Benchmark — Performance Baseline & Regression Detection
7
+
8
+ ## When to Use
9
+
10
+ - Before and after a PR to measure performance impact
11
+ - Setting up performance baselines for a project
12
+ - When users report "it feels slow"
13
+ - Before a launch — ensure you meet performance targets
14
+ - Comparing your stack against alternatives
15
+
16
+ ## How It Works
17
+
18
+ ### Mode 1: Page Performance
19
+
20
+ Measures real browser metrics via browser MCP:
21
+
22
+ ```
23
+ 1. Navigate to each target URL
24
+ 2. Measure Core Web Vitals:
25
+ - LCP (Largest Contentful Paint) — target < 2.5s
26
+ - CLS (Cumulative Layout Shift) — target < 0.1
27
+ - INP (Interaction to Next Paint) — target < 200ms
28
+ - FCP (First Contentful Paint) — target < 1.8s
29
+ - TTFB (Time to First Byte) — target < 800ms
30
+ 3. Measure resource sizes:
31
+ - Total page weight (target < 1MB)
32
+ - JS bundle size (target < 200KB gzipped)
33
+ - CSS size
34
+ - Image weight
35
+ - Third-party script weight
36
+ 4. Count network requests
37
+ 5. Check for render-blocking resources
38
+ ```
39
+
40
+ ### Mode 2: API Performance
41
+
42
+ Benchmarks API endpoints:
43
+
44
+ ```
45
+ 1. Hit each endpoint 100 times
46
+ 2. Measure: p50, p95, p99 latency
47
+ 3. Track: response size, status codes
48
+ 4. Test under load: 10 concurrent requests
49
+ 5. Compare against SLA targets
50
+ ```
51
+
52
+ ### Mode 3: Build Performance
53
+
54
+ Measures development feedback loop:
55
+
56
+ ```
57
+ 1. Cold build time
58
+ 2. Hot reload time (HMR)
59
+ 3. Test suite duration
60
+ 4. TypeScript check time
61
+ 5. Lint time
62
+ 6. Docker build time
63
+ ```
64
+
65
+ ### Mode 4: Before/After Comparison
66
+
67
+ Run before and after a change to measure impact:
68
+
69
+ ```
70
+ /benchmark baseline # saves current metrics
71
+ # ... make changes ...
72
+ /benchmark compare # compares against baseline
73
+ ```
74
+
75
+ Output:
76
+ ```
77
+ | Metric | Before | After | Delta | Verdict |
78
+ |--------|--------|-------|-------|---------|
79
+ | LCP | 1.2s | 1.4s | +200ms | WARNING: WARN |
80
+ | Bundle | 180KB | 175KB | -5KB | ✓ BETTER |
81
+ | Build | 12s | 14s | +2s | WARNING: WARN |
82
+ ```
83
+
84
+ ## Output
85
+
86
+ Stores baselines in `.skillforge/benchmarks/` as JSON. Git-tracked so the team shares baselines.
87
+
88
+ ## Integration
89
+
90
+ - CI: run `/benchmark compare` on every PR
91
+ - Pair with `/canary-watch` for post-deploy monitoring
92
+ - Pair with `/browser-qa` for full pre-ship checklist