opencode-skills-collection 3.1.0 → 3.1.2

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 (291) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +84 -1
  2. package/bundled-skills/2slides-ppt-generator/SKILL.md +8 -7
  3. package/bundled-skills/android-cli/SKILL.md +19 -7
  4. package/bundled-skills/android-ui-journey-testing/SKILL.md +191 -0
  5. package/bundled-skills/apple-notes-search/SKILL.md +12 -2
  6. package/bundled-skills/ask-matt/SKILL.md +92 -0
  7. package/bundled-skills/atlas-ledger/SKILL.md +8 -0
  8. package/bundled-skills/bugs-are-annoying/SKILL.md +137 -0
  9. package/bundled-skills/codebase-design/DEEPENING.md +37 -0
  10. package/bundled-skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
  11. package/bundled-skills/codebase-design/SKILL.md +145 -0
  12. package/bundled-skills/codex-fable5/SKILL.md +10 -2
  13. package/bundled-skills/competitor-analysis/LICENSE.txt +21 -0
  14. package/bundled-skills/competitor-analysis/SKILL.md +434 -0
  15. package/bundled-skills/competitor-analysis/references/battle-card-subagent.md +127 -0
  16. package/bundled-skills/competitor-analysis/references/battle-card.md +91 -0
  17. package/bundled-skills/competitor-analysis/references/example-research.md +130 -0
  18. package/bundled-skills/competitor-analysis/references/report-template.html +127 -0
  19. package/bundled-skills/competitor-analysis/references/research-patterns.md +217 -0
  20. package/bundled-skills/competitor-analysis/references/workflow.md +434 -0
  21. package/bundled-skills/competitor-analysis/scripts/capture_screenshots.mjs +142 -0
  22. package/bundled-skills/competitor-analysis/scripts/compile_report.mjs +929 -0
  23. package/bundled-skills/competitor-analysis/scripts/extract_vs_names.mjs +140 -0
  24. package/bundled-skills/competitor-analysis/scripts/gate_candidates.mjs +224 -0
  25. package/bundled-skills/competitor-analysis/scripts/list_urls.mjs +90 -0
  26. package/bundled-skills/competitor-analysis/scripts/md_utils.mjs +50 -0
  27. package/bundled-skills/competitor-analysis/scripts/merge_partials.mjs +291 -0
  28. package/bundled-skills/competitor-analysis/scripts/package.json +6 -0
  29. package/bundled-skills/design-it/3d-ui/SKILL.md +259 -0
  30. package/bundled-skills/design-it/SKILL.md +170 -0
  31. package/bundled-skills/design-it/ai-native-ui/SKILL.md +295 -0
  32. package/bundled-skills/design-it/aurora-ui/SKILL.md +307 -0
  33. package/bundled-skills/design-it/bento-ui/SKILL.md +314 -0
  34. package/bundled-skills/design-it/brutalism/SKILL.md +270 -0
  35. package/bundled-skills/design-it/brutalist-typography/SKILL.md +287 -0
  36. package/bundled-skills/design-it/card-based-design/SKILL.md +262 -0
  37. package/bundled-skills/design-it/claymorphism/SKILL.md +287 -0
  38. package/bundled-skills/design-it/color-blocking/SKILL.md +278 -0
  39. package/bundled-skills/design-it/command-center-ui/SKILL.md +345 -0
  40. package/bundled-skills/design-it/cyber-y2k/SKILL.md +312 -0
  41. package/bundled-skills/design-it/cyberpunk-ui/SKILL.md +262 -0
  42. package/bundled-skills/design-it/dark-mode/SKILL.md +289 -0
  43. package/bundled-skills/design-it/dashboard-design/SKILL.md +331 -0
  44. package/bundled-skills/design-it/data-dense-design/SKILL.md +322 -0
  45. package/bundled-skills/design-it/duotone-design/SKILL.md +248 -0
  46. package/bundled-skills/design-it/editorial-design/SKILL.md +328 -0
  47. package/bundled-skills/design-it/flat-design/SKILL.md +221 -0
  48. package/bundled-skills/design-it/flat-design-2/SKILL.md +240 -0
  49. package/bundled-skills/design-it/floating-ui/SKILL.md +299 -0
  50. package/bundled-skills/design-it/frutiger-aero/SKILL.md +274 -0
  51. package/bundled-skills/design-it/glassmorphism/SKILL.md +272 -0
  52. package/bundled-skills/design-it/gradient-design/SKILL.md +309 -0
  53. package/bundled-skills/design-it/high-contrast/SKILL.md +288 -0
  54. package/bundled-skills/design-it/holographic-ui/SKILL.md +310 -0
  55. package/bundled-skills/design-it/isometric-design/SKILL.md +228 -0
  56. package/bundled-skills/design-it/layered-design/SKILL.md +247 -0
  57. package/bundled-skills/design-it/material-design/SKILL.md +275 -0
  58. package/bundled-skills/design-it/maximalism/SKILL.md +297 -0
  59. package/bundled-skills/design-it/minimalism/SKILL.md +267 -0
  60. package/bundled-skills/design-it/monochromatic-ui/SKILL.md +296 -0
  61. package/bundled-skills/design-it/neo-brutalism/SKILL.md +270 -0
  62. package/bundled-skills/design-it/neumorphism/SKILL.md +248 -0
  63. package/bundled-skills/design-it/retro-design/SKILL.md +283 -0
  64. package/bundled-skills/design-it/retro-futurism/SKILL.md +259 -0
  65. package/bundled-skills/design-it/sci-fi-interface/SKILL.md +309 -0
  66. package/bundled-skills/design-it/skeuomorphism/SKILL.md +280 -0
  67. package/bundled-skills/design-it/soft-pastel/SKILL.md +307 -0
  68. package/bundled-skills/design-it/spatial-computing-ui/SKILL.md +300 -0
  69. package/bundled-skills/design-it/spatial-design/SKILL.md +268 -0
  70. package/bundled-skills/design-it/swiss-design/SKILL.md +293 -0
  71. package/bundled-skills/design-it/synthwave/SKILL.md +257 -0
  72. package/bundled-skills/design-it/tile-design/SKILL.md +297 -0
  73. package/bundled-skills/design-it/typography-first/SKILL.md +247 -0
  74. package/bundled-skills/design-it/vaporwave/SKILL.md +331 -0
  75. package/bundled-skills/design-it/vibrant-maximalism/SKILL.md +291 -0
  76. package/bundled-skills/design-it/widget-based-design/SKILL.md +274 -0
  77. package/bundled-skills/design-it/y2k-design/SKILL.md +268 -0
  78. package/bundled-skills/diagnosing-bugs/SKILL.md +165 -0
  79. package/bundled-skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
  80. package/bundled-skills/docs/contributors/skill-scoring.md +235 -0
  81. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  82. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  83. package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
  84. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  85. package/bundled-skills/docs/users/bundles.md +145 -1
  86. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  87. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  88. package/bundled-skills/docs/users/getting-started.md +1 -1
  89. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  90. package/bundled-skills/docs/users/specialized-plugin-roadmap.md +11 -4
  91. package/bundled-skills/docs/users/usage.md +4 -4
  92. package/bundled-skills/docs/users/visual-guide.md +4 -4
  93. package/bundled-skills/domain-modeling/ADR-FORMAT.md +47 -0
  94. package/bundled-skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
  95. package/bundled-skills/domain-modeling/SKILL.md +105 -0
  96. package/bundled-skills/dos-verify-done-claims/SKILL.md +16 -4
  97. package/bundled-skills/ecl-harness-engineer/agents/creator-config.md +1 -1
  98. package/bundled-skills/ecl-harness-engineer/references/environment-config-guide.md +2 -2
  99. package/bundled-skills/ecl-harness-engineer/references/environment-detection-guide.md +4 -4
  100. package/bundled-skills/event-staffing-ordering/SKILL.md +4 -0
  101. package/bundled-skills/grill-me/SKILL.md +36 -0
  102. package/bundled-skills/grill-with-docs/SKILL.md +36 -0
  103. package/bundled-skills/grilling/SKILL.md +39 -0
  104. package/bundled-skills/handoff/SKILL.md +45 -0
  105. package/bundled-skills/image-generator/.env.example +7 -0
  106. package/bundled-skills/image-generator/SKILL.md +509 -0
  107. package/bundled-skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
  108. package/bundled-skills/improve-codebase-architecture/SKILL.md +97 -0
  109. package/bundled-skills/learn/SKILL.md +156 -0
  110. package/bundled-skills/lesson-generator/SKILL.md +90 -0
  111. package/bundled-skills/llm-council/.env.example +7 -0
  112. package/bundled-skills/llm-council/SKILL.md +602 -0
  113. package/bundled-skills/loop-library/SKILL.md +208 -0
  114. package/bundled-skills/loop-library/agents/openai.yaml +4 -0
  115. package/bundled-skills/loop-library/references/catalog.md +270 -0
  116. package/bundled-skills/lovable-cleanup/SKILL.md +9 -7
  117. package/bundled-skills/macos-screen-recorder/SKILL.md +9 -1
  118. package/bundled-skills/mailtrap-managing-contacts/SKILL.md +112 -0
  119. package/bundled-skills/mailtrap-sending-emails/SKILL.md +167 -0
  120. package/bundled-skills/mailtrap-setting-up-sending-domain/SKILL.md +77 -0
  121. package/bundled-skills/mailtrap-testing-with-sandbox/SKILL.md +110 -0
  122. package/bundled-skills/prototype/LOGIC.md +79 -0
  123. package/bundled-skills/prototype/SKILL.md +62 -0
  124. package/bundled-skills/prototype/UI.md +112 -0
  125. package/bundled-skills/screenstudio-alt/SKILL.md +9 -1
  126. package/bundled-skills/setup-matt-pocock-skills/SKILL.md +158 -0
  127. package/bundled-skills/setup-matt-pocock-skills/domain.md +51 -0
  128. package/bundled-skills/setup-matt-pocock-skills/issue-tracker-github.md +34 -0
  129. package/bundled-skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +35 -0
  130. package/bundled-skills/setup-matt-pocock-skills/issue-tracker-local.md +19 -0
  131. package/bundled-skills/setup-matt-pocock-skills/triage-labels.md +15 -0
  132. package/bundled-skills/survey-generator/LICENSE +21 -0
  133. package/bundled-skills/survey-generator/SKILL.md +143 -0
  134. package/bundled-skills/survey-generator/build_artifact.py +208 -0
  135. package/bundled-skills/survey-generator/examples/agentic-engineering/research_bundle.json +1196 -0
  136. package/bundled-skills/survey-generator/examples/agentic-engineering/survey.html +706 -0
  137. package/bundled-skills/survey-generator/style_spec.json +85 -0
  138. package/bundled-skills/survey-generator/templates/research_bundle_template.json +69 -0
  139. package/bundled-skills/tdd/SKILL.md +139 -0
  140. package/bundled-skills/tdd/mocking.md +59 -0
  141. package/bundled-skills/tdd/refactoring.md +10 -0
  142. package/bundled-skills/tdd/tests.md +61 -0
  143. package/bundled-skills/teach/GLOSSARY-FORMAT.md +35 -0
  144. package/bundled-skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
  145. package/bundled-skills/teach/MISSION-FORMAT.md +31 -0
  146. package/bundled-skills/teach/RESOURCES-FORMAT.md +32 -0
  147. package/bundled-skills/teach/SKILL.md +169 -0
  148. package/bundled-skills/to-issues/SKILL.md +115 -0
  149. package/bundled-skills/to-prd/SKILL.md +104 -0
  150. package/bundled-skills/tools-page-seo-optimizer/SKILL.md +616 -0
  151. package/bundled-skills/triage/AGENT-BRIEF.md +207 -0
  152. package/bundled-skills/triage/OUT-OF-SCOPE.md +105 -0
  153. package/bundled-skills/triage/SKILL.md +143 -0
  154. package/bundled-skills/vibecode-production-qa-validator/SKILL.md +371 -141
  155. package/bundled-skills/wiki-builder/SKILL.md +157 -0
  156. package/bundled-skills/wiki-builder/agents/openai.yaml +5 -0
  157. package/bundled-skills/wiki-builder/references/wiki-flavors.md +98 -0
  158. package/bundled-skills/wiki-builder/scripts/init_wiki.sh +105 -0
  159. package/bundled-skills/wiki-builder/templates/index.md +20 -0
  160. package/bundled-skills/wiki-builder/templates/maintenance-log.md +7 -0
  161. package/bundled-skills/wiki-builder/templates/prompts/compile-concept-page.md +12 -0
  162. package/bundled-skills/wiki-builder/templates/prompts/compile-index.md +11 -0
  163. package/bundled-skills/wiki-builder/templates/prompts/compile-source-page.md +12 -0
  164. package/bundled-skills/wiki-builder/templates/prompts/lint-wiki.md +10 -0
  165. package/bundled-skills/wiki-builder/templates/prompts/query-and-file.md +11 -0
  166. package/bundled-skills/wiki-builder/templates/sources.md +9 -0
  167. package/bundled-skills/wiki-builder/templates/wiki.config.md +53 -0
  168. package/bundled-skills/writing-great-skills/GLOSSARY.md +181 -0
  169. package/bundled-skills/writing-great-skills/SKILL.md +111 -0
  170. package/bundled-skills/yao-meta-skill/SKILL.md +86 -0
  171. package/bundled-skills/yao-meta-skill/agents/interface.yaml +26 -0
  172. package/bundled-skills/yao-meta-skill/manifest.json +24 -0
  173. package/bundled-skills/yao-meta-skill/references/artifact-design-doctrine.md +49 -0
  174. package/bundled-skills/yao-meta-skill/references/authoring-discipline.md +78 -0
  175. package/bundled-skills/yao-meta-skill/references/autonomous-adaptation.md +65 -0
  176. package/bundled-skills/yao-meta-skill/references/distribution-registry-method.md +60 -0
  177. package/bundled-skills/yao-meta-skill/references/eval-playbook.md +69 -0
  178. package/bundled-skills/yao-meta-skill/references/gate-selection.md +68 -0
  179. package/bundled-skills/yao-meta-skill/references/governance.md +134 -0
  180. package/bundled-skills/yao-meta-skill/references/human-review-template.md +54 -0
  181. package/bundled-skills/yao-meta-skill/references/intent-dialogue.md +138 -0
  182. package/bundled-skills/yao-meta-skill/references/iteration-philosophy.md +30 -0
  183. package/bundled-skills/yao-meta-skill/references/non-skill-decision-tree.md +39 -0
  184. package/bundled-skills/yao-meta-skill/references/operating-modes.md +107 -0
  185. package/bundled-skills/yao-meta-skill/references/output-eval-method.md +113 -0
  186. package/bundled-skills/yao-meta-skill/references/output-quality-risk.md +41 -0
  187. package/bundled-skills/yao-meta-skill/references/output-visual-quality.md +53 -0
  188. package/bundled-skills/yao-meta-skill/references/packaging-contracts.md +70 -0
  189. package/bundled-skills/yao-meta-skill/references/pattern-extraction-doctrine.md +76 -0
  190. package/bundled-skills/yao-meta-skill/references/platform-capability-matrix.md +49 -0
  191. package/bundled-skills/yao-meta-skill/references/prompt-engineering-doctrine.md +76 -0
  192. package/bundled-skills/yao-meta-skill/references/qa-ladder.md +57 -0
  193. package/bundled-skills/yao-meta-skill/references/reference-scan.md +126 -0
  194. package/bundled-skills/yao-meta-skill/references/regression-cause-taxonomy.md +80 -0
  195. package/bundled-skills/yao-meta-skill/references/resource-boundaries.md +120 -0
  196. package/bundled-skills/yao-meta-skill/references/review-studio-method.md +87 -0
  197. package/bundled-skills/yao-meta-skill/references/review-waiver-method.md +76 -0
  198. package/bundled-skills/yao-meta-skill/references/runtime-conformance-method.md +21 -0
  199. package/bundled-skills/yao-meta-skill/references/skill-archetypes.md +86 -0
  200. package/bundled-skills/yao-meta-skill/references/skill-atlas-method.md +35 -0
  201. package/bundled-skills/yao-meta-skill/references/skill-engineering-method.md +210 -0
  202. package/bundled-skills/yao-meta-skill/references/skill-ir-method.md +41 -0
  203. package/bundled-skills/yao-meta-skill/references/skillops-decision-policy.md +53 -0
  204. package/bundled-skills/yao-meta-skill/references/systems-thinking-doctrine.md +75 -0
  205. package/bundled-skills/yao-meta-skill/references/telemetry-drift-method.md +182 -0
  206. package/bundled-skills/yao-meta-skill/references/trust-security-method.md +79 -0
  207. package/bundled-skills/yao-meta-skill/references/user-memory-policy.md +35 -0
  208. package/bundled-skills/youtube-notetaker/SKILL.md +209 -0
  209. package/bundled-skills/youtube-notetaker/reference/artifact.html +269 -0
  210. package/bundled-skills/youtube-notetaker/scripts/contact_sheet.py +53 -0
  211. package/bundled-skills/youtube-notetaker/scripts/detect_slides.sh +19 -0
  212. package/bundled-skills/youtube-notetaker/scripts/download.sh +24 -0
  213. package/bundled-skills/youtube-notetaker/scripts/extract_slides.py +43 -0
  214. package/bundled-skills/youtube-notetaker/scripts/serve.py +222 -0
  215. package/bundled-skills/youtube-notetaker/scripts/setup.sh +27 -0
  216. package/bundled-skills/youtube-notetaker/scripts/verify.sh +31 -0
  217. package/bundled-skills/youtube-notetaker/scripts/vtt_to_transcript.py +59 -0
  218. package/bundled-skills/youtube-notetaker/scripts/write_library_item.py +69 -0
  219. package/package.json +1 -1
  220. package/skills_index.json +2013 -330
  221. package/bundled-skills/ai-md/SKILL.md +0 -523
  222. package/bundled-skills/atlas-contract/SKILL.md +0 -650
  223. package/bundled-skills/busybox-on-windows/SKILL.md +0 -40
  224. package/bundled-skills/monte-carlo-prevent/SKILL.md +0 -257
  225. package/bundled-skills/monte-carlo-prevent/references/TROUBLESHOOTING.md +0 -23
  226. package/bundled-skills/monte-carlo-prevent/references/parameters.md +0 -32
  227. package/bundled-skills/monte-carlo-prevent/references/workflows.md +0 -478
  228. package/bundled-skills/monte-carlo-push-ingestion/SKILL.md +0 -372
  229. package/bundled-skills/monte-carlo-push-ingestion/references/anomaly-detection.md +0 -87
  230. package/bundled-skills/monte-carlo-push-ingestion/references/custom-lineage.md +0 -203
  231. package/bundled-skills/monte-carlo-push-ingestion/references/direct-http-api.md +0 -207
  232. package/bundled-skills/monte-carlo-push-ingestion/references/prerequisites.md +0 -150
  233. package/bundled-skills/monte-carlo-push-ingestion/references/push-lineage.md +0 -160
  234. package/bundled-skills/monte-carlo-push-ingestion/references/push-metadata.md +0 -158
  235. package/bundled-skills/monte-carlo-push-ingestion/references/push-query-logs.md +0 -219
  236. package/bundled-skills/monte-carlo-push-ingestion/references/validation.md +0 -257
  237. package/bundled-skills/monte-carlo-push-ingestion/scripts/sample_verify.py +0 -357
  238. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_lineage.py +0 -70
  239. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_metadata.py +0 -65
  240. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_query_logs.py +0 -70
  241. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_lineage.py +0 -214
  242. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_metadata.py +0 -160
  243. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_query_logs.py +0 -164
  244. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_lineage.py +0 -198
  245. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_metadata.py +0 -193
  246. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_query_logs.py +0 -207
  247. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_and_push_metadata.py +0 -71
  248. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_and_push_query_logs.py +0 -64
  249. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_metadata.py +0 -253
  250. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_query_logs.py +0 -149
  251. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/push_metadata.py +0 -190
  252. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/push_query_logs.py +0 -208
  253. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_lineage.py +0 -83
  254. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_metadata.py +0 -77
  255. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_query_logs.py +0 -83
  256. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_lineage.py +0 -240
  257. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_metadata.py +0 -212
  258. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_query_logs.py +0 -204
  259. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_lineage.py +0 -192
  260. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_metadata.py +0 -178
  261. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_query_logs.py +0 -200
  262. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_lineage.py +0 -119
  263. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_metadata.py +0 -119
  264. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_query_logs.py +0 -117
  265. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_lineage.py +0 -265
  266. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_metadata.py +0 -313
  267. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_query_logs.py +0 -284
  268. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_lineage.py +0 -309
  269. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_metadata.py +0 -245
  270. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_query_logs.py +0 -255
  271. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_lineage.py +0 -78
  272. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_metadata.py +0 -80
  273. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_query_logs.py +0 -88
  274. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_lineage.py +0 -235
  275. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_metadata.py +0 -219
  276. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_query_logs.py +0 -239
  277. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_lineage.py +0 -178
  278. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_metadata.py +0 -178
  279. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_query_logs.py +0 -196
  280. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_lineage.py +0 -154
  281. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_metadata.py +0 -137
  282. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_query_logs.py +0 -137
  283. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_lineage.py +0 -349
  284. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_metadata.py +0 -329
  285. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_query_logs.py +0 -254
  286. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_lineage.py +0 -307
  287. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_metadata.py +0 -228
  288. package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_query_logs.py +0 -248
  289. package/bundled-skills/monte-carlo-push-ingestion/scripts/test_template_sdk_usage.py +0 -340
  290. package/bundled-skills/skill-optimizer/SKILL.md +0 -271
  291. package/bundled-skills/using-superpowers/SKILL.md +0 -98
