@rubix0270/arboris 1.0.2 → 1.0.4

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 (451) hide show
  1. package/package.json +25 -37
  2. package/run.mjs +10 -0
  3. package/dist/cli.mjs +0 -383
  4. package/manifest.json +0 -323
  5. package/prisma/skills/accessibility/SKILL.md +0 -147
  6. package/prisma/skills/agent-architecture-audit/SKILL.md +0 -257
  7. package/prisma/skills/agent-eval/SKILL.md +0 -146
  8. package/prisma/skills/agent-harness-construction/SKILL.md +0 -74
  9. package/prisma/skills/agent-introspection-debugging/SKILL.md +0 -154
  10. package/prisma/skills/agent-payment-x402/SKILL.md +0 -225
  11. package/prisma/skills/agent-self-evaluation/SKILL.md +0 -182
  12. package/prisma/skills/agent-self-evaluation/examples/high-score-example.md +0 -87
  13. package/prisma/skills/agent-self-evaluation/examples/low-score-example.md +0 -86
  14. package/prisma/skills/agent-self-evaluation/references/evaluation-criteria.md +0 -71
  15. package/prisma/skills/agent-self-evaluation/references/hook-integration.md +0 -64
  16. package/prisma/skills/agent-self-evaluation/scripts/evaluate.py +0 -408
  17. package/prisma/skills/agent-self-evaluation/templates/evaluation-report.md +0 -86
  18. package/prisma/skills/agent-sort/SKILL.md +0 -216
  19. package/prisma/skills/agentic-engineering/SKILL.md +0 -64
  20. package/prisma/skills/agentic-os/SKILL.md +0 -388
  21. package/prisma/skills/ai-first-engineering/SKILL.md +0 -52
  22. package/prisma/skills/ai-regression-testing/SKILL.md +0 -386
  23. package/prisma/skills/android-clean-architecture/SKILL.md +0 -340
  24. package/prisma/skills/angular-developer/SKILL.md +0 -155
  25. package/prisma/skills/angular-developer/references/angular-animations.md +0 -160
  26. package/prisma/skills/angular-developer/references/angular-aria.md +0 -410
  27. package/prisma/skills/angular-developer/references/cli.md +0 -86
  28. package/prisma/skills/angular-developer/references/component-harnesses.md +0 -59
  29. package/prisma/skills/angular-developer/references/component-styling.md +0 -91
  30. package/prisma/skills/angular-developer/references/components.md +0 -117
  31. package/prisma/skills/angular-developer/references/creating-services.md +0 -97
  32. package/prisma/skills/angular-developer/references/data-resolvers.md +0 -69
  33. package/prisma/skills/angular-developer/references/define-routes.md +0 -67
  34. package/prisma/skills/angular-developer/references/defining-providers.md +0 -72
  35. package/prisma/skills/angular-developer/references/di-fundamentals.md +0 -120
  36. package/prisma/skills/angular-developer/references/e2e-testing.md +0 -56
  37. package/prisma/skills/angular-developer/references/effects.md +0 -83
  38. package/prisma/skills/angular-developer/references/hierarchical-injectors.md +0 -43
  39. package/prisma/skills/angular-developer/references/host-elements.md +0 -80
  40. package/prisma/skills/angular-developer/references/injection-context.md +0 -63
  41. package/prisma/skills/angular-developer/references/inputs.md +0 -101
  42. package/prisma/skills/angular-developer/references/linked-signal.md +0 -59
  43. package/prisma/skills/angular-developer/references/loading-strategies.md +0 -61
  44. package/prisma/skills/angular-developer/references/mcp.md +0 -108
  45. package/prisma/skills/angular-developer/references/navigate-to-routes.md +0 -69
  46. package/prisma/skills/angular-developer/references/outputs.md +0 -86
  47. package/prisma/skills/angular-developer/references/reactive-forms.md +0 -122
  48. package/prisma/skills/angular-developer/references/rendering-strategies.md +0 -44
  49. package/prisma/skills/angular-developer/references/resource.md +0 -77
  50. package/prisma/skills/angular-developer/references/route-animations.md +0 -56
  51. package/prisma/skills/angular-developer/references/route-guards.md +0 -52
  52. package/prisma/skills/angular-developer/references/router-lifecycle.md +0 -45
  53. package/prisma/skills/angular-developer/references/router-testing.md +0 -87
  54. package/prisma/skills/angular-developer/references/show-routes-with-outlets.md +0 -68
  55. package/prisma/skills/angular-developer/references/signal-forms.md +0 -795
  56. package/prisma/skills/angular-developer/references/signals-overview.md +0 -94
  57. package/prisma/skills/angular-developer/references/tailwind-css.md +0 -69
  58. package/prisma/skills/angular-developer/references/template-driven-forms.md +0 -114
  59. package/prisma/skills/angular-developer/references/testing-fundamentals.md +0 -65
  60. package/prisma/skills/api-connector-builder/SKILL.md +0 -121
  61. package/prisma/skills/api-design/SKILL.md +0 -524
  62. package/prisma/skills/architecture-decision-records/SKILL.md +0 -180
  63. package/prisma/skills/article-writing/SKILL.md +0 -80
  64. package/prisma/skills/automation-audit-ops/SKILL.md +0 -143
  65. package/prisma/skills/autonomous-agent-harness/SKILL.md +0 -274
  66. package/prisma/skills/autonomous-loops/SKILL.md +0 -611
  67. package/prisma/skills/backend-patterns/SKILL.md +0 -562
  68. package/prisma/skills/benchmark/SKILL.md +0 -94
  69. package/prisma/skills/benchmark-methodology/SKILL.md +0 -190
  70. package/prisma/skills/benchmark-optimization-loop/SKILL.md +0 -70
  71. package/prisma/skills/blender-motion-state-inspection/SKILL.md +0 -165
  72. package/prisma/skills/blueprint/SKILL.md +0 -106
  73. package/prisma/skills/brand-discovery/SKILL.md +0 -145
  74. package/prisma/skills/brand-discovery/references/10_purpose-why.md +0 -40
  75. package/prisma/skills/brand-discovery/references/20_positioning.md +0 -44
  76. package/prisma/skills/brand-discovery/references/30_audience-niche.md +0 -52
  77. package/prisma/skills/brand-discovery/references/40_personality-archetype.md +0 -57
  78. package/prisma/skills/brand-discovery/references/50_voice-tone.md +0 -59
  79. package/prisma/skills/brand-discovery/references/60_narrative-story.md +0 -50
  80. package/prisma/skills/brand-discovery/references/70_founder-tension.md +0 -49
  81. package/prisma/skills/brand-discovery/references/90_SYNTHESIS.md +0 -133
  82. package/prisma/skills/brand-voice/SKILL.md +0 -98
  83. package/prisma/skills/brand-voice/references/voice-profile-schema.md +0 -55
  84. package/prisma/skills/browser-qa/SKILL.md +0 -105
  85. package/prisma/skills/bun-runtime/SKILL.md +0 -85
  86. package/prisma/skills/canary-watch/SKILL.md +0 -108
  87. package/prisma/skills/carrier-relationship-management/SKILL.md +0 -212
  88. package/prisma/skills/cisco-ios-patterns/SKILL.md +0 -164
  89. package/prisma/skills/ck/SKILL.md +0 -148
  90. package/prisma/skills/ck/commands/forget.mjs +0 -44
  91. package/prisma/skills/ck/commands/info.mjs +0 -24
  92. package/prisma/skills/ck/commands/init.mjs +0 -143
  93. package/prisma/skills/ck/commands/list.mjs +0 -40
  94. package/prisma/skills/ck/commands/migrate.mjs +0 -202
  95. package/prisma/skills/ck/commands/resume.mjs +0 -36
  96. package/prisma/skills/ck/commands/save.mjs +0 -210
  97. package/prisma/skills/ck/commands/shared.mjs +0 -387
  98. package/prisma/skills/ck/hooks/session-start.mjs +0 -224
  99. package/prisma/skills/claude-devfleet/SKILL.md +0 -112
  100. package/prisma/skills/click-path-audit/SKILL.md +0 -245
  101. package/prisma/skills/clickhouse-io/SKILL.md +0 -440
  102. package/prisma/skills/code-tour/SKILL.md +0 -254
  103. package/prisma/skills/codebase-onboarding/SKILL.md +0 -234
  104. package/prisma/skills/codehealth-mcp/SKILL.md +0 -167
  105. package/prisma/skills/coding-standards/SKILL.md +0 -551
  106. package/prisma/skills/competitive-platform-analysis/SKILL.md +0 -214
  107. package/prisma/skills/competitive-report-structure/SKILL.md +0 -162
  108. package/prisma/skills/compose-multiplatform-patterns/SKILL.md +0 -300
  109. package/prisma/skills/config-gc/SKILL.md +0 -120
  110. package/prisma/skills/configure-ecc/SKILL.md +0 -385
  111. package/prisma/skills/connections-optimizer/SKILL.md +0 -190
  112. package/prisma/skills/content-engine/SKILL.md +0 -132
  113. package/prisma/skills/content-hash-cache-pattern/SKILL.md +0 -162
  114. package/prisma/skills/context-budget/SKILL.md +0 -136
  115. package/prisma/skills/continuous-agent-loop/SKILL.md +0 -46
  116. package/prisma/skills/continuous-learning/SKILL.md +0 -132
  117. package/prisma/skills/continuous-learning/config.json +0 -18
  118. package/prisma/skills/continuous-learning/evaluate-session.sh +0 -69
  119. package/prisma/skills/continuous-learning-v2/SKILL.md +0 -361
  120. package/prisma/skills/continuous-learning-v2/agents/observer-loop.sh +0 -359
  121. package/prisma/skills/continuous-learning-v2/agents/observer.md +0 -189
  122. package/prisma/skills/continuous-learning-v2/agents/session-guardian.sh +0 -150
  123. package/prisma/skills/continuous-learning-v2/agents/start-observer.sh +0 -248
  124. package/prisma/skills/continuous-learning-v2/config.json +0 -8
  125. package/prisma/skills/continuous-learning-v2/hooks/observe.sh +0 -585
  126. package/prisma/skills/continuous-learning-v2/scripts/detect-project.sh +0 -322
  127. package/prisma/skills/continuous-learning-v2/scripts/instinct-cli.py +0 -1956
  128. package/prisma/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +0 -31
  129. package/prisma/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +0 -68
  130. package/prisma/skills/continuous-learning-v2/scripts/test_parse_instinct.py +0 -1421
  131. package/prisma/skills/cost-aware-llm-pipeline/SKILL.md +0 -184
  132. package/prisma/skills/cost-tracking/SKILL.md +0 -97
  133. package/prisma/skills/council/SKILL.md +0 -204
  134. package/prisma/skills/cpp-coding-standards/SKILL.md +0 -724
  135. package/prisma/skills/cpp-testing/SKILL.md +0 -325
  136. package/prisma/skills/crosspost/SKILL.md +0 -112
  137. package/prisma/skills/csharp-testing/SKILL.md +0 -322
  138. package/prisma/skills/customer-billing-ops/SKILL.md +0 -141
  139. package/prisma/skills/customs-trade-compliance/SKILL.md +0 -263
  140. package/prisma/skills/dart-flutter-patterns/SKILL.md +0 -564
  141. package/prisma/skills/dashboard-builder/SKILL.md +0 -109
  142. package/prisma/skills/data-scraper-agent/SKILL.md +0 -765
  143. package/prisma/skills/data-throughput-accelerator/SKILL.md +0 -73
  144. package/prisma/skills/database-migrations/SKILL.md +0 -430
  145. package/prisma/skills/deep-research/SKILL.md +0 -160
  146. package/prisma/skills/defi-amm-security/SKILL.md +0 -167
  147. package/prisma/skills/delivery-gate/SKILL.md +0 -126
  148. package/prisma/skills/delivery-gate/hooks/quality-gate.py +0 -220
  149. package/prisma/skills/deployment-patterns/SKILL.md +0 -428
  150. package/prisma/skills/design-system/SKILL.md +0 -83
  151. package/prisma/skills/django-celery/SKILL.md +0 -458
  152. package/prisma/skills/django-patterns/SKILL.md +0 -735
  153. package/prisma/skills/django-security/SKILL.md +0 -644
  154. package/prisma/skills/django-tdd/SKILL.md +0 -730
  155. package/prisma/skills/django-verification/SKILL.md +0 -470
  156. package/prisma/skills/dmux-workflows/SKILL.md +0 -192
  157. package/prisma/skills/docker-patterns/SKILL.md +0 -365
  158. package/prisma/skills/documentation-lookup/SKILL.md +0 -91
  159. package/prisma/skills/dotnet-patterns/SKILL.md +0 -322
  160. package/prisma/skills/dynamic-workflow-mode/SKILL.md +0 -124
  161. package/prisma/skills/e2e-testing/SKILL.md +0 -327
  162. package/prisma/skills/ecc-guide/SKILL.md +0 -190
  163. package/prisma/skills/ecc-recipes/SKILL.md +0 -149
  164. package/prisma/skills/ecc-tools-cost-audit/SKILL.md +0 -161
  165. package/prisma/skills/email-ops/SKILL.md +0 -122
  166. package/prisma/skills/energy-procurement/SKILL.md +0 -228
  167. package/prisma/skills/enterprise-agent-ops/SKILL.md +0 -51
  168. package/prisma/skills/error-handling/SKILL.md +0 -377
  169. package/prisma/skills/eval-harness/SKILL.md +0 -271
  170. package/prisma/skills/evm-token-decimals/SKILL.md +0 -131
  171. package/prisma/skills/exa-search/SKILL.md +0 -108
  172. package/prisma/skills/fal-ai-media/SKILL.md +0 -289
  173. package/prisma/skills/fastapi-patterns/SKILL.md +0 -514
  174. package/prisma/skills/finance-billing-ops/SKILL.md +0 -128
  175. package/prisma/skills/flox-environments/SKILL.md +0 -497
  176. package/prisma/skills/flutter-dart-code-review/SKILL.md +0 -436
  177. package/prisma/skills/foundation-models-on-device/SKILL.md +0 -243
  178. package/prisma/skills/frontend-a11y/SKILL.md +0 -446
  179. package/prisma/skills/frontend-design-direction/SKILL.md +0 -93
  180. package/prisma/skills/frontend-patterns/SKILL.md +0 -657
  181. package/prisma/skills/frontend-slides/SKILL.md +0 -185
  182. package/prisma/skills/frontend-slides/STYLE_PRESETS.md +0 -330
  183. package/prisma/skills/frontend-slides/animation-patterns.md +0 -122
  184. package/prisma/skills/frontend-slides/html-template.md +0 -419
  185. package/prisma/skills/frontend-slides/scripts/export-pdf.sh +0 -418
  186. package/prisma/skills/frontend-slides/scripts/extract-pptx.py +0 -96
  187. package/prisma/skills/frontend-slides/viewport-base.css +0 -153
  188. package/prisma/skills/fsharp-testing/SKILL.md +0 -281
  189. package/prisma/skills/gan-style-harness/SKILL.md +0 -279
  190. package/prisma/skills/gateguard/SKILL.md +0 -133
  191. package/prisma/skills/generating-python-installer/SKILL.md +0 -820
  192. package/prisma/skills/git-workflow/SKILL.md +0 -716
  193. package/prisma/skills/github-ops/SKILL.md +0 -145
  194. package/prisma/skills/golang-patterns/SKILL.md +0 -675
  195. package/prisma/skills/golang-testing/SKILL.md +0 -721
  196. package/prisma/skills/google-workspace-ops/SKILL.md +0 -96
  197. package/prisma/skills/growth-log/SKILL.md +0 -128
  198. package/prisma/skills/healthcare-cdss-patterns/SKILL.md +0 -246
  199. package/prisma/skills/healthcare-emr-patterns/SKILL.md +0 -160
  200. package/prisma/skills/healthcare-eval-harness/SKILL.md +0 -208
  201. package/prisma/skills/healthcare-phi-compliance/SKILL.md +0 -146
  202. package/prisma/skills/hermes-imports/SKILL.md +0 -89
  203. package/prisma/skills/hexagonal-architecture/SKILL.md +0 -277
  204. package/prisma/skills/hipaa-compliance/SKILL.md +0 -79
  205. package/prisma/skills/homelab-network-readiness/SKILL.md +0 -170
  206. package/prisma/skills/homelab-network-setup/SKILL.md +0 -130
  207. package/prisma/skills/homelab-pihole-dns/SKILL.md +0 -275
  208. package/prisma/skills/homelab-vlan-segmentation/SKILL.md +0 -312
  209. package/prisma/skills/homelab-wireguard-vpn/SKILL.md +0 -306
  210. package/prisma/skills/hookify-rules/SKILL.md +0 -128
  211. package/prisma/skills/inherit-legacy-style/SKILL.md +0 -157
  212. package/prisma/skills/intent-driven-development/SKILL.md +0 -360
  213. package/prisma/skills/inventory-demand-planning/SKILL.md +0 -247
  214. package/prisma/skills/investor-materials/SKILL.md +0 -97
  215. package/prisma/skills/investor-outreach/SKILL.md +0 -92
  216. package/prisma/skills/ios-icon-gen/SKILL.md +0 -158
  217. package/prisma/skills/ios-icon-gen/scripts/generate_icons.swift +0 -258
  218. package/prisma/skills/ios-icon-gen/scripts/iconify_gen.sh +0 -235
  219. package/prisma/skills/iterative-retrieval/SKILL.md +0 -212
  220. package/prisma/skills/ito-basket-compare/SKILL.md +0 -64
  221. package/prisma/skills/ito-data-atlas-agent/SKILL.md +0 -64
  222. package/prisma/skills/ito-market-intelligence/SKILL.md +0 -61
  223. package/prisma/skills/ito-trade-planner/SKILL.md +0 -68
  224. package/prisma/skills/java-coding-standards/SKILL.md +0 -384
  225. package/prisma/skills/jira-integration/SKILL.md +0 -303
  226. package/prisma/skills/jpa-patterns/SKILL.md +0 -152
  227. package/prisma/skills/knowledge-ops/SKILL.md +0 -155
  228. package/prisma/skills/kotlin-coroutines-flows/SKILL.md +0 -285
  229. package/prisma/skills/kotlin-exposed-patterns/SKILL.md +0 -720
  230. package/prisma/skills/kotlin-ktor-patterns/SKILL.md +0 -690
  231. package/prisma/skills/kotlin-patterns/SKILL.md +0 -712
  232. package/prisma/skills/kotlin-testing/SKILL.md +0 -825
  233. package/prisma/skills/kubernetes-patterns/SKILL.md +0 -756
  234. package/prisma/skills/laravel-patterns/SKILL.md +0 -416
  235. package/prisma/skills/laravel-plugin-discovery/SKILL.md +0 -230
  236. package/prisma/skills/laravel-security/SKILL.md +0 -948
  237. package/prisma/skills/laravel-tdd/SKILL.md +0 -675
  238. package/prisma/skills/laravel-verification/SKILL.md +0 -180
  239. package/prisma/skills/latency-critical-systems/SKILL.md +0 -74
  240. package/prisma/skills/lead-intelligence/SKILL.md +0 -322
  241. package/prisma/skills/lead-intelligence/agents/enrichment-agent.md +0 -85
  242. package/prisma/skills/lead-intelligence/agents/mutual-mapper.md +0 -75
  243. package/prisma/skills/lead-intelligence/agents/outreach-drafter.md +0 -98
  244. package/prisma/skills/lead-intelligence/agents/signal-scorer.md +0 -60
  245. package/prisma/skills/liquid-glass-design/SKILL.md +0 -279
  246. package/prisma/skills/llm-trading-agent-security/SKILL.md +0 -147
  247. package/prisma/skills/logistics-exception-management/SKILL.md +0 -222
  248. package/prisma/skills/loop-design-check/SKILL.md +0 -143
  249. package/prisma/skills/mailtrap-email-integration/SKILL.md +0 -77
  250. package/prisma/skills/make-interfaces-feel-better/SKILL.md +0 -152
  251. package/prisma/skills/manim-video/SKILL.md +0 -90
  252. package/prisma/skills/manim-video/assets/network_graph_scene.py +0 -52
  253. package/prisma/skills/market-research/SKILL.md +0 -76
  254. package/prisma/skills/marketing-campaign/SKILL.md +0 -114
  255. package/prisma/skills/mcp-server-patterns/SKILL.md +0 -70
  256. package/prisma/skills/messages-ops/SKILL.md +0 -105
  257. package/prisma/skills/ml-adoption-playbook/SKILL.md +0 -57
  258. package/prisma/skills/mle-workflow/SKILL.md +0 -347
  259. package/prisma/skills/motion-advanced/SKILL.md +0 -596
  260. package/prisma/skills/motion-foundations/SKILL.md +0 -299
  261. package/prisma/skills/motion-patterns/SKILL.md +0 -434
  262. package/prisma/skills/motion-ui/SKILL.md +0 -576
  263. package/prisma/skills/mysql-patterns/SKILL.md +0 -413
  264. package/prisma/skills/nanoclaw-repl/SKILL.md +0 -34
  265. package/prisma/skills/nestjs-patterns/SKILL.md +0 -231
  266. package/prisma/skills/netmiko-ssh-automation/SKILL.md +0 -174
  267. package/prisma/skills/network-bgp-diagnostics/SKILL.md +0 -168
  268. package/prisma/skills/network-config-validation/SKILL.md +0 -211
  269. package/prisma/skills/network-interface-health/SKILL.md +0 -153
  270. package/prisma/skills/nextjs-turbopack/SKILL.md +0 -58
  271. package/prisma/skills/nodejs-keccak256/SKILL.md +0 -103
  272. package/prisma/skills/nutrient-document-processing/SKILL.md +0 -168
  273. package/prisma/skills/nuxt4-patterns/SKILL.md +0 -101
  274. package/prisma/skills/openclaw-persona-forge/SKILL.md +0 -289
  275. package/prisma/skills/openclaw-persona-forge/gacha.py +0 -224
  276. package/prisma/skills/openclaw-persona-forge/gacha.sh +0 -5
  277. package/prisma/skills/openclaw-persona-forge/references/avatar-style.md +0 -124
  278. package/prisma/skills/openclaw-persona-forge/references/boundary-rules.md +0 -53
  279. package/prisma/skills/openclaw-persona-forge/references/error-handling.md +0 -53
  280. package/prisma/skills/openclaw-persona-forge/references/identity-tension.md +0 -48
  281. package/prisma/skills/openclaw-persona-forge/references/naming-system.md +0 -39
  282. package/prisma/skills/openclaw-persona-forge/references/output-template.md +0 -166
  283. package/prisma/skills/opensource-pipeline/SKILL.md +0 -256
  284. package/prisma/skills/orch-add-feature/SKILL.md +0 -45
  285. package/prisma/skills/orch-build-mvp/SKILL.md +0 -49
  286. package/prisma/skills/orch-change-feature/SKILL.md +0 -43
  287. package/prisma/skills/orch-fix-defect/SKILL.md +0 -43
  288. package/prisma/skills/orch-pipeline/SKILL.md +0 -121
  289. package/prisma/skills/orch-refine-code/SKILL.md +0 -44
  290. package/prisma/skills/parallel-execution-optimizer/SKILL.md +0 -73
  291. package/prisma/skills/perl-patterns/SKILL.md +0 -505
  292. package/prisma/skills/perl-security/SKILL.md +0 -504
  293. package/prisma/skills/perl-testing/SKILL.md +0 -476
  294. package/prisma/skills/plan-orchestrate/SKILL.md +0 -263
  295. package/prisma/skills/plankton-code-quality/SKILL.md +0 -237
  296. package/prisma/skills/postgres-patterns/SKILL.md +0 -148
  297. package/prisma/skills/prediction-market-oracle-research/SKILL.md +0 -64
  298. package/prisma/skills/prediction-market-risk-review/SKILL.md +0 -61
  299. package/prisma/skills/prisma-patterns/SKILL.md +0 -401
  300. package/prisma/skills/product-capability/SKILL.md +0 -142
  301. package/prisma/skills/product-lens/SKILL.md +0 -93
  302. package/prisma/skills/production-audit/SKILL.md +0 -207
  303. package/prisma/skills/production-scheduling/SKILL.md +0 -238
  304. package/prisma/skills/project-flow-ops/SKILL.md +0 -112
  305. package/prisma/skills/prompt-optimizer/SKILL.md +0 -398
  306. package/prisma/skills/python-patterns/SKILL.md +0 -751
  307. package/prisma/skills/python-testing/SKILL.md +0 -817
  308. package/prisma/skills/pytorch-patterns/SKILL.md +0 -397
  309. package/prisma/skills/quality-nonconformance/SKILL.md +0 -260
  310. package/prisma/skills/quarkus-patterns/SKILL.md +0 -723
  311. package/prisma/skills/quarkus-security/SKILL.md +0 -468
  312. package/prisma/skills/quarkus-tdd/SKILL.md +0 -812
  313. package/prisma/skills/quarkus-verification/SKILL.md +0 -480
  314. package/prisma/skills/ralphinho-rfc-pipeline/SKILL.md +0 -68
  315. package/prisma/skills/react-native-patterns/SKILL.md +0 -326
  316. package/prisma/skills/react-patterns/SKILL.md +0 -342
  317. package/prisma/skills/react-performance/SKILL.md +0 -575
  318. package/prisma/skills/react-testing/SKILL.md +0 -424
  319. package/prisma/skills/recsys-pipeline-architect/SKILL.md +0 -115
  320. package/prisma/skills/recursive-decision-ledger/SKILL.md +0 -80
  321. package/prisma/skills/redis-patterns/SKILL.md +0 -404
  322. package/prisma/skills/regex-vs-llm-structured-text/SKILL.md +0 -221
  323. package/prisma/skills/remotion-video-creation/SKILL.md +0 -43
  324. package/prisma/skills/remotion-video-creation/rules/3d.md +0 -86
  325. package/prisma/skills/remotion-video-creation/rules/animations.md +0 -29
  326. package/prisma/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +0 -173
  327. package/prisma/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +0 -100
  328. package/prisma/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +0 -108
  329. package/prisma/skills/remotion-video-creation/rules/assets.md +0 -78
  330. package/prisma/skills/remotion-video-creation/rules/audio.md +0 -172
  331. package/prisma/skills/remotion-video-creation/rules/calculate-metadata.md +0 -104
  332. package/prisma/skills/remotion-video-creation/rules/can-decode.md +0 -75
  333. package/prisma/skills/remotion-video-creation/rules/charts.md +0 -58
  334. package/prisma/skills/remotion-video-creation/rules/compositions.md +0 -146
  335. package/prisma/skills/remotion-video-creation/rules/display-captions.md +0 -126
  336. package/prisma/skills/remotion-video-creation/rules/extract-frames.md +0 -229
  337. package/prisma/skills/remotion-video-creation/rules/fonts.md +0 -152
  338. package/prisma/skills/remotion-video-creation/rules/get-audio-duration.md +0 -58
  339. package/prisma/skills/remotion-video-creation/rules/get-video-dimensions.md +0 -68
  340. package/prisma/skills/remotion-video-creation/rules/get-video-duration.md +0 -58
  341. package/prisma/skills/remotion-video-creation/rules/gifs.md +0 -138
  342. package/prisma/skills/remotion-video-creation/rules/images.md +0 -130
  343. package/prisma/skills/remotion-video-creation/rules/import-srt-captions.md +0 -67
  344. package/prisma/skills/remotion-video-creation/rules/lottie.md +0 -67
  345. package/prisma/skills/remotion-video-creation/rules/measuring-dom-nodes.md +0 -34
  346. package/prisma/skills/remotion-video-creation/rules/measuring-text.md +0 -143
  347. package/prisma/skills/remotion-video-creation/rules/sequencing.md +0 -106
  348. package/prisma/skills/remotion-video-creation/rules/tailwind.md +0 -11
  349. package/prisma/skills/remotion-video-creation/rules/text-animations.md +0 -20
  350. package/prisma/skills/remotion-video-creation/rules/timing.md +0 -179
  351. package/prisma/skills/remotion-video-creation/rules/transcribe-captions.md +0 -19
  352. package/prisma/skills/remotion-video-creation/rules/transitions.md +0 -122
  353. package/prisma/skills/remotion-video-creation/rules/trimming.md +0 -52
  354. package/prisma/skills/remotion-video-creation/rules/videos.md +0 -171
  355. package/prisma/skills/repo-scan/SKILL.md +0 -79
  356. package/prisma/skills/research-ops/SKILL.md +0 -113
  357. package/prisma/skills/returns-reverse-logistics/SKILL.md +0 -240
  358. package/prisma/skills/rules-distill/SKILL.md +0 -265
  359. package/prisma/skills/rules-distill/scripts/scan-rules.sh +0 -58
  360. package/prisma/skills/rules-distill/scripts/scan-skills.sh +0 -129
  361. package/prisma/skills/rust-patterns/SKILL.md +0 -500
  362. package/prisma/skills/rust-testing/SKILL.md +0 -501
  363. package/prisma/skills/safety-guard/SKILL.md +0 -76
  364. package/prisma/skills/santa-method/SKILL.md +0 -307
  365. package/prisma/skills/scientific-db-pubmed-database/SKILL.md +0 -176
  366. package/prisma/skills/scientific-db-uspto-database/SKILL.md +0 -178
  367. package/prisma/skills/scientific-pkg-gget/SKILL.md +0 -167
  368. package/prisma/skills/scientific-thinking-literature-review/SKILL.md +0 -193
  369. package/prisma/skills/scientific-thinking-scholar-evaluation/SKILL.md +0 -161
  370. package/prisma/skills/search-first/SKILL.md +0 -183
  371. package/prisma/skills/security-bounty-hunter/SKILL.md +0 -100
  372. package/prisma/skills/security-review/SKILL.md +0 -504
  373. package/prisma/skills/security-review/cloud-infrastructure-security.md +0 -361
  374. package/prisma/skills/security-scan/SKILL.md +0 -166
  375. package/prisma/skills/seo/SKILL.md +0 -155
  376. package/prisma/skills/skill-comply/SKILL.md +0 -59
  377. package/prisma/skills/skill-comply/fixtures/compliant_trace.jsonl +0 -5
  378. package/prisma/skills/skill-comply/fixtures/noncompliant_trace.jsonl +0 -3
  379. package/prisma/skills/skill-comply/fixtures/tdd_spec.yaml +0 -44
  380. package/prisma/skills/skill-comply/prompts/classifier.md +0 -24
  381. package/prisma/skills/skill-comply/prompts/scenario_generator.md +0 -62
  382. package/prisma/skills/skill-comply/prompts/spec_generator.md +0 -42
  383. package/prisma/skills/skill-comply/pyproject.toml +0 -15
  384. package/prisma/skills/skill-comply/scripts/__init__.py +0 -0
  385. package/prisma/skills/skill-comply/scripts/classifier.py +0 -85
  386. package/prisma/skills/skill-comply/scripts/grader.py +0 -124
  387. package/prisma/skills/skill-comply/scripts/parser.py +0 -107
  388. package/prisma/skills/skill-comply/scripts/report.py +0 -170
  389. package/prisma/skills/skill-comply/scripts/run.py +0 -127
  390. package/prisma/skills/skill-comply/scripts/runner.py +0 -194
  391. package/prisma/skills/skill-comply/scripts/scenario_generator.py +0 -70
  392. package/prisma/skills/skill-comply/scripts/spec_generator.py +0 -72
  393. package/prisma/skills/skill-comply/scripts/utils.py +0 -13
  394. package/prisma/skills/skill-comply/tests/test_grader.py +0 -197
  395. package/prisma/skills/skill-comply/tests/test_parser.py +0 -90
  396. package/prisma/skills/skill-comply/tests/test_runner.py +0 -172
  397. package/prisma/skills/skill-scout/SKILL.md +0 -141
  398. package/prisma/skills/skill-stocktake/SKILL.md +0 -195
  399. package/prisma/skills/skill-stocktake/scripts/quick-diff.sh +0 -87
  400. package/prisma/skills/skill-stocktake/scripts/save-results.sh +0 -56
  401. package/prisma/skills/skill-stocktake/scripts/scan.sh +0 -170
  402. package/prisma/skills/social-graph-ranker/SKILL.md +0 -155
  403. package/prisma/skills/social-publisher/SKILL.md +0 -130
  404. package/prisma/skills/springboot-patterns/SKILL.md +0 -315
  405. package/prisma/skills/springboot-security/SKILL.md +0 -273
  406. package/prisma/skills/springboot-tdd/SKILL.md +0 -159
  407. package/prisma/skills/springboot-verification/SKILL.md +0 -232
  408. package/prisma/skills/strategic-compact/SKILL.md +0 -136
  409. package/prisma/skills/swift-actor-persistence/SKILL.md +0 -144
  410. package/prisma/skills/swift-concurrency-6-2/SKILL.md +0 -216
  411. package/prisma/skills/swift-protocol-di-testing/SKILL.md +0 -191
  412. package/prisma/skills/swiftui-patterns/SKILL.md +0 -259
  413. package/prisma/skills/taste/SKILL.md +0 -264
  414. package/prisma/skills/taste/references/genre-taxonomy.md +0 -87
  415. package/prisma/skills/tdd-workflow/SKILL.md +0 -583
  416. package/prisma/skills/team-agent-orchestration/SKILL.md +0 -111
  417. package/prisma/skills/team-builder/SKILL.md +0 -169
  418. package/prisma/skills/terminal-ops/SKILL.md +0 -110
  419. package/prisma/skills/tinystruct-patterns/SKILL.md +0 -279
  420. package/prisma/skills/tinystruct-patterns/references/architecture.md +0 -90
  421. package/prisma/skills/tinystruct-patterns/references/data-handling.md +0 -60
  422. package/prisma/skills/tinystruct-patterns/references/database.md +0 -99
  423. package/prisma/skills/tinystruct-patterns/references/routing.md +0 -64
  424. package/prisma/skills/tinystruct-patterns/references/system-usage.md +0 -97
  425. package/prisma/skills/tinystruct-patterns/references/testing.md +0 -72
  426. package/prisma/skills/token-budget-advisor/SKILL.md +0 -134
  427. package/prisma/skills/ui-demo/SKILL.md +0 -466
  428. package/prisma/skills/ui-to-vue/SKILL.md +0 -135
  429. package/prisma/skills/uncloud/SKILL.md +0 -344
  430. package/prisma/skills/unified-notifications-ops/SKILL.md +0 -188
  431. package/prisma/skills/verification-loop/SKILL.md +0 -127
  432. package/prisma/skills/video-editing/SKILL.md +0 -311
  433. package/prisma/skills/videodb/SKILL.md +0 -375
  434. package/prisma/skills/videodb/reference/api-reference.md +0 -550
  435. package/prisma/skills/videodb/reference/capture-reference.md +0 -407
  436. package/prisma/skills/videodb/reference/capture.md +0 -101
  437. package/prisma/skills/videodb/reference/editor.md +0 -443
  438. package/prisma/skills/videodb/reference/generative.md +0 -331
  439. package/prisma/skills/videodb/reference/rtstream-reference.md +0 -564
  440. package/prisma/skills/videodb/reference/rtstream.md +0 -65
  441. package/prisma/skills/videodb/reference/search.md +0 -230
  442. package/prisma/skills/videodb/reference/streaming.md +0 -406
  443. package/prisma/skills/videodb/reference/use-cases.md +0 -118
  444. package/prisma/skills/videodb/scripts/ws_listener.py +0 -282
  445. package/prisma/skills/visa-doc-translate/README.md +0 -86
  446. package/prisma/skills/visa-doc-translate/SKILL.md +0 -117
  447. package/prisma/skills/vite-patterns/SKILL.md +0 -450
  448. package/prisma/skills/vue-patterns/SKILL.md +0 -471
  449. package/prisma/skills/windows-desktop-e2e/SKILL.md +0 -888
  450. package/prisma/skills/workspace-surface-audit/SKILL.md +0 -126
  451. package/prisma/skills/x-api/SKILL.md +0 -235
