@prismer/runtime 2.0.8 → 2.2.63

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 (633) hide show
  1. package/CHANGELOG.md +4004 -0
  2. package/README.md +34 -12
  3. package/apc/skills/FIELD-DICTIONARY.md +111 -0
  4. package/apc/skills/bug-reproduce/SKILL.md +150 -0
  5. package/apc/skills/bug-reproduce/skill.json +96 -0
  6. package/apc/skills/code-review/SKILL.md +198 -0
  7. package/apc/skills/code-review/skill.json +124 -0
  8. package/apc/skills/design-review/SKILL.md +122 -0
  9. package/apc/skills/design-review/skill.json +88 -0
  10. package/apc/skills/doc-sync/SKILL.md +168 -0
  11. package/apc/skills/doc-sync/skill.json +81 -0
  12. package/apc/skills/env-doctor/SKILL.md +194 -0
  13. package/apc/skills/env-doctor/skill.json +209 -0
  14. package/apc/skills/git-ops/SKILL.md +189 -0
  15. package/apc/skills/git-ops/skill.json +94 -0
  16. package/apc/skills/impact-trace/SKILL.md +168 -0
  17. package/apc/skills/impact-trace/skill.json +104 -0
  18. package/apc/skills/observability/SKILL.md +195 -0
  19. package/apc/skills/observability/skill.json +116 -0
  20. package/apc/skills/release-db-config-sync/SKILL.md +186 -0
  21. package/apc/skills/release-db-config-sync/skill.json +109 -0
  22. package/apc/skills/release-ota-promote/SKILL.md +195 -0
  23. package/apc/skills/release-ota-promote/skill.json +176 -0
  24. package/apc/skills/release-preflight/SKILL.md +174 -0
  25. package/apc/skills/release-preflight/skill.json +175 -0
  26. package/apc/skills/release-rollback/SKILL.md +214 -0
  27. package/apc/skills/release-rollback/skill.json +230 -0
  28. package/apc/skills/release-tag/SKILL.md +194 -0
  29. package/apc/skills/release-tag/skill.json +94 -0
  30. package/apc/skills/releasing-prod/SKILL.md +49 -0
  31. package/apc/skills/releasing-test/SKILL.md +144 -0
  32. package/apc/skills/sdk-release/SKILL.md +200 -0
  33. package/apc/skills/spec-intake/SKILL.md +169 -0
  34. package/apc/skills/spec-intake/skill.json +93 -0
  35. package/apc/skills/test-result-feedback/SKILL.md +239 -0
  36. package/apc/skills/test-result-feedback/skill.json +193 -0
  37. package/apc/skills/test-runner/SKILL.md +169 -0
  38. package/apc/skills/test-runner/skill.json +103 -0
  39. package/apc/skills/ui-align/SKILL.md +209 -0
  40. package/apc/skills/ui-align/skill.json +114 -0
  41. package/apc/skills/ui-canvas/SKILL.md +148 -0
  42. package/apc/skills/ui-canvas/skill.json +127 -0
  43. package/built-in-skills/agent-coordination/SKILL.md +77 -38
  44. package/built-in-skills/agent-meta/SKILL.md +12 -0
  45. package/built-in-skills/assets/SKILL.md +9 -7
  46. package/built-in-skills/browser-use/SKILL.md +93 -0
  47. package/built-in-skills/canvas-design/SKILL.md +4 -3
  48. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-OFL.txt +93 -0
  49. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSerif-OFL.txt +93 -0
  50. package/built-in-skills/canvas-design/canvas-fonts/LICENSE-SOURCES.md +16 -0
  51. package/built-in-skills/claim-agent-ownership/SKILL.md +10 -5
  52. package/built-in-skills/claude-api/SKILL.md +2 -1
  53. package/built-in-skills/claude-api/python/claude-api/README.md +2 -2
  54. package/built-in-skills/claude-api/python/claude-api/tool-use.md +9 -5
  55. package/built-in-skills/claude-api/python/managed-agents/README.md +11 -1
  56. package/built-in-skills/claude-api/shared/error-codes.md +4 -4
  57. package/built-in-skills/claude-api/shared/managed-agents-client-patterns.md +4 -2
  58. package/built-in-skills/claude-api/shared/managed-agents-core.md +1 -2
  59. package/built-in-skills/claude-api/shared/managed-agents-events.md +41 -22
  60. package/built-in-skills/claude-api/shared/managed-agents-multiagent.md +5 -3
  61. package/built-in-skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +1 -1
  62. package/built-in-skills/claude-api/shared/managed-agents-tools.md +2 -3
  63. package/built-in-skills/claude-api/shared/model-migration.md +3 -3
  64. package/built-in-skills/claude-api/shared/models.md +1 -1
  65. package/built-in-skills/claude-api/typescript/claude-api/batches.md +1 -1
  66. package/built-in-skills/claude-api/typescript/claude-api/files-api.md +3 -1
  67. package/built-in-skills/claude-api/typescript/claude-api/tool-use.md +8 -2
  68. package/built-in-skills/claude-api/typescript/managed-agents/README.md +8 -2
  69. package/built-in-skills/codebase-design/DEEPENING.md +37 -0
  70. package/built-in-skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
  71. package/built-in-skills/codebase-design/LICENSE +21 -0
  72. package/built-in-skills/codebase-design/SKILL.md +130 -0
  73. package/built-in-skills/codebase-design/references/requesting-code-review/GUIDE.md +291 -0
  74. package/built-in-skills/codebase-design/references/requesting-code-review/LICENSE +21 -0
  75. package/built-in-skills/codebase-design/references/requesting-code-review/LICENSE.superpowers +21 -0
  76. package/built-in-skills/codebase-design/references/requesting-code-review/NOTICE.md +37 -0
  77. package/built-in-skills/codebase-design/references/sdlc-review/GUIDE.md +130 -0
  78. package/built-in-skills/codebase-design/references/sdlc-review/LICENSE +21 -0
  79. package/built-in-skills/codebase-design/references/sdlc-review/NOTICE.md +17 -0
  80. package/built-in-skills/codebase-design/references/simplify-code/GUIDE.md +269 -0
  81. package/built-in-skills/codebase-design/references/simplify-code/LICENSE +21 -0
  82. package/built-in-skills/codebase-design/references/simplify-code/NOTICE.md +37 -0
  83. package/built-in-skills/competitor-intelligence/LICENSE +21 -0
  84. package/built-in-skills/competitor-intelligence/NOTICE.md +6 -0
  85. package/built-in-skills/competitor-intelligence/SKILL.md +125 -0
  86. package/built-in-skills/competitor-intelligence/scripts/watch_state.py +160 -0
  87. package/built-in-skills/conversation-compaction/SKILL.md +117 -0
  88. package/built-in-skills/council-creator/SKILL.md +427 -0
  89. package/built-in-skills/diagnosing-bugs/LICENSE +21 -0
  90. package/built-in-skills/diagnosing-bugs/SKILL.md +148 -0
  91. package/built-in-skills/diagnosing-bugs/references/desktop-dom/GUIDE.md +64 -0
  92. package/built-in-skills/diagnosing-bugs/references/desktop-dom/LICENSE +21 -0
  93. package/built-in-skills/diagnosing-bugs/references/desktop-dom/NOTICE.md +17 -0
  94. package/built-in-skills/diagnosing-bugs/references/systematic-debugging/GUIDE.md +410 -0
  95. package/built-in-skills/diagnosing-bugs/references/systematic-debugging/LICENSE +21 -0
  96. package/built-in-skills/diagnosing-bugs/references/systematic-debugging/LICENSE.superpowers +21 -0
  97. package/built-in-skills/diagnosing-bugs/references/systematic-debugging/NOTICE.md +37 -0
  98. package/built-in-skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
  99. package/built-in-skills/doc-coauthoring/SKILL.md +7 -0
  100. package/built-in-skills/doc-coauthoring/references/humanizer/GUIDE.md +647 -0
  101. package/built-in-skills/doc-coauthoring/references/humanizer/LICENSE +21 -0
  102. package/built-in-skills/doc-coauthoring/references/humanizer/LICENSE.hermes +21 -0
  103. package/built-in-skills/doc-coauthoring/references/humanizer/PROVENANCE.md +7 -0
  104. package/built-in-skills/document-actions/LICENSE +21 -0
  105. package/built-in-skills/document-actions/NOTICE.md +21 -0
  106. package/built-in-skills/document-actions/SKILL.md +46 -0
  107. package/built-in-skills/domain-modeling/ADR-FORMAT.md +47 -0
  108. package/built-in-skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
  109. package/built-in-skills/domain-modeling/LICENSE +21 -0
  110. package/built-in-skills/domain-modeling/SKILL.md +76 -0
  111. package/built-in-skills/evidence-citations/LICENSE +21 -0
  112. package/built-in-skills/evidence-citations/NOTICE.md +21 -0
  113. package/built-in-skills/evidence-citations/SKILL.md +46 -0
  114. package/built-in-skills/evidence-citations/references/citation-formats.md +68 -0
  115. package/built-in-skills/evidence-citations/references/grounding-rationale.md +64 -0
  116. package/built-in-skills/evidence-citations/scripts/sources.py +720 -0
  117. package/built-in-skills/frontend-design/SKILL.md +7 -0
  118. package/built-in-skills/frontend-design/references/claude-design/GUIDE.md +650 -0
  119. package/built-in-skills/frontend-design/references/claude-design/LICENSE +21 -0
  120. package/built-in-skills/frontend-design/references/claude-design/LICENSE.hermes +21 -0
  121. package/built-in-skills/frontend-design/references/claude-design/PROVENANCE.md +7 -0
  122. package/built-in-skills/human-approval/SKILL.md +17 -2
  123. package/built-in-skills/image-generate/SKILL.md +107 -301
  124. package/built-in-skills/image-generate/scripts/generate-and-deliver.mjs +310 -0
  125. package/built-in-skills/ingest/SKILL.md +13 -45
  126. package/built-in-skills/internal-comms/SKILL.md +1 -0
  127. package/built-in-skills/liteparse/SKILL.md +130 -110
  128. package/built-in-skills/mcp-builder/SKILL.md +1 -0
  129. package/built-in-skills/mcp-builder/reference/evaluation.md +11 -2
  130. package/built-in-skills/mcp-builder/reference/node_mcp_server.md +34 -5
  131. package/built-in-skills/mcp-builder/reference/python_mcp_server.md +6 -2
  132. package/built-in-skills/mcp-builder/scripts/connections.py +1 -1
  133. package/built-in-skills/mcp-builder/scripts/evaluation.py +52 -34
  134. package/built-in-skills/mcp-builder/scripts/requirements.txt +2 -2
  135. package/built-in-skills/meeting-actions/LICENSE +21 -0
  136. package/built-in-skills/meeting-actions/NOTICE.md +21 -0
  137. package/built-in-skills/meeting-actions/SKILL.md +48 -0
  138. package/built-in-skills/memory/SKILL.md +444 -55
  139. package/built-in-skills/memory/references/llm-wiki/GUIDE.md +468 -0
  140. package/built-in-skills/memory/references/llm-wiki/LICENSE +21 -0
  141. package/built-in-skills/memory/references/llm-wiki/NOTICE.md +4 -0
  142. package/built-in-skills/memory/references/llm-wiki/scripts/lint_wiki.py +84 -0
  143. package/built-in-skills/memory/references/llm-wiki/scripts/requirements.txt +1 -0
  144. package/built-in-skills/memory/references/llm-wiki/templates/SCHEMA.md +19 -0
  145. package/built-in-skills/memory/references/llm-wiki/templates/index.md +9 -0
  146. package/built-in-skills/memory/references/llm-wiki/templates/log.md +4 -0
  147. package/built-in-skills/memory-dream/SKILL.md +332 -0
  148. package/built-in-skills/memory-import/SKILL.md +51 -0
  149. package/built-in-skills/office-artifacts/NOTICE.md +15 -0
  150. package/built-in-skills/office-artifacts/SKILL.md +37 -4
  151. package/built-in-skills/office-artifacts/references/RESOURCE-LIMITS.md +44 -0
  152. package/built-in-skills/office-artifacts/references/document-generation/GUIDE.md +105 -0
  153. package/built-in-skills/office-artifacts/references/docx/GUIDE.md +196 -0
  154. package/built-in-skills/office-artifacts/references/docx/LICENSE +21 -0
  155. package/built-in-skills/office-artifacts/references/docx/NOTICE.md +21 -0
  156. package/built-in-skills/office-artifacts/references/docx/references/revisions-and-comments.md +88 -0
  157. package/built-in-skills/office-artifacts/references/docx/scripts/docx_comments.py +292 -0
  158. package/built-in-skills/office-artifacts/references/docx/scripts/docx_common.py +93 -0
  159. package/built-in-skills/office-artifacts/references/docx/scripts/docx_create.py +177 -0
  160. package/built-in-skills/office-artifacts/references/docx/scripts/docx_edit.py +250 -0
  161. package/built-in-skills/office-artifacts/references/docx/scripts/docx_read.py +169 -0
  162. package/built-in-skills/office-artifacts/references/docx/scripts/docx_revisions.py +149 -0
  163. package/built-in-skills/office-artifacts/references/docx/scripts/docx_template.py +70 -0
  164. package/built-in-skills/office-artifacts/references/docx/scripts/docx_validate.py +155 -0
  165. package/built-in-skills/office-artifacts/references/docx/tests/test_docx_skill.py +525 -0
  166. package/built-in-skills/office-artifacts/references/pdf/GUIDE.md +125 -0
  167. package/built-in-skills/office-artifacts/references/pdf/LICENSE +21 -0
  168. package/built-in-skills/office-artifacts/references/pdf/NOTICE.md +21 -0
  169. package/built-in-skills/office-artifacts/references/pdf/references/forms.md +99 -0
  170. package/built-in-skills/office-artifacts/references/pdf/references/nano-pdf-editing.md +40 -0
  171. package/built-in-skills/office-artifacts/references/pdf/references/ocr-extraction.md +165 -0
  172. package/built-in-skills/office-artifacts/references/pdf/scripts/_raster.py +87 -0
  173. package/built-in-skills/office-artifacts/references/pdf/scripts/extract_marker.py +95 -0
  174. package/built-in-skills/office-artifacts/references/pdf/scripts/extract_pymupdf.py +107 -0
  175. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_create.py +153 -0
  176. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_fill_form.py +97 -0
  177. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_form_layout.py +168 -0
  178. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_make_form.py +145 -0
  179. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_merge.py +50 -0
  180. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_meta.py +123 -0
  181. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_page_image.py +101 -0
  182. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_read.py +153 -0
  183. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_secure.py +71 -0
  184. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_split.py +86 -0
  185. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_stamp.py +145 -0
  186. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_watermark.py +51 -0
  187. package/built-in-skills/office-artifacts/references/pdf/tests/test_pdf_skill.py +414 -0
  188. package/built-in-skills/office-artifacts/references/powerpoint/GUIDE.md +220 -0
  189. package/built-in-skills/office-artifacts/references/powerpoint/LICENSE +21 -0
  190. package/built-in-skills/office-artifacts/references/powerpoint/NOTICE.md +21 -0
  191. package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_create.py +214 -0
  192. package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_edit.py +442 -0
  193. package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_from_template.py +88 -0
  194. package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_read.py +131 -0
  195. package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_render.py +104 -0
  196. package/built-in-skills/office-artifacts/references/powerpoint/tests/test_powerpoint_skill.py +478 -0
  197. package/built-in-skills/office-artifacts/references/xlsx/GUIDE.md +196 -0
  198. package/built-in-skills/office-artifacts/references/xlsx/LICENSE +21 -0
  199. package/built-in-skills/office-artifacts/references/xlsx/NOTICE.md +21 -0
  200. package/built-in-skills/office-artifacts/references/xlsx/references/restructuring.md +74 -0
  201. package/built-in-skills/office-artifacts/references/xlsx/scripts/csv_to_xlsx.py +108 -0
  202. package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_create.py +259 -0
  203. package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_edit.py +269 -0
  204. package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_read.py +160 -0
  205. package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_recalc.py +111 -0
  206. package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_restructure.py +418 -0
  207. package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_to_csv.py +69 -0
  208. package/built-in-skills/office-artifacts/references/xlsx/tests/test_xlsx_skill.py +542 -0
  209. package/built-in-skills/office-artifacts/tests/test_resource_regressions.py +272 -0
  210. package/built-in-skills/okr/SKILL.md +154 -0
  211. package/built-in-skills/persona/SKILL.md +81 -0
  212. package/built-in-skills/persona-generator/SKILL.md +296 -0
  213. package/built-in-skills/pkf-svg/SKILL.md +258 -0
  214. package/built-in-skills/pkf-svg/references/architecture-diagram/GUIDE.md +148 -0
  215. package/built-in-skills/pkf-svg/references/architecture-diagram/LICENSE +21 -0
  216. package/built-in-skills/pkf-svg/references/architecture-diagram/LICENSE.hermes +21 -0
  217. package/built-in-skills/pkf-svg/references/architecture-diagram/PROVENANCE.md +7 -0
  218. package/built-in-skills/pkf-svg/references/architecture-diagram/templates/template.html +345 -0
  219. package/built-in-skills/pkf-writing/SKILL.md +258 -0
  220. package/built-in-skills/prismer-airtable/LICENSE +21 -0
  221. package/built-in-skills/prismer-airtable/NOTICE.md +11 -0
  222. package/built-in-skills/prismer-airtable/SKILL.md +248 -0
  223. package/built-in-skills/prismer-airtable/scripts/airtable_client.py +76 -0
  224. package/built-in-skills/prismer-apple-notes/LICENSE +21 -0
  225. package/built-in-skills/prismer-apple-notes/NOTICE.md +17 -0
  226. package/built-in-skills/prismer-apple-notes/SKILL.md +118 -0
  227. package/built-in-skills/prismer-apple-notes/scripts/readiness.py +47 -0
  228. package/built-in-skills/prismer-apple-reminders/LICENSE +21 -0
  229. package/built-in-skills/prismer-apple-reminders/NOTICE.md +17 -0
  230. package/built-in-skills/prismer-apple-reminders/SKILL.md +155 -0
  231. package/built-in-skills/prismer-apple-reminders/scripts/readiness.py +47 -0
  232. package/built-in-skills/prismer-ascii-video/LICENSE +21 -0
  233. package/built-in-skills/prismer-ascii-video/LICENSE.hermes +21 -0
  234. package/built-in-skills/prismer-ascii-video/PROVENANCE.md +7 -0
  235. package/built-in-skills/prismer-ascii-video/README.md +290 -0
  236. package/built-in-skills/prismer-ascii-video/SKILL.md +252 -0
  237. package/built-in-skills/prismer-ascii-video/provenance/category-DESCRIPTION.md +3 -0
  238. package/built-in-skills/prismer-ascii-video/references/architecture.md +807 -0
  239. package/built-in-skills/prismer-ascii-video/references/composition.md +900 -0
  240. package/built-in-skills/prismer-ascii-video/references/effects.md +1877 -0
  241. package/built-in-skills/prismer-ascii-video/references/inputs.md +693 -0
  242. package/built-in-skills/prismer-ascii-video/references/optimization.md +688 -0
  243. package/built-in-skills/prismer-ascii-video/references/scenes.md +1018 -0
  244. package/built-in-skills/prismer-ascii-video/references/shaders.md +1408 -0
  245. package/built-in-skills/prismer-ascii-video/references/troubleshooting.md +360 -0
  246. package/built-in-skills/prismer-baoyu-infographic/LICENSE +21 -0
  247. package/built-in-skills/prismer-baoyu-infographic/LICENSE.hermes +21 -0
  248. package/built-in-skills/prismer-baoyu-infographic/LICENSE.origin +21 -0
  249. package/built-in-skills/prismer-baoyu-infographic/PORT_NOTES.md +37 -0
  250. package/built-in-skills/prismer-baoyu-infographic/PROVENANCE.md +7 -0
  251. package/built-in-skills/prismer-baoyu-infographic/SKILL.md +240 -0
  252. package/built-in-skills/prismer-baoyu-infographic/references/analysis-framework.md +182 -0
  253. package/built-in-skills/prismer-baoyu-infographic/references/base-prompt.md +43 -0
  254. package/built-in-skills/prismer-baoyu-infographic/references/layouts/bento-grid.md +41 -0
  255. package/built-in-skills/prismer-baoyu-infographic/references/layouts/binary-comparison.md +48 -0
  256. package/built-in-skills/prismer-baoyu-infographic/references/layouts/bridge.md +41 -0
  257. package/built-in-skills/prismer-baoyu-infographic/references/layouts/circular-flow.md +41 -0
  258. package/built-in-skills/prismer-baoyu-infographic/references/layouts/comic-strip.md +41 -0
  259. package/built-in-skills/prismer-baoyu-infographic/references/layouts/comparison-matrix.md +41 -0
  260. package/built-in-skills/prismer-baoyu-infographic/references/layouts/dashboard.md +41 -0
  261. package/built-in-skills/prismer-baoyu-infographic/references/layouts/dense-modules.md +72 -0
  262. package/built-in-skills/prismer-baoyu-infographic/references/layouts/funnel.md +41 -0
  263. package/built-in-skills/prismer-baoyu-infographic/references/layouts/hierarchical-layers.md +48 -0
  264. package/built-in-skills/prismer-baoyu-infographic/references/layouts/hub-spoke.md +41 -0
  265. package/built-in-skills/prismer-baoyu-infographic/references/layouts/iceberg.md +41 -0
  266. package/built-in-skills/prismer-baoyu-infographic/references/layouts/isometric-map.md +41 -0
  267. package/built-in-skills/prismer-baoyu-infographic/references/layouts/jigsaw.md +41 -0
  268. package/built-in-skills/prismer-baoyu-infographic/references/layouts/linear-progression.md +48 -0
  269. package/built-in-skills/prismer-baoyu-infographic/references/layouts/periodic-table.md +41 -0
  270. package/built-in-skills/prismer-baoyu-infographic/references/layouts/story-mountain.md +41 -0
  271. package/built-in-skills/prismer-baoyu-infographic/references/layouts/structural-breakdown.md +48 -0
  272. package/built-in-skills/prismer-baoyu-infographic/references/layouts/tree-branching.md +41 -0
  273. package/built-in-skills/prismer-baoyu-infographic/references/layouts/venn-diagram.md +41 -0
  274. package/built-in-skills/prismer-baoyu-infographic/references/layouts/winding-roadmap.md +41 -0
  275. package/built-in-skills/prismer-baoyu-infographic/references/structured-content-template.md +244 -0
  276. package/built-in-skills/prismer-baoyu-infographic/references/styles/aged-academia.md +36 -0
  277. package/built-in-skills/prismer-baoyu-infographic/references/styles/bold-graphic.md +36 -0
  278. package/built-in-skills/prismer-baoyu-infographic/references/styles/chalkboard.md +61 -0
  279. package/built-in-skills/prismer-baoyu-infographic/references/styles/claymation.md +29 -0
  280. package/built-in-skills/prismer-baoyu-infographic/references/styles/corporate-memphis.md +29 -0
  281. package/built-in-skills/prismer-baoyu-infographic/references/styles/craft-handmade.md +44 -0
  282. package/built-in-skills/prismer-baoyu-infographic/references/styles/cyberpunk-neon.md +29 -0
  283. package/built-in-skills/prismer-baoyu-infographic/references/styles/hand-drawn-edu.md +63 -0
  284. package/built-in-skills/prismer-baoyu-infographic/references/styles/ikea-manual.md +29 -0
  285. package/built-in-skills/prismer-baoyu-infographic/references/styles/kawaii.md +29 -0
  286. package/built-in-skills/prismer-baoyu-infographic/references/styles/knolling.md +29 -0
  287. package/built-in-skills/prismer-baoyu-infographic/references/styles/lego-brick.md +29 -0
  288. package/built-in-skills/prismer-baoyu-infographic/references/styles/morandi-journal.md +60 -0
  289. package/built-in-skills/prismer-baoyu-infographic/references/styles/origami.md +29 -0
  290. package/built-in-skills/prismer-baoyu-infographic/references/styles/pixel-art.md +29 -0
  291. package/built-in-skills/prismer-baoyu-infographic/references/styles/pop-laboratory.md +48 -0
  292. package/built-in-skills/prismer-baoyu-infographic/references/styles/retro-pop-grid.md +47 -0
  293. package/built-in-skills/prismer-baoyu-infographic/references/styles/storybook-watercolor.md +29 -0
  294. package/built-in-skills/prismer-baoyu-infographic/references/styles/subway-map.md +29 -0
  295. package/built-in-skills/prismer-baoyu-infographic/references/styles/technical-schematic.md +36 -0
  296. package/built-in-skills/prismer-baoyu-infographic/references/styles/ui-wireframe.md +29 -0
  297. package/built-in-skills/prismer-blocked-page-recovery/LICENSE +21 -0
  298. package/built-in-skills/prismer-blocked-page-recovery/NOTICE.md +17 -0
  299. package/built-in-skills/prismer-blocked-page-recovery/SKILL.md +158 -0
  300. package/built-in-skills/prismer-blocked-page-recovery/scripts/recover_page.py +311 -0
  301. package/built-in-skills/prismer-box/LICENSE +21 -0
  302. package/built-in-skills/prismer-box/NOTICE.md +11 -0
  303. package/built-in-skills/prismer-box/SKILL.md +147 -0
  304. package/built-in-skills/prismer-box/references/bulk-operations.md +43 -0
  305. package/built-in-skills/prismer-box/references/cli-guide.md +133 -0
  306. package/built-in-skills/prismer-box/references/content-workflows.md +86 -0
  307. package/built-in-skills/prismer-box/references/hubs.md +77 -0
  308. package/built-in-skills/prismer-box/references/oauth-setup.md +92 -0
  309. package/built-in-skills/prismer-box/references/rest-api.md +37 -0
  310. package/built-in-skills/prismer-box/references/sdk-development.md +85 -0
  311. package/built-in-skills/prismer-box/references/search-and-ai.md +147 -0
  312. package/built-in-skills/prismer-box/references/troubleshooting.md +33 -0
  313. package/built-in-skills/prismer-box/references/webhooks-and-events.md +43 -0
  314. package/built-in-skills/prismer-codebase-inspection/LICENSE +21 -0
  315. package/built-in-skills/prismer-codebase-inspection/NOTICE.md +17 -0
  316. package/built-in-skills/prismer-codebase-inspection/SKILL.md +141 -0
  317. package/built-in-skills/prismer-computer-use/LICENSE +21 -0
  318. package/built-in-skills/prismer-computer-use/NOTICE.md +17 -0
  319. package/built-in-skills/prismer-computer-use/SKILL.md +372 -0
  320. package/built-in-skills/prismer-design-md/LICENSE +21 -0
  321. package/built-in-skills/prismer-design-md/LICENSE.hermes +21 -0
  322. package/built-in-skills/prismer-design-md/PROVENANCE.md +7 -0
  323. package/built-in-skills/prismer-design-md/SKILL.md +227 -0
  324. package/built-in-skills/prismer-design-md/templates/starter.md +99 -0
  325. package/built-in-skills/prismer-email-inbox-triage/LICENSE +21 -0
  326. package/built-in-skills/prismer-email-inbox-triage/NOTICE.md +11 -0
  327. package/built-in-skills/prismer-email-inbox-triage/SKILL.md +116 -0
  328. package/built-in-skills/prismer-findmy/LICENSE +21 -0
  329. package/built-in-skills/prismer-findmy/NOTICE.md +17 -0
  330. package/built-in-skills/prismer-findmy/SKILL.md +150 -0
  331. package/built-in-skills/prismer-findmy/scripts/readiness.py +47 -0
  332. package/built-in-skills/prismer-gif-search/LICENSE +21 -0
  333. package/built-in-skills/prismer-gif-search/LICENSE.hermes +21 -0
  334. package/built-in-skills/prismer-gif-search/PROVENANCE.md +7 -0
  335. package/built-in-skills/prismer-gif-search/SKILL.md +97 -0
  336. package/built-in-skills/prismer-gif-search/scripts/tenor.py +81 -0
  337. package/built-in-skills/prismer-github/LICENSE +21 -0
  338. package/built-in-skills/prismer-github/NOTICE.md +17 -0
  339. package/built-in-skills/prismer-github/SKILL.md +74 -0
  340. package/built-in-skills/prismer-github/references/auth.md +91 -0
  341. package/built-in-skills/prismer-github/references/ci-troubleshooting.md +193 -0
  342. package/built-in-skills/prismer-github/references/code-review.md +465 -0
  343. package/built-in-skills/prismer-github/references/conventional-commits.md +81 -0
  344. package/built-in-skills/prismer-github/references/github-api-cheatsheet.md +177 -0
  345. package/built-in-skills/prismer-github/references/issue-to-pr.md +74 -0
  346. package/built-in-skills/prismer-github/references/issues.md +336 -0
  347. package/built-in-skills/prismer-github/references/pr-workflow.md +346 -0
  348. package/built-in-skills/prismer-github/references/repo-management.md +484 -0
  349. package/built-in-skills/prismer-github/references/review-output-template.md +84 -0
  350. package/built-in-skills/prismer-github/scripts/ensure-gh.py +132 -0
  351. package/built-in-skills/prismer-github/scripts/gh-env.sh +25 -0
  352. package/built-in-skills/prismer-github/scripts/git-credential-token.py +68 -0
  353. package/built-in-skills/prismer-github/scripts/github-api.py +71 -0
  354. package/built-in-skills/prismer-github/scripts/github-context.py +28 -0
  355. package/built-in-skills/prismer-github/templates/bug-report.md +35 -0
  356. package/built-in-skills/prismer-github/templates/feature-request.md +31 -0
  357. package/built-in-skills/prismer-github/templates/pr-body-bugfix.md +35 -0
  358. package/built-in-skills/prismer-github/templates/pr-body-feature.md +33 -0
  359. package/built-in-skills/prismer-google-workspace/LICENSE +21 -0
  360. package/built-in-skills/prismer-google-workspace/NOTICE.md +11 -0
  361. package/built-in-skills/prismer-google-workspace/SKILL.md +369 -0
  362. package/built-in-skills/prismer-google-workspace/references/daily-brief.md +65 -0
  363. package/built-in-skills/prismer-google-workspace/references/gmail-search-syntax.md +63 -0
  364. package/built-in-skills/prismer-google-workspace/scripts/_hermes_home.py +17 -0
  365. package/built-in-skills/prismer-google-workspace/scripts/_private_state.py +39 -0
  366. package/built-in-skills/prismer-google-workspace/scripts/google_api.py +1339 -0
  367. package/built-in-skills/prismer-google-workspace/scripts/gws_bridge.py +121 -0
  368. package/built-in-skills/prismer-google-workspace/scripts/setup.py +563 -0
  369. package/built-in-skills/prismer-google-workspace/tests/test_productivity_regressions.py +214 -0
  370. package/built-in-skills/prismer-hermes-agent/LICENSE +21 -0
  371. package/built-in-skills/prismer-hermes-agent/NOTICE.md +17 -0
  372. package/built-in-skills/prismer-hermes-agent/SKILL.md +247 -0
  373. package/built-in-skills/prismer-hermes-agent/references/background-systems.md +108 -0
  374. package/built-in-skills/prismer-hermes-agent/references/cli-reference.md +158 -0
  375. package/built-in-skills/prismer-hermes-agent/references/configuration.md +96 -0
  376. package/built-in-skills/prismer-hermes-agent/references/contributor-guide.md +151 -0
  377. package/built-in-skills/prismer-hermes-agent/references/delegate-task-concurrency-diagnosis.md +47 -0
  378. package/built-in-skills/prismer-hermes-agent/references/desktop-plugins.md +215 -0
  379. package/built-in-skills/prismer-hermes-agent/references/native-mcp.md +351 -0
  380. package/built-in-skills/prismer-hermes-agent/references/petdex.md +82 -0
  381. package/built-in-skills/prismer-hermes-agent/references/portal-auth-for-third-party-apps.md +135 -0
  382. package/built-in-skills/prismer-hermes-agent/references/project-context-files.md +55 -0
  383. package/built-in-skills/prismer-hermes-agent/references/providers-and-models.md +81 -0
  384. package/built-in-skills/prismer-hermes-agent/references/security-privacy.md +73 -0
  385. package/built-in-skills/prismer-hermes-agent/references/slash-commands.md +119 -0
  386. package/built-in-skills/prismer-hermes-agent/references/themes.md +134 -0
  387. package/built-in-skills/prismer-hermes-agent/references/troubleshooting.md +87 -0
  388. package/built-in-skills/prismer-hermes-agent/references/tui-widgets.md +144 -0
  389. package/built-in-skills/prismer-hermes-agent/references/webhooks.md +219 -0
  390. package/built-in-skills/prismer-hermes-agent/references/windows-quirks.md +64 -0
  391. package/built-in-skills/prismer-hermes-agent/templates/clock.mjs +51 -0
  392. package/built-in-skills/prismer-hermes-agent/templates/plugin.js +97 -0
  393. package/built-in-skills/prismer-hermes-agent/templates/skin.yaml +49 -0
  394. package/built-in-skills/prismer-himalaya/LICENSE +21 -0
  395. package/built-in-skills/prismer-himalaya/NOTICE.md +11 -0
  396. package/built-in-skills/prismer-himalaya/SKILL.md +340 -0
  397. package/built-in-skills/prismer-himalaya/references/configuration.md +227 -0
  398. package/built-in-skills/prismer-himalaya/references/message-composition.md +206 -0
  399. package/built-in-skills/prismer-himalaya/scripts/compose_draft.py +48 -0
  400. package/built-in-skills/prismer-im-collab/SKILL.md +27 -7
  401. package/built-in-skills/prismer-imessage/LICENSE +21 -0
  402. package/built-in-skills/prismer-imessage/NOTICE.md +17 -0
  403. package/built-in-skills/prismer-imessage/SKILL.md +128 -0
  404. package/built-in-skills/prismer-imessage/scripts/readiness.py +47 -0
  405. package/built-in-skills/prismer-manim-video/LICENSE +21 -0
  406. package/built-in-skills/prismer-manim-video/LICENSE.hermes +21 -0
  407. package/built-in-skills/prismer-manim-video/PROVENANCE.md +7 -0
  408. package/built-in-skills/prismer-manim-video/README.md +23 -0
  409. package/built-in-skills/prismer-manim-video/SKILL.md +279 -0
  410. package/built-in-skills/prismer-manim-video/references/animation-design-thinking.md +161 -0
  411. package/built-in-skills/prismer-manim-video/references/animations.md +282 -0
  412. package/built-in-skills/prismer-manim-video/references/camera-and-3d.md +135 -0
  413. package/built-in-skills/prismer-manim-video/references/decorations.md +202 -0
  414. package/built-in-skills/prismer-manim-video/references/equations.md +216 -0
  415. package/built-in-skills/prismer-manim-video/references/graphs-and-data.md +163 -0
  416. package/built-in-skills/prismer-manim-video/references/mobjects.md +333 -0
  417. package/built-in-skills/prismer-manim-video/references/paper-explainer.md +255 -0
  418. package/built-in-skills/prismer-manim-video/references/production-quality.md +190 -0
  419. package/built-in-skills/prismer-manim-video/references/rendering.md +187 -0
  420. package/built-in-skills/prismer-manim-video/references/scene-planning.md +118 -0
  421. package/built-in-skills/prismer-manim-video/references/troubleshooting.md +135 -0
  422. package/built-in-skills/prismer-manim-video/references/updaters-and-trackers.md +260 -0
  423. package/built-in-skills/prismer-manim-video/references/visual-design.md +124 -0
  424. package/built-in-skills/prismer-manim-video/scripts/setup.sh +15 -0
  425. package/built-in-skills/prismer-maps/LICENSE +21 -0
  426. package/built-in-skills/prismer-maps/NOTICE.md +11 -0
  427. package/built-in-skills/prismer-maps/SKILL.md +240 -0
  428. package/built-in-skills/prismer-maps/scripts/maps_client.py +1324 -0
  429. package/built-in-skills/prismer-node-inspect-debugger/LICENSE +21 -0
  430. package/built-in-skills/prismer-node-inspect-debugger/NOTICE.md +17 -0
  431. package/built-in-skills/prismer-node-inspect-debugger/SKILL.md +347 -0
  432. package/built-in-skills/prismer-notion/LICENSE +21 -0
  433. package/built-in-skills/prismer-notion/NOTICE.md +11 -0
  434. package/built-in-skills/prismer-notion/SKILL.md +495 -0
  435. package/built-in-skills/prismer-notion/references/block-types.md +112 -0
  436. package/built-in-skills/prismer-obsidian/LICENSE +21 -0
  437. package/built-in-skills/prismer-obsidian/LICENSE.hermes +21 -0
  438. package/built-in-skills/prismer-obsidian/PROVENANCE.md +7 -0
  439. package/built-in-skills/prismer-obsidian/SKILL.md +80 -0
  440. package/built-in-skills/prismer-obsidian/provenance/category-DESCRIPTION.md +3 -0
  441. package/built-in-skills/prismer-obsidian/scripts/write_note.py +84 -0
  442. package/built-in-skills/prismer-p5js/LICENSE +21 -0
  443. package/built-in-skills/prismer-p5js/LICENSE.hermes +21 -0
  444. package/built-in-skills/prismer-p5js/PROVENANCE.md +7 -0
  445. package/built-in-skills/prismer-p5js/README.md +64 -0
  446. package/built-in-skills/prismer-p5js/SKILL.md +574 -0
  447. package/built-in-skills/prismer-p5js/references/animation.md +439 -0
  448. package/built-in-skills/prismer-p5js/references/color-systems.md +355 -0
  449. package/built-in-skills/prismer-p5js/references/core-api.md +410 -0
  450. package/built-in-skills/prismer-p5js/references/export-pipeline.md +534 -0
  451. package/built-in-skills/prismer-p5js/references/interaction.md +398 -0
  452. package/built-in-skills/prismer-p5js/references/shapes-and-geometry.md +300 -0
  453. package/built-in-skills/prismer-p5js/references/troubleshooting.md +532 -0
  454. package/built-in-skills/prismer-p5js/references/typography.md +302 -0
  455. package/built-in-skills/prismer-p5js/references/visual-effects.md +905 -0
  456. package/built-in-skills/prismer-p5js/references/webgl-and-3d.md +423 -0
  457. package/built-in-skills/prismer-p5js/scripts/export-frames.js +91 -0
  458. package/built-in-skills/prismer-p5js/scripts/render.sh +113 -0
  459. package/built-in-skills/prismer-p5js/scripts/serve.sh +25 -0
  460. package/built-in-skills/prismer-p5js/scripts/setup.sh +87 -0
  461. package/built-in-skills/prismer-p5js/templates/viewer.html +401 -0
  462. package/built-in-skills/prismer-popular-web-designs/LICENSE +21 -0
  463. package/built-in-skills/prismer-popular-web-designs/LICENSE.hermes +21 -0
  464. package/built-in-skills/prismer-popular-web-designs/LICENSE.origin +21 -0
  465. package/built-in-skills/prismer-popular-web-designs/PROVENANCE.md +7 -0
  466. package/built-in-skills/prismer-popular-web-designs/SKILL.md +218 -0
  467. package/built-in-skills/prismer-popular-web-designs/templates/airbnb.md +259 -0
  468. package/built-in-skills/prismer-popular-web-designs/templates/airtable.md +102 -0
  469. package/built-in-skills/prismer-popular-web-designs/templates/apple.md +326 -0
  470. package/built-in-skills/prismer-popular-web-designs/templates/bmw.md +193 -0
  471. package/built-in-skills/prismer-popular-web-designs/templates/cal.md +272 -0
  472. package/built-in-skills/prismer-popular-web-designs/templates/claude.md +325 -0
  473. package/built-in-skills/prismer-popular-web-designs/templates/clay.md +317 -0
  474. package/built-in-skills/prismer-popular-web-designs/templates/clickhouse.md +294 -0
  475. package/built-in-skills/prismer-popular-web-designs/templates/cohere.md +279 -0
  476. package/built-in-skills/prismer-popular-web-designs/templates/coinbase.md +142 -0
  477. package/built-in-skills/prismer-popular-web-designs/templates/composio.md +320 -0
  478. package/built-in-skills/prismer-popular-web-designs/templates/cursor.md +322 -0
  479. package/built-in-skills/prismer-popular-web-designs/templates/elevenlabs.md +278 -0
  480. package/built-in-skills/prismer-popular-web-designs/templates/expo.md +294 -0
  481. package/built-in-skills/prismer-popular-web-designs/templates/figma.md +233 -0
  482. package/built-in-skills/prismer-popular-web-designs/templates/framer.md +259 -0
  483. package/built-in-skills/prismer-popular-web-designs/templates/hashicorp.md +291 -0
  484. package/built-in-skills/prismer-popular-web-designs/templates/ibm.md +345 -0
  485. package/built-in-skills/prismer-popular-web-designs/templates/intercom.md +159 -0
  486. package/built-in-skills/prismer-popular-web-designs/templates/kraken.md +138 -0
  487. package/built-in-skills/prismer-popular-web-designs/templates/linear.app.md +380 -0
  488. package/built-in-skills/prismer-popular-web-designs/templates/lovable.md +311 -0
  489. package/built-in-skills/prismer-popular-web-designs/templates/minimax.md +270 -0
  490. package/built-in-skills/prismer-popular-web-designs/templates/mintlify.md +339 -0
  491. package/built-in-skills/prismer-popular-web-designs/templates/miro.md +121 -0
  492. package/built-in-skills/prismer-popular-web-designs/templates/mistral.ai.md +274 -0
  493. package/built-in-skills/prismer-popular-web-designs/templates/mongodb.md +279 -0
  494. package/built-in-skills/prismer-popular-web-designs/templates/notion.md +322 -0
  495. package/built-in-skills/prismer-popular-web-designs/templates/nvidia.md +306 -0
  496. package/built-in-skills/prismer-popular-web-designs/templates/ollama.md +280 -0
  497. package/built-in-skills/prismer-popular-web-designs/templates/opencode.ai.md +294 -0
  498. package/built-in-skills/prismer-popular-web-designs/templates/pinterest.md +243 -0
  499. package/built-in-skills/prismer-popular-web-designs/templates/posthog.md +269 -0
  500. package/built-in-skills/prismer-popular-web-designs/templates/raycast.md +281 -0
  501. package/built-in-skills/prismer-popular-web-designs/templates/replicate.md +274 -0
  502. package/built-in-skills/prismer-popular-web-designs/templates/resend.md +316 -0
  503. package/built-in-skills/prismer-popular-web-designs/templates/revolut.md +198 -0
  504. package/built-in-skills/prismer-popular-web-designs/templates/runwayml.md +257 -0
  505. package/built-in-skills/prismer-popular-web-designs/templates/sanity.md +370 -0
  506. package/built-in-skills/prismer-popular-web-designs/templates/sentry.md +275 -0
  507. package/built-in-skills/prismer-popular-web-designs/templates/spacex.md +207 -0
  508. package/built-in-skills/prismer-popular-web-designs/templates/spotify.md +259 -0
  509. package/built-in-skills/prismer-popular-web-designs/templates/stripe.md +335 -0
  510. package/built-in-skills/prismer-popular-web-designs/templates/supabase.md +268 -0
  511. package/built-in-skills/prismer-popular-web-designs/templates/superhuman.md +265 -0
  512. package/built-in-skills/prismer-popular-web-designs/templates/together.ai.md +276 -0
  513. package/built-in-skills/prismer-popular-web-designs/templates/uber.md +308 -0
  514. package/built-in-skills/prismer-popular-web-designs/templates/vercel.md +323 -0
  515. package/built-in-skills/prismer-popular-web-designs/templates/voltagent.md +336 -0
  516. package/built-in-skills/prismer-popular-web-designs/templates/warp.md +266 -0
  517. package/built-in-skills/prismer-popular-web-designs/templates/webflow.md +105 -0
  518. package/built-in-skills/prismer-popular-web-designs/templates/wise.md +186 -0
  519. package/built-in-skills/prismer-popular-web-designs/templates/x.ai.md +270 -0
  520. package/built-in-skills/prismer-popular-web-designs/templates/zapier.md +341 -0
  521. package/built-in-skills/prismer-product-price-monitor/LICENSE +21 -0
  522. package/built-in-skills/prismer-product-price-monitor/NOTICE.md +11 -0
  523. package/built-in-skills/prismer-product-price-monitor/SKILL.md +97 -0
  524. package/built-in-skills/prismer-product-price-monitor/scripts/watch_state.py +116 -0
  525. package/built-in-skills/prismer-python-debugpy/LICENSE +21 -0
  526. package/built-in-skills/prismer-python-debugpy/NOTICE.md +17 -0
  527. package/built-in-skills/prismer-python-debugpy/SKILL.md +377 -0
  528. package/built-in-skills/prismer-python-debugpy/scripts/dap_client.py +68 -0
  529. package/built-in-skills/prismer-songsee/LICENSE +21 -0
  530. package/built-in-skills/prismer-songsee/LICENSE.hermes +21 -0
  531. package/built-in-skills/prismer-songsee/PROVENANCE.md +7 -0
  532. package/built-in-skills/prismer-songsee/SKILL.md +91 -0
  533. package/built-in-skills/prismer-songwriting-and-ai-music/LICENSE +21 -0
  534. package/built-in-skills/prismer-songwriting-and-ai-music/LICENSE.hermes +21 -0
  535. package/built-in-skills/prismer-songwriting-and-ai-music/PROVENANCE.md +7 -0
  536. package/built-in-skills/prismer-songwriting-and-ai-music/SKILL.md +317 -0
  537. package/built-in-skills/prismer-spike/LICENSE +21 -0
  538. package/built-in-skills/prismer-spike/LICENSE.gsd +21 -0
  539. package/built-in-skills/prismer-spike/NOTICE.md +17 -0
  540. package/built-in-skills/prismer-spike/SKILL.md +212 -0
  541. package/built-in-skills/prismer-teams-meeting-pipeline/LICENSE +21 -0
  542. package/built-in-skills/prismer-teams-meeting-pipeline/NOTICE.md +11 -0
  543. package/built-in-skills/prismer-teams-meeting-pipeline/SKILL.md +156 -0
  544. package/built-in-skills/prismer-xurl/LICENSE +21 -0
  545. package/built-in-skills/prismer-xurl/LICENSE.hermes +21 -0
  546. package/built-in-skills/prismer-xurl/PROVENANCE.md +7 -0
  547. package/built-in-skills/prismer-xurl/SKILL.md +444 -0
  548. package/built-in-skills/prismer-xurl/provenance/category-DESCRIPTION.md +3 -0
  549. package/built-in-skills/prismer-youtube-content/LICENSE +21 -0
  550. package/built-in-skills/prismer-youtube-content/LICENSE.hermes +21 -0
  551. package/built-in-skills/prismer-youtube-content/PROVENANCE.md +7 -0
  552. package/built-in-skills/prismer-youtube-content/SKILL.md +86 -0
  553. package/built-in-skills/prismer-youtube-content/provenance/category-DESCRIPTION.md +3 -0
  554. package/built-in-skills/prismer-youtube-content/references/output-formats.md +56 -0
  555. package/built-in-skills/prismer-youtube-content/scripts/fetch_transcript.py +146 -0
  556. package/built-in-skills/proactivity/SKILL.md +84 -0
  557. package/built-in-skills/remotion/SKILL.md +431 -0
  558. package/built-in-skills/research-arxiv/LICENSE +21 -0
  559. package/built-in-skills/research-arxiv/NOTICE.md +4 -0
  560. package/built-in-skills/research-arxiv/SKILL.md +263 -0
  561. package/built-in-skills/research-arxiv/scripts/search_arxiv.py +111 -0
  562. package/built-in-skills/role-builder/SKILL.md +209 -0
  563. package/built-in-skills/role-builder/scripts/author-role.mjs +350 -0
  564. package/built-in-skills/role-builder/scripts/ingest-role.mjs +121 -0
  565. package/built-in-skills/role-builder/scripts/instantiate-and-run.mjs +304 -0
  566. package/built-in-skills/role-builder/scripts/operation-harness.mjs +269 -0
  567. package/built-in-skills/skill-creator/LICENSE.prismer +21 -0
  568. package/built-in-skills/skill-creator/NOTICE.md +18 -0
  569. package/built-in-skills/skill-creator/SKILL.md +182 -421
  570. package/built-in-skills/skill-creator/eval-viewer/generate_review.py +20 -31
  571. package/built-in-skills/skill-creator/eval-viewer/viewer.html +35 -23
  572. package/built-in-skills/skill-creator/references/external-library-import.md +110 -0
  573. package/built-in-skills/skill-creator/references/hermes-agent-skill-authoring/GUIDE.md +220 -0
  574. package/built-in-skills/skill-creator/references/hermes-agent-skill-authoring/LICENSE +21 -0
  575. package/built-in-skills/skill-creator/references/skill-authoring/GUIDE.md +134 -0
  576. package/built-in-skills/{skill-authoring/skill.json → skill-creator/references/skill-authoring/draft-contract.json} +3 -3
  577. package/built-in-skills/skill-creator/references/skill-builder/GUIDE.md +167 -0
  578. package/built-in-skills/skill-creator/references/skill-builder/scripts/ingest.mjs +93 -0
  579. package/built-in-skills/skill-creator/scripts/aggregate_benchmark.py +3 -2
  580. package/built-in-skills/skill-creator/scripts/import-library.mjs +498 -0
  581. package/built-in-skills/skill-creator/scripts/improve_description.py +14 -16
  582. package/built-in-skills/skill-creator/scripts/package_skill.py +16 -9
  583. package/built-in-skills/skill-creator/scripts/quick_validate.py +22 -5
  584. package/built-in-skills/skill-creator/scripts/run_eval.py +63 -144
  585. package/built-in-skills/skill-creator/scripts/run_loop.py +24 -16
  586. package/built-in-skills/slack-gif-creator/SKILL.md +20 -0
  587. package/built-in-skills/slack-gif-creator/core/gif_builder.py +13 -2
  588. package/built-in-skills/slack-gif-creator/core/validators.py +17 -7
  589. package/built-in-skills/tasks/SKILL.md +39 -24
  590. package/built-in-skills/tdd/LICENSE +21 -0
  591. package/built-in-skills/tdd/SKILL.md +117 -0
  592. package/built-in-skills/tdd/mocking.md +59 -0
  593. package/built-in-skills/tdd/refactoring.md +10 -0
  594. package/built-in-skills/tdd/references/test-driven-development/GUIDE.md +356 -0
  595. package/built-in-skills/tdd/references/test-driven-development/LICENSE +21 -0
  596. package/built-in-skills/tdd/references/test-driven-development/LICENSE.superpowers +21 -0
  597. package/built-in-skills/tdd/references/test-driven-development/NOTICE.md +37 -0
  598. package/built-in-skills/tdd/tests.md +61 -0
  599. package/built-in-skills/team/SKILL.md +3 -2
  600. package/built-in-skills/web-artifacts-builder/SKILL.md +4 -3
  601. package/built-in-skills/web-artifacts-builder/scripts/bundle-artifact.sh +9 -7
  602. package/built-in-skills/web-artifacts-builder/scripts/init-artifact.sh +28 -55
  603. package/built-in-skills/webapp-qa/LICENSE +21 -0
  604. package/built-in-skills/webapp-qa/NOTICE.md +37 -0
  605. package/built-in-skills/webapp-qa/SKILL.md +41 -0
  606. package/built-in-skills/webapp-qa/references/dogfood/GUIDE.md +161 -0
  607. package/built-in-skills/webapp-qa/references/issue-taxonomy.md +109 -0
  608. package/built-in-skills/webapp-qa/templates/dogfood-report-template.md +86 -0
  609. package/built-in-skills/webapp-testing/SKILL.md +10 -2
  610. package/built-in-skills/webapp-testing/examples/console_logging.py +10 -4
  611. package/built-in-skills/webapp-testing/examples/element_discovery.py +11 -4
  612. package/built-in-skills/webapp-testing/examples/static_html_automation.py +14 -9
  613. package/built-in-skills/webapp-testing/scripts/with_server.py +34 -10
  614. package/built-in-skills/wechat-pay/SKILL.md +59 -0
  615. package/built-in-skills/weekly-review/LICENSE +21 -0
  616. package/built-in-skills/weekly-review/NOTICE.md +21 -0
  617. package/built-in-skills/weekly-review/SKILL.md +49 -0
  618. package/components/eaas-pi-components.manifest.json +37 -0
  619. package/dist/cli.cjs +75799 -20210
  620. package/dist/cli.js +75900 -20248
  621. package/dist/index.cjs +76159 -20082
  622. package/dist/index.d.cts +4766 -766
  623. package/dist/index.d.ts +4766 -766
  624. package/dist/index.js +76040 -19960
  625. package/package.json +42 -6
  626. package/plugins/memory/prismer/__init__.py +1215 -0
  627. package/plugins/memory/prismer/plugin.yaml +8 -0
  628. package/plugins/memory/prismer/tool-schemas.generated.json +257 -0
  629. package/plugins/tools/prismer-recall/__init__.py +282 -0
  630. package/plugins/tools/prismer-recall/plugin.yaml +15 -0
  631. package/built-in-skills/memory-curation/SKILL.md +0 -135
  632. package/built-in-skills/skill-authoring/SKILL.md +0 -124
  633. package/built-in-skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