@@ -1,228 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Push table metadata to Monte Carlo from a JSON manifest — push only.
4
-
5
- Reads a manifest file produced by ``collect_metadata.py`` and sends the assets
6
- to Monte Carlo as RelationalAsset events using the pycarlo push ingestion API.
7
- Large payloads are split into batches to stay under the 1 MB compressed limit.
8
-
9
- Can be run standalone via CLI or imported (use the ``push()`` function).
10
-
11
- Substitution points
12
- -------------------
13
- - MCD_INGEST_ID (env) / --key-id (CLI) : Monte Carlo ingestion key ID
14
- - MCD_INGEST_TOKEN (env) / --key-token (CLI) : Monte Carlo ingestion key token
15
- - MCD_RESOURCE_UUID (env) / --resource-uuid (CLI) : MC resource UUID for this connection
16
-
17
- Prerequisites
18
- -------------
19
- pip install pycarlo
20
-
21
- Usage
22
- -----
23
- python push_metadata.py \\
24
- --key-id <MCD_INGEST_ID> \\
25
- --key-token <MCD_INGEST_TOKEN> \\
26
- --resource-uuid <MCD_RESOURCE_UUID> \\
27
- --input-file metadata_output.json
28
- """
29
-
30
- import argparse
31
- import json
32
- import os
33
- from concurrent.futures import ThreadPoolExecutor, as_completed
34
- from datetime import datetime, timezone
35
-
36
- from pycarlo.core import Client, Session
37
- from pycarlo.features.ingestion import IngestionService
38
- from pycarlo.features.ingestion.models import (
39
- AssetField,
40
- AssetFreshness,
41
- AssetMetadata,
42
- AssetVolume,
43
- RelationalAsset,
44
- )
45
-
46
- # ← SUBSTITUTE: set RESOURCE_TYPE to match your Monte Carlo connection type
47
- RESOURCE_TYPE = "snowflake"
48
-
49
- # Maximum assets per batch — conservative default to keep compressed payload under 1 MB
50
- # ← SUBSTITUTE: tune based on average asset size (fields per table, description length, etc.)
51
- _BATCH_SIZE = 500
52
-
53
-
54
- def _asset_from_dict(d: dict) -> RelationalAsset:
55
- """Reconstruct a RelationalAsset from a manifest dict entry."""
56
- fields = [
57
- AssetField(
58
- name=f["name"],
59
- type=f.get("type"),
60
- description=f.get("description"),
61
- )
62
- for f in d.get("fields", [])
63
- ]
64
-
65
- volume = None
66
- if d.get("volume"):
67
- volume = AssetVolume(
68
- row_count=d["volume"].get("row_count"),
69
- byte_count=d["volume"].get("byte_count"),
70
- )
71
-
72
- freshness = None
73
- if d.get("freshness"):
74
- freshness = AssetFreshness(
75
- last_update_time=d["freshness"].get("last_update_time"),
76
- )
77
-
78
- return RelationalAsset(
79
- type=d.get("type", "TABLE"),
80
- metadata=AssetMetadata(
81
- name=d["name"],
82
- database=d["database"],
83
- schema=d["schema"],
84
- description=d.get("description"),
85
- ),
86
- fields=fields,
87
- volume=volume,
88
- freshness=freshness,
89
- )
90
-
91
-
92
- def push(
93
- input_file: str,
94
- resource_uuid: str,
95
- key_id: str,
96
- key_token: str,
97
- batch_size: int = _BATCH_SIZE,
98
- output_file: str = "metadata_push_result.json",
99
- ) -> dict:
100
- """
101
- Read a metadata manifest and push assets to Monte Carlo in batches.
102
-
103
- Returns a result dict with invocation IDs for each batch.
104
- """
105
- with open(input_file) as fh:
106
- manifest = json.load(fh)
107
-
108
- asset_dicts = manifest.get("assets", [])
109
- resource_type = manifest.get("resource_type", RESOURCE_TYPE)
110
- assets = [_asset_from_dict(d) for d in asset_dicts]
111
- print(f"Loaded {len(assets)} asset(s) from {input_file}")
112
-
113
- # Split into batches
114
- batches = []
115
- for i in range(0, max(len(assets), 1), batch_size):
116
- batches.append(assets[i : i + batch_size])
117
- total_batches = len(batches)
118
-
119
- def _push_batch(batch: list, batch_num: int) -> str | None:
120
- """Push a single batch using a dedicated Session (thread-safe)."""
121
- client = Client(session=Session(mcd_id=key_id, mcd_token=key_token, scope="Ingestion"))
122
- service = IngestionService(mc_client=client)
123
- result = service.send_metadata(
124
- resource_uuid=resource_uuid,
125
- resource_type=resource_type,
126
- events=batch,
127
- )
128
- invocation_id = service.extract_invocation_id(result)
129
- print(f" Pushed batch {batch_num}/{total_batches} ({len(batch)} assets) — invocation_id={invocation_id}")
130
- return invocation_id
131
-
132
- # Push batches in parallel (each thread gets its own pycarlo Session)
133
- max_workers = min(4, total_batches)
134
- invocation_ids: list[str | None] = [None] * total_batches
135
-
136
- with ThreadPoolExecutor(max_workers=max_workers) as pool:
137
- futures = {
138
- pool.submit(_push_batch, batch, i + 1): i
139
- for i, batch in enumerate(batches)
140
- }
141
- for future in as_completed(futures):
142
- idx = futures[future]
143
- try:
144
- invocation_ids[idx] = future.result()
145
- except Exception as exc:
146
- print(f" ERROR pushing batch {idx + 1}: {exc}")
147
- raise
148
-
149
- print(f" All {total_batches} batches pushed ({max_workers} workers)")
150
-
151
- push_result = {
152
- "resource_uuid": resource_uuid,
153
- "resource_type": resource_type,
154
- "invocation_ids": invocation_ids,
155
- "pushed_at": datetime.now(tz=timezone.utc).isoformat(),
156
- "total_assets": len(assets),
157
- "batch_count": total_batches,
158
- "batch_size": batch_size,
159
- }
160
- with open(output_file, "w") as fh:
161
- json.dump(push_result, fh, indent=2)
162
- print(f"Push result written to {output_file}")
163
-
164
- return push_result
165
-
166
-
167
- def main() -> None:
168
- parser = argparse.ArgumentParser(
169
- description="Push Snowflake table metadata from a manifest to Monte Carlo",
170
- )
171
- parser.add_argument(
172
- "--key-id",
173
- default=os.environ.get("MCD_INGEST_ID"),
174
- help="Monte Carlo ingestion key ID (env: MCD_INGEST_ID)",
175
- )
176
- parser.add_argument(
177
- "--key-token",
178
- default=os.environ.get("MCD_INGEST_TOKEN"),
179
- help="Monte Carlo ingestion key token (env: MCD_INGEST_TOKEN)",
180
- )
181
- parser.add_argument(
182
- "--resource-uuid",
183
- default=os.environ.get("MCD_RESOURCE_UUID"),
184
- help="Monte Carlo resource UUID for this Snowflake connection (env: MCD_RESOURCE_UUID)",
185
- )
186
- parser.add_argument(
187
- "--input-file",
188
- default="metadata_output.json",
189
- help="Path to the collect manifest to read (default: metadata_output.json)",
190
- )
191
- parser.add_argument(
192
- "--output-file",
193
- default="metadata_push_result.json",
194
- help="Path to write the push result (default: metadata_push_result.json)",
195
- )
196
- parser.add_argument(
197
- "--batch-size",
198
- type=int,
199
- default=_BATCH_SIZE,
200
- help=f"Max assets per push batch (default: {_BATCH_SIZE})",
201
- )
202
- args = parser.parse_args()
203
-
204
- missing = [
205
- name
206
- for name, val in [
207
- ("--key-id", args.key_id),
208
- ("--key-token", args.key_token),
209
- ("--resource-uuid", args.resource_uuid),
210
- ]
211
- if not val
212
- ]
213
- if missing:
214
- parser.error(f"Missing required arguments: {', '.join(missing)}")
215
-
216
- push(
217
- input_file=args.input_file,
218
- resource_uuid=args.resource_uuid,
219
- key_id=args.key_id,
220
- key_token=args.key_token,
221
- batch_size=args.batch_size,
222
- output_file=args.output_file,
223
- )
224
- print("Done.")
225
-
226
-
227
- if __name__ == "__main__":
228
- main()
@@ -1,248 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Push query logs to Monte Carlo from a JSON manifest — push only.
4
-
5
- Reads a manifest file produced by ``collect_query_logs.py`` and sends the query
6
- log entries to Monte Carlo using the pycarlo push ingestion API. Large payloads
7
- are split into batches to stay under the 1 MB compressed limit.
8
-
9
- Can be run standalone via CLI or imported (use the ``push()`` function).
10
-
11
- Substitution points
12
- -------------------
13
- - MCD_INGEST_ID (env) / --key-id (CLI) : Monte Carlo ingestion key ID
14
- - MCD_INGEST_TOKEN (env) / --key-token (CLI) : Monte Carlo ingestion key token
15
- - MCD_RESOURCE_UUID (env) / --resource-uuid (CLI) : MC resource UUID for this connection
16
-
17
- Prerequisites
18
- -------------
19
- pip install pycarlo
20
-
21
- Usage
22
- -----
23
- python push_query_logs.py \\
24
- --key-id <MCD_INGEST_ID> \\
25
- --key-token <MCD_INGEST_TOKEN> \\
26
- --resource-uuid <MCD_RESOURCE_UUID> \\
27
- --input-file query_logs_output.json
28
- """
29
-
30
- import argparse
31
- import json
32
- import os
33
- from concurrent.futures import ThreadPoolExecutor, as_completed
34
- from datetime import datetime, timezone
35
-
36
- from dateutil.parser import isoparse
37
- from pycarlo.core import Client, Session
38
- from pycarlo.features.ingestion import IngestionService
39
- from pycarlo.features.ingestion.models import QueryLogEntry
40
-
41
- # ← SUBSTITUTE: set LOG_TYPE to match your warehouse type (query logs use log_type, not resource_type)
42
- LOG_TYPE = "snowflake"
43
-
44
- # Maximum entries per batch — conservative default to keep compressed payload under 1 MB.
45
- # Query logs include full SQL text — keep batches small to stay under the 1 MB
46
- # compressed payload limit. 50 entries can trigger 413 on active warehouses.
47
- # ← SUBSTITUTE: tune based on average query length
48
- _BATCH_SIZE = 100
49
-
50
- # Truncate query_text longer than this to prevent 413 errors.
51
- # Some SQL statements (e.g., generated by BI tools) can be 100KB+ and blow up
52
- # compressed payloads even at small batch sizes.
53
- _MAX_QUERY_TEXT_LEN = 10_000
54
-
55
-
56
- def _build_query_log_entries(queries: list[dict]) -> list[QueryLogEntry]:
57
- """Convert manifest query dicts into QueryLogEntry objects."""
58
- entries = []
59
- truncated = 0
60
- for q in queries:
61
- start_time = q.get("start_time")
62
- end_time = q.get("end_time")
63
- query_text = q.get("query_text") or ""
64
- query_id = q.get("query_id")
65
- user_name = q.get("user")
66
- warehouse_name = q.get("warehouse")
67
- bytes_scanned = q.get("bytes_scanned")
68
- rows_produced = q.get("rows_produced")
69
-
70
- # Truncate very long SQL to prevent 413 Request Too Large
71
- if len(query_text) > _MAX_QUERY_TEXT_LEN:
72
- query_text = query_text[:_MAX_QUERY_TEXT_LEN] + "... [TRUNCATED]"
73
- truncated += 1
74
-
75
- extra = {}
76
- if warehouse_name is not None:
77
- extra["warehouse_name"] = warehouse_name
78
- if bytes_scanned is not None:
79
- extra["bytes_scanned"] = int(bytes_scanned)
80
-
81
- entries.append(
82
- QueryLogEntry(
83
- start_time=isoparse(start_time) if start_time else None,
84
- end_time=isoparse(end_time) if end_time else None,
85
- query_text=query_text,
86
- query_id=query_id,
87
- user=user_name,
88
- returned_rows=int(rows_produced) if rows_produced is not None else None,
89
- extra=extra or None,
90
- )
91
- )
92
- if truncated:
93
- print(f" Truncated {truncated} query text(s) exceeding {_MAX_QUERY_TEXT_LEN} chars")
94
- return entries
95
-
96
-
97
- def push(
98
- input_file: str,
99
- resource_uuid: str,
100
- key_id: str,
101
- key_token: str,
102
- batch_size: int = _BATCH_SIZE,
103
- output_file: str = "query_logs_push_result.json",
104
- ) -> dict:
105
- """
106
- Read a query log manifest and push entries to Monte Carlo in batches.
107
-
108
- Returns a result dict with invocation IDs for each batch.
109
- """
110
- with open(input_file) as fh:
111
- manifest = json.load(fh)
112
-
113
- queries = manifest.get("queries", [])
114
- log_type = manifest.get("log_type", LOG_TYPE)
115
- entries = _build_query_log_entries(queries)
116
- print(f"Loaded {len(entries)} query log entry/entries from {input_file}")
117
-
118
- if not entries:
119
- print("No query log entries to push.")
120
- push_result = {
121
- "resource_uuid": resource_uuid,
122
- "log_type": log_type,
123
- "invocation_ids": [],
124
- "pushed_at": datetime.now(tz=timezone.utc).isoformat(),
125
- "total_entries": 0,
126
- "batch_count": 0,
127
- "batch_size": batch_size,
128
- }
129
- with open(output_file, "w") as fh:
130
- json.dump(push_result, fh, indent=2)
131
- return push_result
132
-
133
- # Split into batches
134
- batches = []
135
- for i in range(0, len(entries), batch_size):
136
- batches.append(entries[i : i + batch_size])
137
- total_batches = len(batches)
138
-
139
- def _push_batch(batch: list, batch_num: int) -> str | None:
140
- """Push a single batch using a dedicated Session (thread-safe)."""
141
- client = Client(session=Session(mcd_id=key_id, mcd_token=key_token, scope="Ingestion"))
142
- service = IngestionService(mc_client=client)
143
- result = service.send_query_logs(
144
- resource_uuid=resource_uuid,
145
- log_type=log_type,
146
- events=batch,
147
- )
148
- invocation_id = service.extract_invocation_id(result)
149
- print(f" Pushed batch {batch_num}/{total_batches} ({len(batch)} entries) — invocation_id={invocation_id}")
150
- return invocation_id
151
-
152
- # Push batches in parallel (each thread gets its own pycarlo Session)
153
- max_workers = min(4, total_batches)
154
- invocation_ids: list[str | None] = [None] * total_batches
155
-
156
- with ThreadPoolExecutor(max_workers=max_workers) as pool:
157
- futures = {
158
- pool.submit(_push_batch, batch, i + 1): i
159
- for i, batch in enumerate(batches)
160
- }
161
- for future in as_completed(futures):
162
- idx = futures[future]
163
- try:
164
- invocation_ids[idx] = future.result()
165
- except Exception as exc:
166
- print(f" ERROR pushing batch {idx + 1}: {exc}")
167
- raise
168
-
169
- print(f" All {total_batches} batches pushed ({max_workers} workers)")
170
-
171
- push_result = {
172
- "resource_uuid": resource_uuid,
173
- "log_type": log_type,
174
- "invocation_ids": invocation_ids,
175
- "pushed_at": datetime.now(tz=timezone.utc).isoformat(),
176
- "total_entries": len(entries),
177
- "batch_count": total_batches,
178
- "batch_size": batch_size,
179
- }
180
- with open(output_file, "w") as fh:
181
- json.dump(push_result, fh, indent=2)
182
- print(f"Push result written to {output_file}")
183
-
184
- return push_result
185
-
186
-
187
- def main() -> None:
188
- parser = argparse.ArgumentParser(
189
- description="Push Snowflake query logs from a manifest to Monte Carlo",
190
- )
191
- parser.add_argument(
192
- "--key-id",
193
- default=os.environ.get("MCD_INGEST_ID"),
194
- help="Monte Carlo ingestion key ID (env: MCD_INGEST_ID)",
195
- )
196
- parser.add_argument(
197
- "--key-token",
198
- default=os.environ.get("MCD_INGEST_TOKEN"),
199
- help="Monte Carlo ingestion key token (env: MCD_INGEST_TOKEN)",
200
- )
201
- parser.add_argument(
202
- "--resource-uuid",
203
- default=os.environ.get("MCD_RESOURCE_UUID"),
204
- help="Monte Carlo resource UUID for this Snowflake connection (env: MCD_RESOURCE_UUID)",
205
- )
206
- parser.add_argument(
207
- "--input-file",
208
- default="query_logs_output.json",
209
- help="Path to the collect manifest to read (default: query_logs_output.json)",
210
- )
211
- parser.add_argument(
212
- "--output-file",
213
- default="query_logs_push_result.json",
214
- help="Path to write the push result (default: query_logs_push_result.json)",
215
- )
216
- parser.add_argument(
217
- "--batch-size",
218
- type=int,
219
- default=_BATCH_SIZE,
220
- help=f"Max entries per push batch (default: {_BATCH_SIZE})",
221
- )
222
- args = parser.parse_args()
223
-
224
- missing = [
225
- name
226
- for name, val in [
227
- ("--key-id", args.key_id),
228
- ("--key-token", args.key_token),
229
- ("--resource-uuid", args.resource_uuid),
230
- ]
231
- if not val
232
- ]
233
- if missing:
234
- parser.error(f"Missing required arguments: {', '.join(missing)}")
235
-
236
- push(
237
- input_file=args.input_file,
238
- resource_uuid=args.resource_uuid,
239
- key_id=args.key_id,
240
- key_token=args.key_token,
241
- batch_size=args.batch_size,
242
- output_file=args.output_file,
243
- )
244
- print("Done.")
245
-
246
-
247
- if __name__ == "__main__":
248
- main()