@@ -1,197 +0,0 @@
1
- """Tests for grader module — compliance scoring with LLM classification."""
2
-
3
- from pathlib import Path
4
- from unittest.mock import patch
5
-
6
- import pytest
7
-
8
- from scripts.grader import ComplianceResult, StepResult, grade
9
- from scripts.parser import ComplianceSpec, Detector, ObservationEvent, Step, parse_spec, parse_trace
10
-
11
- FIXTURES = Path(__file__).parent.parent / "fixtures"
12
-
13
-
14
- @pytest.fixture
15
- def tdd_spec():
16
- return parse_spec(FIXTURES / "tdd_spec.yaml")
17
-
18
-
19
- @pytest.fixture
20
- def compliant_trace():
21
- return parse_trace(FIXTURES / "compliant_trace.jsonl")
22
-
23
-
24
- @pytest.fixture
25
- def noncompliant_trace():
26
- return parse_trace(FIXTURES / "noncompliant_trace.jsonl")
27
-
28
-
29
- def _mock_compliant_classification(spec, trace, model="haiku"): # noqa: ARG001
30
- """Simulate LLM correctly classifying a compliant trace."""
31
- return {
32
- "write_test": [0],
33
- "run_test_red": [1],
34
- "write_impl": [2],
35
- "run_test_green": [3],
36
- "refactor": [4],
37
- }
38
-
39
-
40
- def _mock_noncompliant_classification(spec, trace, model="haiku"):
41
- """Simulate LLM classifying a noncompliant trace (impl before test)."""
42
- return {
43
- "write_impl": [0], # src/fib.py written first
44
- "write_test": [1], # test written second
45
- "run_test_green": [2], # only a passing test run
46
- }
47
-
48
-
49
- def _mock_empty_classification(spec, trace, model="haiku"):
50
- return {}
51
-
52
-
53
- class TestGradeCompliant:
54
- @patch("scripts.grader.classify_events", side_effect=_mock_compliant_classification)
55
- def test_returns_compliance_result(self, mock_cls, tdd_spec, compliant_trace) -> None:
56
- result = grade(tdd_spec, compliant_trace)
57
- assert isinstance(result, ComplianceResult)
58
-
59
- @patch("scripts.grader.classify_events", side_effect=_mock_compliant_classification)
60
- def test_full_compliance(self, mock_cls, tdd_spec, compliant_trace) -> None:
61
- result = grade(tdd_spec, compliant_trace)
62
- assert result.compliance_rate == 1.0
63
-
64
- @patch("scripts.grader.classify_events", side_effect=_mock_compliant_classification)
65
- def test_all_required_steps_detected(self, mock_cls, tdd_spec, compliant_trace) -> None:
66
- result = grade(tdd_spec, compliant_trace)
67
- required_results = [s for s in result.steps if s.step_id in
68
- ("write_test", "run_test_red", "write_impl", "run_test_green")]
69
- assert all(s.detected for s in required_results)
70
-
71
- @patch("scripts.grader.classify_events", side_effect=_mock_compliant_classification)
72
- def test_optional_step_detected(self, mock_cls, tdd_spec, compliant_trace) -> None:
73
- result = grade(tdd_spec, compliant_trace)
74
- refactor = next(s for s in result.steps if s.step_id == "refactor")
75
- assert refactor.detected is True
76
-
77
- @patch("scripts.grader.classify_events", side_effect=_mock_compliant_classification)
78
- def test_no_hook_promotion_recommended(self, mock_cls, tdd_spec, compliant_trace) -> None:
79
- result = grade(tdd_spec, compliant_trace)
80
- assert result.recommend_hook_promotion is False
81
-
82
- @patch("scripts.grader.classify_events", side_effect=_mock_compliant_classification)
83
- def test_step_evidence_not_empty(self, mock_cls, tdd_spec, compliant_trace) -> None:
84
- result = grade(tdd_spec, compliant_trace)
85
- for step in result.steps:
86
- if step.detected:
87
- assert len(step.evidence) > 0
88
-
89
-
90
- class TestGradeNoncompliant:
91
- @patch("scripts.grader.classify_events", side_effect=_mock_noncompliant_classification)
92
- def test_low_compliance(self, mock_cls, tdd_spec, noncompliant_trace) -> None:
93
- result = grade(tdd_spec, noncompliant_trace)
94
- assert result.compliance_rate < 1.0
95
-
96
- @patch("scripts.grader.classify_events", side_effect=_mock_noncompliant_classification)
97
- def test_write_test_fails_ordering(self, mock_cls, tdd_spec, noncompliant_trace) -> None:
98
- """write_test has before_step=write_impl, but test is written AFTER impl."""
99
- result = grade(tdd_spec, noncompliant_trace)
100
- write_test = next(s for s in result.steps if s.step_id == "write_test")
101
- assert write_test.detected is False
102
-
103
- @patch("scripts.grader.classify_events", side_effect=_mock_noncompliant_classification)
104
- def test_run_test_red_not_detected(self, mock_cls, tdd_spec, noncompliant_trace) -> None:
105
- result = grade(tdd_spec, noncompliant_trace)
106
- run_red = next(s for s in result.steps if s.step_id == "run_test_red")
107
- assert run_red.detected is False
108
-
109
- @patch("scripts.grader.classify_events", side_effect=_mock_noncompliant_classification)
110
- def test_hook_promotion_recommended(self, mock_cls, tdd_spec, noncompliant_trace) -> None:
111
- result = grade(tdd_spec, noncompliant_trace)
112
- assert result.recommend_hook_promotion is True
113
-
114
- @patch("scripts.grader.classify_events", side_effect=_mock_noncompliant_classification)
115
- def test_failure_reasons_present(self, mock_cls, tdd_spec, noncompliant_trace) -> None:
116
- result = grade(tdd_spec, noncompliant_trace)
117
- failed_steps = [s for s in result.steps if not s.detected and s.step_id != "refactor"]
118
- for step in failed_steps:
119
- assert step.failure_reason is not None
120
-
121
-
122
- class TestGradeEdgeCases:
123
- @patch("scripts.grader.classify_events", side_effect=_mock_empty_classification)
124
- def test_empty_trace(self, mock_cls, tdd_spec) -> None:
125
- result = grade(tdd_spec, [])
126
- assert result.compliance_rate == 0.0
127
- assert result.recommend_hook_promotion is True
128
-
129
- @patch("scripts.grader.classify_events", side_effect=_mock_compliant_classification)
130
- def test_compliance_rate_is_ratio_of_required_only(self, mock_cls, tdd_spec, compliant_trace) -> None:
131
- result = grade(tdd_spec, compliant_trace)
132
- assert result.compliance_rate == 1.0
133
-
134
- @patch("scripts.grader.classify_events", side_effect=_mock_compliant_classification)
135
- def test_spec_id_in_result(self, mock_cls, tdd_spec, compliant_trace) -> None:
136
- result = grade(tdd_spec, compliant_trace)
137
- assert result.spec_id == "tdd-workflow"
138
-
139
- @patch("scripts.grader.classify_events")
140
- def test_after_step_can_reference_later_declared_spec_step(self, mock_cls) -> None:
141
- spec = ComplianceSpec(
142
- id="out-of-order-after-step",
143
- name="Out of order after_step",
144
- source_rule="rules/common/testing.md",
145
- version="1.0",
146
- steps=(
147
- Step(
148
- id="step_a",
149
- description="Occurs after step_b even though it is declared first",
150
- required=True,
151
- detector=Detector(
152
- description="Event A",
153
- after_step="step_b",
154
- ),
155
- ),
156
- Step(
157
- id="step_b",
158
- description="Reference step declared later",
159
- required=True,
160
- detector=Detector(
161
- description="Event B",
162
- ),
163
- ),
164
- ),
165
- threshold_promote_to_hook=0.5,
166
- )
167
- trace = [
168
- ObservationEvent(
169
- timestamp="2026-03-20T10:00:01Z",
170
- event="tool_complete",
171
- tool="Write",
172
- session="sess-order",
173
- input='{"file_path":"src/b.py"}',
174
- output="step b",
175
- ),
176
- ObservationEvent(
177
- timestamp="2026-03-20T10:00:02Z",
178
- event="tool_complete",
179
- tool="Write",
180
- session="sess-order",
181
- input='{"file_path":"src/a.py"}',
182
- output="step a",
183
- ),
184
- ]
185
- mock_cls.return_value = {
186
- "step_a": [1],
187
- "step_b": [0],
188
- }
189
-
190
- result = grade(spec, trace)
191
-
192
- step_a = next(step for step in result.steps if step.step_id == "step_a")
193
- step_b = next(step for step in result.steps if step.step_id == "step_b")
194
- assert step_a.detected is True
195
- assert step_a.failure_reason is None
196
- assert step_b.detected is True
197
- assert result.compliance_rate == 1.0
@@ -1,90 +0,0 @@
1
- """Tests for parser module — JSONL trace and YAML spec parsing."""
2
-
3
- from pathlib import Path
4
-
5
- import pytest
6
-
7
- from scripts.parser import (
8
- ComplianceSpec,
9
- Detector,
10
- ObservationEvent,
11
- Step,
12
- parse_spec,
13
- parse_trace,
14
- )
15
-
16
- FIXTURES = Path(__file__).parent.parent / "fixtures"
17
-
18
-
19
- class TestParseTrace:
20
- def test_parses_compliant_trace(self) -> None:
21
- events = parse_trace(FIXTURES / "compliant_trace.jsonl")
22
- assert len(events) == 5
23
- assert all(isinstance(e, ObservationEvent) for e in events)
24
-
25
- def test_events_sorted_by_timestamp(self) -> None:
26
- events = parse_trace(FIXTURES / "compliant_trace.jsonl")
27
- timestamps = [e.timestamp for e in events]
28
- assert timestamps == sorted(timestamps)
29
-
30
- def test_event_fields(self) -> None:
31
- events = parse_trace(FIXTURES / "compliant_trace.jsonl")
32
- first = events[0]
33
- assert first.tool == "Write"
34
- assert first.session == "sess-001"
35
- assert "test_fib.py" in first.input
36
- assert first.output == "File created"
37
-
38
- def test_parses_noncompliant_trace(self) -> None:
39
- events = parse_trace(FIXTURES / "noncompliant_trace.jsonl")
40
- assert len(events) == 3
41
- assert "src/fib.py" in events[0].input
42
-
43
- def test_empty_file_returns_empty_list(self, tmp_path: Path) -> None:
44
- empty = tmp_path / "empty.jsonl"
45
- empty.write_text("")
46
- events = parse_trace(empty)
47
- assert events == []
48
-
49
- def test_nonexistent_file_raises(self) -> None:
50
- with pytest.raises(FileNotFoundError):
51
- parse_trace(Path("/nonexistent/trace.jsonl"))
52
-
53
-
54
- class TestParseSpec:
55
- def test_parses_tdd_spec(self) -> None:
56
- spec = parse_spec(FIXTURES / "tdd_spec.yaml")
57
- assert isinstance(spec, ComplianceSpec)
58
- assert spec.id == "tdd-workflow"
59
- assert len(spec.steps) == 5
60
-
61
- def test_step_fields(self) -> None:
62
- spec = parse_spec(FIXTURES / "tdd_spec.yaml")
63
- first = spec.steps[0]
64
- assert isinstance(first, Step)
65
- assert first.id == "write_test"
66
- assert first.required is True
67
- assert isinstance(first.detector, Detector)
68
- assert "test file" in first.detector.description
69
- assert first.detector.before_step == "write_impl"
70
-
71
- def test_optional_detector_fields(self) -> None:
72
- spec = parse_spec(FIXTURES / "tdd_spec.yaml")
73
- write_test = spec.steps[0]
74
- assert write_test.detector.after_step is None
75
-
76
- run_test_red = spec.steps[1]
77
- assert run_test_red.detector.after_step == "write_test"
78
- assert run_test_red.detector.before_step == "write_impl"
79
-
80
- def test_scoring_threshold(self) -> None:
81
- spec = parse_spec(FIXTURES / "tdd_spec.yaml")
82
- assert spec.threshold_promote_to_hook == 0.6
83
-
84
- def test_required_vs_optional_steps(self) -> None:
85
- spec = parse_spec(FIXTURES / "tdd_spec.yaml")
86
- required = [s for s in spec.steps if s.required]
87
- optional = [s for s in spec.steps if not s.required]
88
- assert len(required) == 4
89
- assert len(optional) == 1
90
- assert optional[0].id == "refactor"
@@ -1,172 +0,0 @@
1
- """Tests for runner module — scenario execution + subprocess error handling."""
2
-
3
- from __future__ import annotations
4
-
5
- import subprocess
6
- from dataclasses import dataclass
7
- from unittest.mock import MagicMock, patch
8
-
9
- import pytest
10
-
11
- from scripts.runner import _setup_sandbox, run_scenario
12
-
13
-
14
- @dataclass(frozen=True)
15
- class _FakeScenario:
16
- """Minimal Scenario-like object for runner tests (avoids generator deps)."""
17
-
18
- id: str
19
- prompt: str = "do nothing"
20
- setup_commands: tuple[str, ...] = ()
21
-
22
-
23
- class TestSetupSandboxSkipsShellBuiltins:
24
- """Setup commands containing shell builtins (cd/pushd/popd) must be skipped.
25
-
26
- Regression: subprocess.run(["cd", ...]) raises FileNotFoundError because
27
- cd is a shell builtin, not an external binary. Real-world scenarios often
28
- include "cd subdir" in setup_commands assuming shell semantics, so the
29
- runner must tolerate this rather than crashing the whole scenario.
30
- """
31
-
32
- def test_skips_cd(self, tmp_path):
33
- scenario = _FakeScenario(
34
- id="t1",
35
- setup_commands=("cd subdir",),
36
- )
37
- called_args: list[list[str]] = []
38
-
39
- def fake_run(args, **kwargs):
40
- called_args.append(args)
41
- return subprocess.CompletedProcess(args=args, returncode=0)
42
-
43
- with patch("scripts.runner.subprocess.run", side_effect=fake_run):
44
- _setup_sandbox(tmp_path, scenario)
45
-
46
- # git init runs once; "cd subdir" must NOT be passed to subprocess
47
- assert ["git", "init"] in called_args
48
- assert ["cd", "subdir"] not in called_args
49
-
50
- def test_skips_pushd_popd(self, tmp_path):
51
- scenario = _FakeScenario(
52
- id="t2",
53
- setup_commands=("pushd dir", "popd"),
54
- )
55
- called_args: list[list[str]] = []
56
-
57
- def fake_run(args, **kwargs):
58
- called_args.append(args)
59
- return subprocess.CompletedProcess(args=args, returncode=0)
60
-
61
- with patch("scripts.runner.subprocess.run", side_effect=fake_run):
62
- _setup_sandbox(tmp_path, scenario)
63
-
64
- assert ["pushd", "dir"] not in called_args
65
- assert ["popd"] not in called_args
66
-
67
- def test_tolerates_missing_executable(self, tmp_path):
68
- """A scenario referencing an unavailable tool must not crash setup."""
69
- scenario = _FakeScenario(
70
- id="t3",
71
- setup_commands=("nonexistent-tool-xyz arg",),
72
- )
73
-
74
- def fake_run(args, **kwargs):
75
- if args[0] == "nonexistent-tool-xyz":
76
- raise FileNotFoundError(2, "No such file or directory")
77
- return subprocess.CompletedProcess(args=args, returncode=0)
78
-
79
- with patch("scripts.runner.subprocess.run", side_effect=fake_run):
80
- # Must NOT raise — missing tools are skipped, not fatal
81
- _setup_sandbox(tmp_path, scenario)
82
-
83
- def test_real_commands_still_run(self, tmp_path):
84
- """Skip logic must not break legitimate setup commands."""
85
- scenario = _FakeScenario(
86
- id="t4",
87
- setup_commands=("touch file.txt", "cd ignored", "echo hi"),
88
- )
89
- called_args: list[list[str]] = []
90
-
91
- def fake_run(args, **kwargs):
92
- called_args.append(args)
93
- return subprocess.CompletedProcess(args=args, returncode=0)
94
-
95
- with patch("scripts.runner.subprocess.run", side_effect=fake_run):
96
- _setup_sandbox(tmp_path, scenario)
97
-
98
- # Real commands present, cd absent
99
- assert ["touch", "file.txt"] in called_args
100
- assert ["echo", "hi"] in called_args
101
- assert ["cd", "ignored"] not in called_args
102
-
103
-
104
- class TestRunScenarioMaxTurnsTermination:
105
- """rc=1 with terminal_reason=max_turns is graceful termination, not failure.
106
-
107
- claude -p returns rc=1 when --max-turns is reached, but the stream-json
108
- output is still valid. Treating this as RuntimeError aborts scenarios
109
- that would have produced useful observations. Detect the marker in stdout
110
- and downgrade rc=1 + max_turns to non-fatal.
111
- """
112
-
113
- def test_rc1_with_max_turns_marker_returns_normally(self, tmp_path, monkeypatch):
114
- scenario = _FakeScenario(id="mt1", prompt="long task", setup_commands=())
115
-
116
- # Skip sandbox setup side effects
117
- monkeypatch.setattr("scripts.runner._setup_sandbox", lambda *a, **kw: None)
118
-
119
- max_turns_stdout = (
120
- '{"type":"system","subtype":"init","session_id":"s1"}\n'
121
- '{"type":"result","terminal_reason":"max_turns"}\n'
122
- )
123
-
124
- fake_result = subprocess.CompletedProcess(
125
- args=["claude"], returncode=1, stdout=max_turns_stdout, stderr=""
126
- )
127
-
128
- with patch("scripts.runner.subprocess.run", return_value=fake_result):
129
- # Must NOT raise — max_turns is graceful termination
130
- run_scenario(scenario, model="haiku")
131
-
132
- def test_rc1_without_max_turns_marker_still_raises(self, tmp_path, monkeypatch):
133
- """Real failures (rc≠0 with no max_turns marker) must still raise."""
134
- scenario = _FakeScenario(id="mt2", prompt="oops", setup_commands=())
135
- monkeypatch.setattr("scripts.runner._setup_sandbox", lambda *a, **kw: None)
136
-
137
- fake_result = subprocess.CompletedProcess(
138
- args=["claude"], returncode=1, stdout="", stderr="auth error"
139
- )
140
-
141
- with patch("scripts.runner.subprocess.run", return_value=fake_result):
142
- with pytest.raises(RuntimeError, match="claude -p failed"):
143
- run_scenario(scenario, model="haiku")
144
-
145
-
146
- class TestRunScenarioErrorIncludesStdoutTail:
147
- """Error messages must include stdout tail, not only stderr.
148
-
149
- When claude -p fails inside an LLM call, useful diagnostic context often
150
- appears in stdout (partial stream-json events, model error JSON), not
151
- stderr. Including stdout tail in the RuntimeError message dramatically
152
- improves debug-ability without adding any new dependency.
153
- """
154
-
155
- def test_error_message_contains_stdout_tail(self, tmp_path, monkeypatch):
156
- scenario = _FakeScenario(id="e1", prompt="x", setup_commands=())
157
- monkeypatch.setattr("scripts.runner._setup_sandbox", lambda *a, **kw: None)
158
-
159
- diagnostic_marker = "DIAG_STDOUT_MARKER_xyz123"
160
- fake_result = subprocess.CompletedProcess(
161
- args=["claude"],
162
- returncode=2,
163
- stdout=f"some context {diagnostic_marker} more text",
164
- stderr="generic error",
165
- )
166
-
167
- with patch("scripts.runner.subprocess.run", return_value=fake_result):
168
- with pytest.raises(RuntimeError) as excinfo:
169
- run_scenario(scenario, model="haiku")
170
-
171
- # Stdout marker MUST appear in the error message
172
- assert diagnostic_marker in str(excinfo.value)
@@ -1,141 +0,0 @@
1
- ---
2
- name: skill-scout
3
- description: Search existing local, marketplace, GitHub, and web skill sources before creating a new skill. Use when the user wants to create, build, fork, or find a skill for a workflow.
4
- metadata:
5
- origin: community
6
- ---
7
-
8
- # Skill Scout
9
-
10
- Use this skill before creating a new skill. The goal is to avoid duplicating
11
- existing community or marketplace work, while still vetting anything external
12
- before adoption.
13
-
14
- Source: salvaged from stale community PR #1232 by `redminwang`.
15
-
16
- ## When to Use
17
-
18
- - The user says "create a skill", "build a skill", "make a skill", or "new
19
- skill".
20
- - The user asks "is there a skill for X?" or "does a skill exist that does Y?"
21
- - The user describes a workflow and you are about to suggest creating a new
22
- skill.
23
- - The user wants to fork or extend an existing skill.
24
-
25
- If the user explicitly says to skip search or create from scratch, acknowledge
26
- that and proceed with the requested creation workflow.
27
-
28
- ## How It Works
29
-
30
- ### Step 1 - Capture Intent
31
-
32
- Extract:
33
-
34
- - The task the skill should perform.
35
- - The trigger conditions for using it.
36
- - The domain, tools, frameworks, or data sources involved.
37
- - Three to five search keywords plus useful synonyms.
38
-
39
- ### Step 2 - Search Local Sources
40
-
41
- Search installed and marketplace skill names first. Local sources are preferred
42
- because they are already part of the user's environment.
43
-
44
- ```bash
45
- find ~/.claude/skills -maxdepth 2 -name SKILL.md 2>/dev/null | grep -iE "keyword|synonym"
46
- find ~/.claude/plugins/marketplaces -path '*/skills/*/SKILL.md' 2>/dev/null | grep -iE "keyword|synonym"
47
- ```
48
-
49
- Then search frontmatter descriptions:
50
-
51
- ```bash
52
- grep -RilE "keyword|synonym" ~/.claude/skills ~/.claude/plugins/marketplaces 2>/dev/null
53
- ```
54
-
55
- ### Step 3 - Search Remote Sources
56
-
57
- Use available GitHub and web search tools. Prefer concise queries:
58
-
59
- ```bash
60
- gh search repos "claude code skill keyword" --limit 10 --sort stars
61
- gh search code "name: keyword" --filename SKILL.md --limit 10
62
- ```
63
-
64
- For web search, use at most three targeted queries such as:
65
-
66
- ```text
67
- "claude code skill" keyword
68
- "SKILL.md" keyword
69
- "everything-claude-code" keyword
70
- ```
71
-
72
- ### Step 4 - Vet External Matches
73
-
74
- Before recommending any external skill for adoption or forking:
75
-
76
- - Read the `SKILL.md` frontmatter and instructions.
77
- - Look for unexpected shell commands, file writes, network calls, credential
78
- handling, or package installs.
79
- - Check whether the repository appears maintained.
80
- - Prefer copying into a fresh local branch and reviewing the diff over editing
81
- marketplace originals.
82
-
83
- ### Step 5 - Rank Results
84
-
85
- Rank candidates by:
86
-
87
- 1. Exact keyword match in the skill name.
88
- 2. Keyword or synonym match in description.
89
- 3. Local installed or marketplace source.
90
- 4. Maintained GitHub source with recent activity.
91
- 5. Web-only mention.
92
-
93
- Cap the final list at 10 results.
94
-
95
- ### Step 6 - Present Decision Options
96
-
97
- Give the user a short table:
98
-
99
- | Option | Meaning |
100
- | --- | --- |
101
- | Use existing | Invoke or install a matching skill as-is. |
102
- | Fork or extend | Copy the closest skill and modify it. |
103
- | Create fresh | Build a new skill after confirming no close match exists. |
104
-
105
- Only create a new skill after the user chooses that path or after the search
106
- finds no close match.
107
-
108
- ## Examples
109
-
110
- ### Result Table
111
-
112
- ```markdown
113
- | # | Skill | Source | Why it matches | Gap |
114
- | --- | --- | --- | --- | --- |
115
- | 1 | article-writing | Local ECC | Drafts articles and guides | Not focused on release notes |
116
- | 2 | content-engine | Local ECC | Multi-format content workflow | Heavier than needed |
117
- | 3 | blog-writer | GitHub | Blog writing skill with recent commits | Needs security review |
118
- ```
119
-
120
- ### User-Facing Summary
121
-
122
- ```markdown
123
- I found two close local matches and one external candidate. The closest fit is
124
- `article-writing`; it covers drafting and revision, but it does not include the
125
- release-note checklist you asked for. I can either use it as-is, fork it into a
126
- release-note variant, or create a fresh skill.
127
- ```
128
-
129
- ## Anti-Patterns
130
-
131
- - Do not jump directly to new skill creation when a search is reasonable.
132
- - Do not install external skills without reading them first.
133
- - Do not present a long unranked list of weak matches.
134
- - Do not treat web-only mentions as trusted sources.
135
- - Do not edit installed marketplace originals in place.
136
-
137
- ## Related
138
-
139
- - `search-first` - General search-before-building workflow.
140
- - `skill-stocktake` - Audit installed skills for health, duplicates, and gaps.
141
- - `agent-sort` - Categorize and organize existing agents and skills.