@@ -0,0 +1,498 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { createHash } from 'node:crypto';
4
+ import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, writeFileSync, openSync, closeSync, unlinkSync } from 'node:fs';
5
+ import { spawnSync } from 'node:child_process';
6
+ import { dirname, relative, resolve, sep } from 'node:path';
7
+
8
+ export class LibraryImportError extends Error {
9
+ constructor(stage, code, message, exitCode = 1, details = undefined) {
10
+ super(message);
11
+ this.name = 'LibraryImportError';
12
+ this.stage = stage;
13
+ this.code = code;
14
+ this.exitCode = exitCode;
15
+ this.details = details;
16
+ }
17
+ }
18
+
19
+ const SECRET_OPTIONS = new Set(['--api-key', '--token', '--jwt', '--secret', '--password']);
20
+ const BOOLEAN_OPTIONS = new Set(['--json', '--preflight-only', '--help']);
21
+ const IGNORED_DIRECTORIES = new Set(['.git', '.prismer', 'node_modules']);
22
+ const BUNDLE_EXCLUDED_FILES = new Set(['.DS_Store', 'Thumbs.db']);
23
+
24
+ function optionName(arg) {
25
+ const equalsAt = typeof arg === 'string' ? arg.indexOf('=') : -1;
26
+ return equalsAt === -1 ? arg : arg.slice(0, equalsAt);
27
+ }
28
+
29
+ function isLocalTarget(hostname) {
30
+ return ['localhost', '127.0.0.1', '::1', 'host.docker.internal'].includes(hostname);
31
+ }
32
+
33
+ function parseBoolean(value) {
34
+ return ['1', 'true', 'yes'].includes(String(value ?? '').toLowerCase());
35
+ }
36
+
37
+ function normalizeRelative(root, absolute) {
38
+ return relative(root, absolute).split(sep).join('/') || '.';
39
+ }
40
+
41
+ function sha256(value) {
42
+ return createHash('sha256').update(value).digest('hex');
43
+ }
44
+
45
+ function defaultLedgerPath(root) {
46
+ return resolve(`.prismer/operations/skill-library-${sha256(root).slice(0, 16)}.json`);
47
+ }
48
+
49
+ export function loadLibraryImportConfig(argv, env = process.env) {
50
+ const flags = new Set();
51
+ for (let index = 0; index < argv.length; index += 1) {
52
+ const arg = argv[index];
53
+ const name = optionName(arg);
54
+ if (SECRET_OPTIONS.has(name)) {
55
+ throw new LibraryImportError(
56
+ 'local_validation',
57
+ 'SECRET_ARGUMENT_FORBIDDEN',
58
+ `${name} is forbidden; credentials must come from the injected environment`,
59
+ 2,
60
+ );
61
+ }
62
+ if (!BOOLEAN_OPTIONS.has(arg)) {
63
+ throw new LibraryImportError(
64
+ 'local_validation',
65
+ 'UNKNOWN_ARGUMENT',
66
+ `unknown argument at position ${index + 1}`,
67
+ 2,
68
+ );
69
+ }
70
+ flags.add(arg);
71
+ }
72
+ if (flags.has('--help')) return { help: true };
73
+
74
+ const sourceRootRaw = env.PRISMER_SKILL_LIBRARY_ROOT?.trim();
75
+ if (!sourceRootRaw) {
76
+ throw new LibraryImportError('local_validation', 'CONFIG_MISSING', 'PRISMER_SKILL_LIBRARY_ROOT is required', 2);
77
+ }
78
+ const sourceRoot = resolve(sourceRootRaw);
79
+ if (!existsSync(sourceRoot) || !statSync(sourceRoot).isDirectory()) {
80
+ throw new LibraryImportError(
81
+ 'local_validation',
82
+ 'SOURCE_ROOT_INVALID',
83
+ 'PRISMER_SKILL_LIBRARY_ROOT must identify an existing directory',
84
+ 2,
85
+ );
86
+ }
87
+
88
+ let baseUrl;
89
+ try {
90
+ baseUrl = new URL((env.PRISMER_CLOUD_BASE || 'http://127.0.0.1:3000').replace(/\/$/, ''));
91
+ } catch {
92
+ throw new LibraryImportError('local_validation', 'INVALID_BASE_URL', 'PRISMER_CLOUD_BASE must be a valid URL', 2);
93
+ }
94
+ if (
95
+ !['http:', 'https:'].includes(baseUrl.protocol) ||
96
+ baseUrl.username ||
97
+ baseUrl.password ||
98
+ baseUrl.search ||
99
+ baseUrl.hash || baseUrl.pathname !== '/'
100
+ ) {
101
+ throw new LibraryImportError(
102
+ 'local_validation',
103
+ 'UNSAFE_BASE_URL',
104
+ 'PRISMER_CLOUD_BASE must be a plain http(s) origin without credentials, query, or hash',
105
+ 2,
106
+ );
107
+ }
108
+
109
+ const preflightOnly = flags.has('--preflight-only');
110
+ if (!preflightOnly && !isLocalTarget(baseUrl.hostname) && !parseBoolean(env.PRISMER_ALLOW_REMOTE_WRITE)) {
111
+ throw new LibraryImportError(
112
+ 'local_validation',
113
+ 'REMOTE_WRITE_NOT_CONFIRMED',
114
+ 'remote mutation is blocked; set PRISMER_ALLOW_REMOTE_WRITE=1 after confirming the target environment',
115
+ 2,
116
+ );
117
+ }
118
+
119
+ const excludes = String(env.PRISMER_SKILL_LIBRARY_EXCLUDE || '')
120
+ .split(/[\n,]/)
121
+ .map((entry) => entry.trim().replace(/^\.\//, '').replace(/\/$/, ''))
122
+ .filter(Boolean);
123
+
124
+ return {
125
+ credential: env.PRISMER_API_KEY?.trim() || '',
126
+ sourceRoot,
127
+ excludes,
128
+ cloudBin: env.PRISMER_CLOUD_BIN?.trim() || 'cloud',
129
+ baseUrl: baseUrl.toString().replace(/\/$/, ''),
130
+ ledgerPath: resolve(env.PRISMER_IMPORT_LEDGER?.trim() || defaultLedgerPath(sourceRoot)),
131
+ preflightOnly,
132
+ json: flags.has('--json'),
133
+ };
134
+ }
135
+
136
+ function excluded(config, absolute) {
137
+ const path = normalizeRelative(config.sourceRoot, absolute);
138
+ return config.excludes.some((prefix) => path === prefix || path.startsWith(`${prefix}/`));
139
+ }
140
+
141
+ export function discoverSkillDirectories(config) {
142
+ const found = [];
143
+ const visit = (directory) => {
144
+ if (excluded(config, directory)) return;
145
+ const entries = readdirSync(directory, { withFileTypes: true });
146
+ if (entries.some((entry) => entry.isFile() && entry.name === 'SKILL.md')) {
147
+ found.push(directory);
148
+ return;
149
+ }
150
+ for (const entry of entries) {
151
+ if (!entry.isDirectory() || IGNORED_DIRECTORIES.has(entry.name) || entry.name.startsWith('.')) continue;
152
+ visit(resolve(directory, entry.name));
153
+ }
154
+ };
155
+ visit(config.sourceRoot);
156
+ return found.sort((left, right) => left.localeCompare(right));
157
+ }
158
+
159
+ function sourceRevision(config, directories) {
160
+ const hash = createHash('sha256');
161
+ for (const directory of directories) {
162
+ const files = [];
163
+ const visit = (current) => {
164
+ for (const entry of readdirSync(current, { withFileTypes: true })) {
165
+ if (entry.name.startsWith('.')) continue;
166
+ const absolute = resolve(current, entry.name);
167
+ if (entry.isSymbolicLink()) throw new LibraryImportError('local_validation', 'SYMLINK_RESOURCE', 'Bundle resources must not be symlinks', 2);
168
+ if (entry.isDirectory()) visit(absolute);
169
+ else files.push(absolute);
170
+ }
171
+ };
172
+ visit(directory);
173
+ for (const file of files.sort((left, right) => left.localeCompare(right))) {
174
+ hash.update(normalizeRelative(config.sourceRoot, file));
175
+ hash.update('\0');
176
+ hash.update(readFileSync(file));
177
+ hash.update('\0');
178
+ }
179
+ }
180
+ return hash.digest('hex');
181
+ }
182
+
183
+ function bundleManifest(directory) {
184
+ const files = [];
185
+ const visit = (current) => {
186
+ for (const entry of readdirSync(current, { withFileTypes: true })) {
187
+ if (entry.name.startsWith('.')) continue;
188
+ const absolute = resolve(current, entry.name);
189
+ if (entry.isSymbolicLink()) throw new LibraryImportError('local_validation', 'SYMLINK_RESOURCE', 'Bundle resources must not be symlinks', 2);
190
+ if (entry.isDirectory()) visit(absolute);
191
+ else if (!BUNDLE_EXCLUDED_FILES.has(entry.name)) files.push(absolute);
192
+ }
193
+ };
194
+ visit(directory);
195
+ return files
196
+ .sort((left, right) => left.localeCompare(right))
197
+ .map((absolute) => {
198
+ const bytes = readFileSync(absolute);
199
+ return {
200
+ path: normalizeRelative(directory, absolute),
201
+ size: bytes.byteLength,
202
+ sha256: sha256(bytes),
203
+ ...(normalizeRelative(directory, absolute) === 'SKILL.md' ? { content: bytes.toString('utf8') } : {}),
204
+ };
205
+ });
206
+ }
207
+
208
+ function readbackMatchesBundle(readback, directory) {
209
+ const expected = bundleManifest(directory);
210
+ const actual = Array.isArray(readback?.files) ? readback.files : [];
211
+ if (actual.length !== expected.length) return false;
212
+ const actualByPath = new Map(actual.map((file) => [file?.path, file]));
213
+ for (const file of expected) {
214
+ const remote = actualByPath.get(file.path);
215
+ if (!remote || remote.sha256 !== file.sha256 || Number(remote.size) !== file.size) return false;
216
+ if (file.path === 'SKILL.md' && readback.content !== file.content) return false;
217
+ }
218
+ return true;
219
+ }
220
+
221
+ async function readbackOwnedBundle(config, row, directory, runCloud, canonicalSlug) {
222
+ const shown = await runCloud(config, ['skill', 'show', canonicalSlug, '--content', '--json']);
223
+ if (!shown.ok) return { ok: false, error: safeCliFailure(shown) };
224
+ const readback = parseJsonOutput(shown, 'readback');
225
+ if (!readbackMatchesBundle(readback, directory)) {
226
+ return { ok: false, error: 'catalog readback does not match the selected local bundle' };
227
+ }
228
+ row.canonicalSlug = canonicalSlug;
229
+ row.stage = 'verified';
230
+ row.verifiedAt = new Date().toISOString();
231
+ return { ok: true, readback };
232
+ }
233
+
234
+ function parseJsonOutput(result, stage) {
235
+ const raw = String(result.stdout || '').trim();
236
+ try {
237
+ return JSON.parse(raw);
238
+ } catch {
239
+ const start = raw.indexOf('{');
240
+ const end = raw.lastIndexOf('}');
241
+ if (start >= 0 && end > start) {
242
+ try {
243
+ return JSON.parse(raw.slice(start, end + 1));
244
+ } catch {
245
+ // Fall through to the typed diagnostic below.
246
+ }
247
+ }
248
+ throw new LibraryImportError(stage, 'INVALID_CLI_JSON', 'cloud CLI did not return valid JSON', 5);
249
+ }
250
+ }
251
+
252
+ function defaultRunCloud(config, args) {
253
+ const result = spawnSync(config.cloudBin, args, {
254
+ encoding: 'utf8',
255
+ env: { ...process.env, PRISMER_CLOUD_BASE: config.baseUrl, PRISMER_API_KEY: config.credential },
256
+ timeout: 120_000,
257
+ shell: false,
258
+ });
259
+ if (result.error) {
260
+ throw new LibraryImportError(
261
+ 'local_validation',
262
+ 'CLOUD_CLI_UNAVAILABLE',
263
+ `could not execute the configured Cloud CLI: ${result.error.message}`,
264
+ 2,
265
+ );
266
+ }
267
+ return {
268
+ ok: result.status === 0,
269
+ status: result.status,
270
+ stdout: result.stdout || '',
271
+ stderr: result.stderr || '',
272
+ };
273
+ }
274
+
275
+ function writeLedger(path, ledger) {
276
+ mkdirSync(dirname(path), { recursive: true });
277
+ const temporary = `${path}.${process.pid}.tmp`;
278
+ writeFileSync(temporary, `${JSON.stringify(ledger, null, 2)}\n`, { mode: 0o600 });
279
+ renameSync(temporary, path);
280
+ }
281
+
282
+ function readLedger(path) {
283
+ if (!existsSync(path)) return null;
284
+ try {
285
+ const value = JSON.parse(readFileSync(path, 'utf8'));
286
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : null;
287
+ } catch {
288
+ throw new LibraryImportError(
289
+ 'local_validation',
290
+ 'INVALID_IMPORT_LEDGER',
291
+ 'the import ledger exists but is not valid JSON',
292
+ 2,
293
+ );
294
+ }
295
+ }
296
+
297
+ function safeCliFailure(result) {
298
+ const message = String(result.stderr || '').trim();
299
+ return message ? message.slice(0, 2_000) : `cloud CLI exited ${String(result.status)}`;
300
+ }
301
+
302
+ export async function runLibraryImport(config, runCloud = defaultRunCloud) {
303
+ if (!config.credential) throw new LibraryImportError('local_validation', 'IDENTITY_REQUIRED', 'PRISMER_API_KEY is required to bind the ledger to the executing credential', 2);
304
+ mkdirSync(dirname(config.ledgerPath), { recursive: true });
305
+ const lockPath = `${config.ledgerPath}.lock`;
306
+ const lock = openSync(lockPath, 'wx', 0o600);
307
+ try {
308
+ return await runLibraryImportLocked(config, runCloud);
309
+ } finally {
310
+ closeSync(lock);
311
+ unlinkSync(lockPath);
312
+ }
313
+ }
314
+
315
+ async function runLibraryImportLocked(config, runCloud) {
316
+ const targetBinding = sha256(JSON.stringify([config.baseUrl, config.credential]));
317
+ const directories = discoverSkillDirectories(config);
318
+ if (directories.length === 0) {
319
+ throw new LibraryImportError('local_validation', 'NO_SKILLS_FOUND', 'no root SKILL.md directories found', 2);
320
+ }
321
+ const revision = sourceRevision(config, directories);
322
+ const previous = readLedger(config.ledgerPath);
323
+ if (previous && (previous.targetBinding !== targetBinding || previous.sourceRoot !== config.sourceRoot || previous.sourceRevision !== revision)) {
324
+ throw new LibraryImportError(
325
+ 'local_validation',
326
+ 'IMPORT_LEDGER_CONFLICT',
327
+ 'the import ledger belongs to a different source selection or source revision',
328
+ 2,
329
+ );
330
+ }
331
+
332
+ const rowsByPath = new Map((previous?.rows || []).map((row) => [row.sourcePath, row]));
333
+ const rows = [];
334
+ for (const directory of directories) {
335
+ const sourcePath = normalizeRelative(config.sourceRoot, directory);
336
+ const prior = rowsByPath.get(sourcePath);
337
+ if (prior?.stage === 'verified') {
338
+ rows.push(prior);
339
+ continue;
340
+ }
341
+ const validated = await runCloud(config, ['skill', 'validate', directory, '--json']);
342
+ let validation = null;
343
+ try {
344
+ validation = parseJsonOutput(validated, 'validation');
345
+ } catch (error) {
346
+ if (validated.ok) throw error;
347
+ }
348
+ rows.push({
349
+ sourcePath,
350
+ requestedSlug: validation?.slug ?? prior?.requestedSlug ?? null,
351
+ stage: validated.ok && validation?.ok !== false ? 'validated' : 'validation_failed',
352
+ ...(validated.ok && validation?.ok !== false
353
+ ? {}
354
+ : { error: safeCliFailure(validated), validation: validation ?? undefined }),
355
+ });
356
+ }
357
+
358
+ const slugs = rows.map((row) => row.requestedSlug).filter(Boolean);
359
+ const duplicates = [...new Set(slugs.filter((slug, index) => slugs.indexOf(slug) !== index))];
360
+ if (duplicates.length > 0) {
361
+ throw new LibraryImportError(
362
+ 'validation',
363
+ 'DUPLICATE_SOURCE_SLUGS',
364
+ 'the selected source contains duplicate Skill slugs; choose the authoritative tree or exclude mirrors',
365
+ 2,
366
+ { slugs: duplicates },
367
+ );
368
+ }
369
+
370
+ const ledger = {
371
+ targetBinding,
372
+ schemaVersion: 1,
373
+ sourceRoot: config.sourceRoot,
374
+ sourceRevision: revision,
375
+ stage: rows.some((row) => row.stage === 'validation_failed') ? 'validation_failed' : 'validated',
376
+ rows,
377
+ updatedAt: new Date().toISOString(),
378
+ };
379
+ writeLedger(config.ledgerPath, ledger);
380
+ if (ledger.stage === 'validation_failed') {
381
+ throw new LibraryImportError(
382
+ 'validation',
383
+ 'LIBRARY_VALIDATION_FAILED',
384
+ 'one or more Skill bundles failed local validation; no catalog writes were attempted',
385
+ 2,
386
+ { failed: rows.filter((row) => row.stage === 'validation_failed').map((row) => row.sourcePath) },
387
+ );
388
+ }
389
+ if (config.preflightOnly) return ledger;
390
+
391
+ for (const row of rows) {
392
+ const directory = resolve(config.sourceRoot, row.sourcePath);
393
+ if (row.stage === 'verified') {
394
+ const current = await readbackOwnedBundle(config, row, directory, runCloud, row.canonicalSlug);
395
+ if (!current.ok) { row.stage = 'readback_failed'; row.error = current.error; }
396
+ continue;
397
+ }
398
+ const created = await runCloud(config, ['skill', 'create', directory, '--json']);
399
+ if (!created.ok) {
400
+ // A process may die after the server commits but before the ledger records
401
+ // the create response. Community slugs are server-canonical and
402
+ // deterministic; only accept the existing owner-visible row when its
403
+ // complete manifest matches the selected bundle byte-for-byte.
404
+ const recoverySlug = `community-${row.requestedSlug}`;
405
+ const recovered = await readbackOwnedBundle(config, row, directory, runCloud, recoverySlug);
406
+ if (recovered.ok) {
407
+ row.recoveredAfterCreateFailure = true;
408
+ delete row.error;
409
+ } else {
410
+ row.stage = 'create_failed';
411
+ row.error = safeCliFailure(created);
412
+ row.recoveryError = recovered.error;
413
+ }
414
+ ledger.updatedAt = new Date().toISOString();
415
+ writeLedger(config.ledgerPath, ledger);
416
+ continue;
417
+ }
418
+ const creation = parseJsonOutput(created, 'create');
419
+ row.id = creation.id ?? null;
420
+ row.canonicalSlug = creation.slug ?? null;
421
+ row.publishScope = creation.publishScope ?? null;
422
+ row.status = creation.status ?? null;
423
+ row.stage = 'created';
424
+ delete row.error;
425
+ ledger.updatedAt = new Date().toISOString();
426
+ writeLedger(config.ledgerPath, ledger);
427
+
428
+ if (!row.canonicalSlug) {
429
+ row.stage = 'readback_failed';
430
+ row.error = 'create response did not contain a canonical slug';
431
+ writeLedger(config.ledgerPath, ledger);
432
+ continue;
433
+ }
434
+ const verified = await readbackOwnedBundle(config, row, directory, runCloud, row.canonicalSlug);
435
+ if (!verified.ok) {
436
+ row.stage = 'readback_failed';
437
+ row.error = verified.error;
438
+ writeLedger(config.ledgerPath, ledger);
439
+ continue;
440
+ }
441
+ writeLedger(config.ledgerPath, ledger);
442
+ }
443
+
444
+ const failed = rows.filter((row) => row.stage !== 'verified');
445
+ ledger.stage = failed.length === 0 ? 'completed' : 'partial_failure';
446
+ ledger.completedAt = failed.length === 0 ? new Date().toISOString() : undefined;
447
+ ledger.updatedAt = new Date().toISOString();
448
+ ledger.requiredSkills = rows
449
+ .filter((row) => row.stage === 'verified')
450
+ .map((row) => ({ skillSlug: row.canonicalSlug, required: true }));
451
+ writeLedger(config.ledgerPath, ledger);
452
+ if (failed.length > 0) {
453
+ throw new LibraryImportError(
454
+ 'import',
455
+ 'LIBRARY_IMPORT_PARTIAL_FAILURE',
456
+ 'some Skill bundles were not verified; retry with the same ledger after fixing transient failures',
457
+ 5,
458
+ { failed: failed.map((row) => ({ sourcePath: row.sourcePath, stage: row.stage })) },
459
+ );
460
+ }
461
+ return ledger;
462
+ }
463
+
464
+ const HELP = `Usage:
465
+ # PRISMER_SKILL_LIBRARY_ROOT and cloud authentication are injected in env
466
+ node scripts/import-library.mjs [--preflight-only] [--json]
467
+
468
+ Optional env: PRISMER_SKILL_LIBRARY_EXCLUDE, PRISMER_IMPORT_LEDGER,
469
+ PRISMER_CLOUD_BIN, PRISMER_CLOUD_BASE, PRISMER_ALLOW_REMOTE_WRITE=1.`;
470
+
471
+ async function main() {
472
+ let config;
473
+ try {
474
+ config = loadLibraryImportConfig(process.argv.slice(2));
475
+ if (config.help) {
476
+ process.stdout.write(`${HELP}\n`);
477
+ return;
478
+ }
479
+ const result = await runLibraryImport(config);
480
+ if (config.json) process.stdout.write(`${JSON.stringify(result)}\n`);
481
+ else {
482
+ process.stdout.write(
483
+ `[skill-creator] ${result.stage}: verified=${result.rows.filter((row) => row.stage === 'verified').length}/${result.rows.length} ledger=${config.ledgerPath}\n`,
484
+ );
485
+ }
486
+ } catch (error) {
487
+ const failure =
488
+ error instanceof LibraryImportError
489
+ ? error
490
+ : new LibraryImportError('internal', 'UNEXPECTED_ERROR', error?.message || String(error), 1);
491
+ process.stderr.write(
492
+ `${JSON.stringify({ ok: false, stage: failure.stage, error: { code: failure.code, message: failure.message, details: failure.details }, ...(config?.ledgerPath ? { ledger: config.ledgerPath } : {}) })}\n`,
493
+ );
494
+ process.exitCode = failure.exitCode;
495
+ }
496
+ }
497
+
498
+ if (import.meta.url === `file://${process.argv[1]}`) await main();
@@ -12,9 +12,13 @@ import os
12
12
  import re
13
13
  import subprocess
14
14
  import sys
15
+ import tempfile
15
16
  from pathlib import Path
16
17
 
17
- from scripts.utils import parse_skill_md
18
+ if __package__:
19
+ from .utils import parse_skill_md
20
+ else:
21
+ from utils import parse_skill_md
18
22
 
19
23
 
20
24
  def _call_claude(prompt: str, model: str | None, timeout: int = 300) -> str:
@@ -23,26 +27,20 @@ def _call_claude(prompt: str, model: str | None, timeout: int = 300) -> str:
23
27
  Prompt goes over stdin (not argv) because it embeds the full SKILL.md
24
28
  body and can easily exceed comfortable argv length.
25
29
  """
26
- cmd = ["claude", "-p", "--output-format", "text"]
30
+ if os.environ.get('PRISMER_ALLOW_PAID_EVAL') != '1':
31
+ raise PermissionError('Set PRISMER_ALLOW_PAID_EVAL=1 after approving evaluation cost')
32
+ cmd = ['claude', '-p', '--output-format', 'text', '--bare', '--tools', '',
33
+ '--strict-mcp-config', '--mcp-config', '{"mcpServers":{}}',
34
+ '--setting-sources', '', '--no-session-persistence', '--max-budget-usd', '0.25']
27
35
  if model:
28
36
  cmd.extend(["--model", model])
29
37
 
30
- # Remove CLAUDECODE env var to allow nesting claude -p inside a
31
- # Claude Code session. The guard is for interactive terminal conflicts;
32
- # programmatic subprocess usage is safe. Same pattern as run_eval.py.
33
- env = {k: v for k, v in os.environ.items() if k != "CLAUDECODE"}
34
-
35
- result = subprocess.run(
36
- cmd,
37
- input=prompt,
38
- capture_output=True,
39
- text=True,
40
- env=env,
41
- timeout=timeout,
42
- )
38
+ with tempfile.TemporaryDirectory(prefix='skill-description-') as directory:
39
+ result = subprocess.run(cmd, input=prompt, capture_output=True, text=True,
40
+ env=dict(os.environ), cwd=directory, timeout=timeout)
43
41
  if result.returncode != 0:
44
42
  raise RuntimeError(
45
- f"claude -p exited {result.returncode}\nstderr: {result.stderr}"
43
+ f"claude -p exited {result.returncode}; evaluation incomplete"
46
44
  )
47
45
  return result.stdout
48
46
 
@@ -3,23 +3,26 @@
3
3
  Skill Packager - Creates a distributable .skill file of a skill folder
4
4
 
5
5
  Usage:
6
- python utils/package_skill.py <path/to/skill-folder> [output-directory]
6
+ python scripts/package_skill.py <path/to/skill-folder> [output-directory]
7
7
 
8
8
  Example:
9
- python utils/package_skill.py skills/public/my-skill
10
- python utils/package_skill.py skills/public/my-skill ./dist
9
+ python scripts/package_skill.py skills/public/my-skill
10
+ python scripts/package_skill.py skills/public/my-skill ./dist
11
11
  """
12
12
 
13
13
  import fnmatch
14
14
  import sys
15
15
  import zipfile
16
16
  from pathlib import Path
17
- from scripts.quick_validate import validate_skill
17
+ if __package__:
18
+ from .quick_validate import validate_skill
19
+ else:
20
+ from quick_validate import validate_skill
18
21
 
19
22
  # Patterns to exclude when packaging skills.
20
- EXCLUDE_DIRS = {"__pycache__", "node_modules"}
23
+ EXCLUDE_DIRS = {"__pycache__", "node_modules", ".git", ".prismer"}
21
24
  EXCLUDE_GLOBS = {"*.pyc"}
22
- EXCLUDE_FILES = {".DS_Store"}
25
+ EXCLUDE_FILES = {".DS_Store", ".env"}
23
26
  # Directories excluded only at the skill root (not when nested deeper).
24
27
  ROOT_EXCLUDE_DIRS = {"evals"}
25
28
 
@@ -91,6 +94,10 @@ def package_skill(skill_path, output_dir=None):
91
94
  with zipfile.ZipFile(skill_filename, 'w', zipfile.ZIP_DEFLATED) as zipf:
92
95
  # Walk through the skill directory, excluding build artifacts
93
96
  for file_path in skill_path.rglob('*'):
97
+ if file_path.is_symlink():
98
+ raise ValueError(f'Symlink is not a portable bundle resource: {file_path}')
99
+ if file_path.resolve() == skill_filename.resolve():
100
+ continue
94
101
  if not file_path.is_file():
95
102
  continue
96
103
  arcname = file_path.relative_to(skill_path.parent)
@@ -110,10 +117,10 @@ def package_skill(skill_path, output_dir=None):
110
117
 
111
118
  def main():
112
119
  if len(sys.argv) < 2:
113
- print("Usage: python utils/package_skill.py <path/to/skill-folder> [output-directory]")
120
+ print("Usage: python scripts/package_skill.py <path/to/skill-folder> [output-directory]")
114
121
  print("\nExample:")
115
- print(" python utils/package_skill.py skills/public/my-skill")
116
- print(" python utils/package_skill.py skills/public/my-skill ./dist")
122
+ print(" python scripts/package_skill.py skills/public/my-skill")
123
+ print(" python scripts/package_skill.py skills/public/my-skill ./dist")
117
124
  sys.exit(1)
118
125
 
119
126
  skill_path = sys.argv[1]
@@ -19,12 +19,12 @@ def validate_skill(skill_path):
19
19
  return False, "SKILL.md not found"
20
20
 
21
21
  # Read and validate frontmatter
22
- content = skill_md.read_text()
22
+ content = skill_md.read_text(encoding='utf-8')
23
23
  if not content.startswith('---'):
24
24
  return False, "No YAML frontmatter found"
25
25
 
26
26
  # Extract frontmatter
27
- match = re.match(r'^---\n(.*?)\n---', content, re.DOTALL)
27
+ match = re.match(r'^---\n(.*?)\n---(?:\n|$)', content, re.DOTALL)
28
28
  if not match:
29
29
  return False, "Invalid frontmatter format"
30
30
 
@@ -39,7 +39,11 @@ def validate_skill(skill_path):
39
39
  return False, f"Invalid YAML in frontmatter: {e}"
40
40
 
41
41
  # Define allowed properties
42
- ALLOWED_PROPERTIES = {'name', 'description', 'license', 'allowed-tools', 'metadata', 'compatibility'}
42
+ ALLOWED_PROPERTIES = {'name', 'description', 'license', 'allowed-tools', 'metadata',
43
+ 'compatibility', 'scope', 'category', 'config', 'version',
44
+ 'author', 'platforms', 'prerequisites', 'source', 'applies_to',
45
+ 'tags', 'triggers', 'phaseModel', 'requires', 'aliases',
46
+ 'role_scope', 'required_credential_files'}
43
47
 
44
48
  # Check for unexpected properties (excluding nested keys under metadata)
45
49
  unexpected_keys = set(frontmatter.keys()) - ALLOWED_PROPERTIES
@@ -60,6 +64,8 @@ def validate_skill(skill_path):
60
64
  if not isinstance(name, str):
61
65
  return False, f"Name must be a string, got {type(name).__name__}"
62
66
  name = name.strip()
67
+ if not name:
68
+ return False, "Name must not be empty"
63
69
  if name:
64
70
  # Check naming convention (kebab-case: lowercase with hyphens)
65
71
  if not re.match(r'^[a-z0-9-]+$', name):
@@ -75,6 +81,8 @@ def validate_skill(skill_path):
75
81
  if not isinstance(description, str):
76
82
  return False, f"Description must be a string, got {type(description).__name__}"
77
83
  description = description.strip()
84
+ if not description:
85
+ return False, "Description must not be empty"
78
86
  if description:
79
87
  # Check for angle brackets
80
88
  if '<' in description or '>' in description:
@@ -86,11 +94,20 @@ def validate_skill(skill_path):
86
94
  # Validate compatibility field if present (optional)
87
95
  compatibility = frontmatter.get('compatibility', '')
88
96
  if compatibility:
97
+ if isinstance(compatibility, list):
98
+ if not all(isinstance(item, str) and item.strip() for item in compatibility):
99
+ return False, "Compatibility list must contain non-empty strings"
100
+ compatibility = ', '.join(compatibility)
89
101
  if not isinstance(compatibility, str):
90
- return False, f"Compatibility must be a string, got {type(compatibility).__name__}"
102
+ return False, "Compatibility must be a string or list of strings"
91
103
  if len(compatibility) > 500:
92
104
  return False, f"Compatibility is too long ({len(compatibility)} characters). Maximum is 500 characters."
93
105
 
106
+ for key in ('metadata', 'config'):
107
+ if key in frontmatter and not isinstance(frontmatter[key], dict):
108
+ return False, f"{key} must be a mapping"
109
+ if not content[match.end():].strip():
110
+ return False, "Skill body must not be empty"
94
111
  return True, "Skill is valid!"
95
112
 
96
113
  if __name__ == "__main__":
@@ -100,4 +117,4 @@ if __name__ == "__main__":
100
117
 
101
118
  valid, message = validate_skill(sys.argv[1])
102
119
  print(message)
103
- sys.exit(0 if valid else 1)
120
+ sys.exit(0 if valid else 1)