@prismer/runtime 2.2.55 → 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 (563) hide show
  1. package/CHANGELOG.md +574 -0
  2. package/apc/skills/releasing-test/SKILL.md +9 -0
  3. package/built-in-skills/agent-coordination/SKILL.md +21 -4
  4. package/built-in-skills/agent-meta/SKILL.md +11 -0
  5. package/built-in-skills/assets/SKILL.md +1 -1
  6. package/built-in-skills/canvas-design/SKILL.md +3 -3
  7. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-OFL.txt +93 -0
  8. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSerif-OFL.txt +93 -0
  9. package/built-in-skills/canvas-design/canvas-fonts/LICENSE-SOURCES.md +16 -0
  10. package/built-in-skills/claim-agent-ownership/SKILL.md +7 -3
  11. package/built-in-skills/claude-api/SKILL.md +1 -1
  12. package/built-in-skills/claude-api/python/claude-api/README.md +2 -2
  13. package/built-in-skills/claude-api/python/claude-api/tool-use.md +9 -5
  14. package/built-in-skills/claude-api/python/managed-agents/README.md +11 -1
  15. package/built-in-skills/claude-api/shared/error-codes.md +4 -4
  16. package/built-in-skills/claude-api/shared/managed-agents-client-patterns.md +4 -2
  17. package/built-in-skills/claude-api/shared/managed-agents-core.md +1 -2
  18. package/built-in-skills/claude-api/shared/managed-agents-events.md +41 -22
  19. package/built-in-skills/claude-api/shared/managed-agents-multiagent.md +5 -3
  20. package/built-in-skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +1 -1
  21. package/built-in-skills/claude-api/shared/managed-agents-tools.md +2 -3
  22. package/built-in-skills/claude-api/shared/model-migration.md +3 -3
  23. package/built-in-skills/claude-api/shared/models.md +1 -1
  24. package/built-in-skills/claude-api/typescript/claude-api/batches.md +1 -1
  25. package/built-in-skills/claude-api/typescript/claude-api/files-api.md +3 -1
  26. package/built-in-skills/claude-api/typescript/claude-api/tool-use.md +8 -2
  27. package/built-in-skills/claude-api/typescript/managed-agents/README.md +8 -2
  28. package/built-in-skills/codebase-design/SKILL.md +15 -1
  29. package/built-in-skills/codebase-design/references/requesting-code-review/GUIDE.md +291 -0
  30. package/built-in-skills/codebase-design/references/requesting-code-review/LICENSE +21 -0
  31. package/built-in-skills/codebase-design/references/requesting-code-review/LICENSE.superpowers +21 -0
  32. package/built-in-skills/codebase-design/references/requesting-code-review/NOTICE.md +37 -0
  33. package/built-in-skills/codebase-design/references/sdlc-review/GUIDE.md +130 -0
  34. package/built-in-skills/codebase-design/references/sdlc-review/LICENSE +21 -0
  35. package/built-in-skills/codebase-design/references/sdlc-review/NOTICE.md +17 -0
  36. package/built-in-skills/codebase-design/references/simplify-code/GUIDE.md +269 -0
  37. package/built-in-skills/codebase-design/references/simplify-code/LICENSE +21 -0
  38. package/built-in-skills/codebase-design/references/simplify-code/NOTICE.md +37 -0
  39. package/built-in-skills/competitor-intelligence/LICENSE +21 -0
  40. package/built-in-skills/competitor-intelligence/NOTICE.md +6 -0
  41. package/built-in-skills/competitor-intelligence/SKILL.md +125 -0
  42. package/built-in-skills/competitor-intelligence/scripts/watch_state.py +160 -0
  43. package/built-in-skills/conversation-compaction/SKILL.md +3 -0
  44. package/built-in-skills/council-creator/SKILL.md +4 -3
  45. package/built-in-skills/diagnosing-bugs/SKILL.md +12 -0
  46. package/built-in-skills/diagnosing-bugs/references/desktop-dom/GUIDE.md +64 -0
  47. package/built-in-skills/diagnosing-bugs/references/desktop-dom/LICENSE +21 -0
  48. package/built-in-skills/diagnosing-bugs/references/desktop-dom/NOTICE.md +17 -0
  49. package/built-in-skills/diagnosing-bugs/references/systematic-debugging/GUIDE.md +410 -0
  50. package/built-in-skills/diagnosing-bugs/references/systematic-debugging/LICENSE +21 -0
  51. package/built-in-skills/diagnosing-bugs/references/systematic-debugging/LICENSE.superpowers +21 -0
  52. package/built-in-skills/diagnosing-bugs/references/systematic-debugging/NOTICE.md +37 -0
  53. package/built-in-skills/doc-coauthoring/SKILL.md +6 -0
  54. package/built-in-skills/doc-coauthoring/references/humanizer/GUIDE.md +647 -0
  55. package/built-in-skills/doc-coauthoring/references/humanizer/LICENSE +21 -0
  56. package/built-in-skills/doc-coauthoring/references/humanizer/LICENSE.hermes +21 -0
  57. package/built-in-skills/doc-coauthoring/references/humanizer/PROVENANCE.md +7 -0
  58. package/built-in-skills/document-actions/LICENSE +21 -0
  59. package/built-in-skills/document-actions/NOTICE.md +21 -0
  60. package/built-in-skills/document-actions/SKILL.md +46 -0
  61. package/built-in-skills/evidence-citations/LICENSE +21 -0
  62. package/built-in-skills/evidence-citations/NOTICE.md +21 -0
  63. package/built-in-skills/evidence-citations/SKILL.md +46 -0
  64. package/built-in-skills/evidence-citations/references/citation-formats.md +68 -0
  65. package/built-in-skills/evidence-citations/references/grounding-rationale.md +64 -0
  66. package/built-in-skills/evidence-citations/scripts/sources.py +720 -0
  67. package/built-in-skills/frontend-design/SKILL.md +6 -0
  68. package/built-in-skills/frontend-design/references/claude-design/GUIDE.md +650 -0
  69. package/built-in-skills/frontend-design/references/claude-design/LICENSE +21 -0
  70. package/built-in-skills/frontend-design/references/claude-design/LICENSE.hermes +21 -0
  71. package/built-in-skills/frontend-design/references/claude-design/PROVENANCE.md +7 -0
  72. package/built-in-skills/image-generate/SKILL.md +5 -0
  73. package/built-in-skills/image-generate/scripts/generate-and-deliver.mjs +24 -3
  74. package/built-in-skills/mcp-builder/reference/evaluation.md +11 -2
  75. package/built-in-skills/mcp-builder/reference/node_mcp_server.md +34 -5
  76. package/built-in-skills/mcp-builder/reference/python_mcp_server.md +6 -2
  77. package/built-in-skills/mcp-builder/scripts/connections.py +1 -1
  78. package/built-in-skills/mcp-builder/scripts/evaluation.py +52 -34
  79. package/built-in-skills/mcp-builder/scripts/requirements.txt +2 -2
  80. package/built-in-skills/meeting-actions/LICENSE +21 -0
  81. package/built-in-skills/meeting-actions/NOTICE.md +21 -0
  82. package/built-in-skills/meeting-actions/SKILL.md +48 -0
  83. package/built-in-skills/memory/SKILL.md +27 -3
  84. package/built-in-skills/memory/references/llm-wiki/GUIDE.md +468 -0
  85. package/built-in-skills/memory/references/llm-wiki/LICENSE +21 -0
  86. package/built-in-skills/memory/references/llm-wiki/NOTICE.md +4 -0
  87. package/built-in-skills/memory/references/llm-wiki/scripts/lint_wiki.py +84 -0
  88. package/built-in-skills/memory/references/llm-wiki/scripts/requirements.txt +1 -0
  89. package/built-in-skills/memory/references/llm-wiki/templates/SCHEMA.md +19 -0
  90. package/built-in-skills/memory/references/llm-wiki/templates/index.md +9 -0
  91. package/built-in-skills/memory/references/llm-wiki/templates/log.md +4 -0
  92. package/built-in-skills/memory-dream/SKILL.md +8 -15
  93. package/built-in-skills/memory-import/SKILL.md +51 -0
  94. package/built-in-skills/office-artifacts/NOTICE.md +15 -0
  95. package/built-in-skills/office-artifacts/SKILL.md +20 -0
  96. package/built-in-skills/office-artifacts/references/RESOURCE-LIMITS.md +44 -0
  97. package/built-in-skills/office-artifacts/references/docx/GUIDE.md +196 -0
  98. package/built-in-skills/office-artifacts/references/docx/LICENSE +21 -0
  99. package/built-in-skills/office-artifacts/references/docx/NOTICE.md +21 -0
  100. package/built-in-skills/office-artifacts/references/docx/references/revisions-and-comments.md +88 -0
  101. package/built-in-skills/office-artifacts/references/docx/scripts/docx_comments.py +292 -0
  102. package/built-in-skills/office-artifacts/references/docx/scripts/docx_common.py +93 -0
  103. package/built-in-skills/office-artifacts/references/docx/scripts/docx_create.py +177 -0
  104. package/built-in-skills/office-artifacts/references/docx/scripts/docx_edit.py +250 -0
  105. package/built-in-skills/office-artifacts/references/docx/scripts/docx_read.py +169 -0
  106. package/built-in-skills/office-artifacts/references/docx/scripts/docx_revisions.py +149 -0
  107. package/built-in-skills/office-artifacts/references/docx/scripts/docx_template.py +70 -0
  108. package/built-in-skills/office-artifacts/references/docx/scripts/docx_validate.py +155 -0
  109. package/built-in-skills/office-artifacts/references/docx/tests/test_docx_skill.py +525 -0
  110. package/built-in-skills/office-artifacts/references/pdf/GUIDE.md +125 -0
  111. package/built-in-skills/office-artifacts/references/pdf/LICENSE +21 -0
  112. package/built-in-skills/office-artifacts/references/pdf/NOTICE.md +21 -0
  113. package/built-in-skills/office-artifacts/references/pdf/references/forms.md +99 -0
  114. package/built-in-skills/office-artifacts/references/pdf/references/nano-pdf-editing.md +40 -0
  115. package/built-in-skills/office-artifacts/references/pdf/references/ocr-extraction.md +165 -0
  116. package/built-in-skills/office-artifacts/references/pdf/scripts/_raster.py +87 -0
  117. package/built-in-skills/office-artifacts/references/pdf/scripts/extract_marker.py +95 -0
  118. package/built-in-skills/office-artifacts/references/pdf/scripts/extract_pymupdf.py +107 -0
  119. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_create.py +153 -0
  120. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_fill_form.py +97 -0
  121. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_form_layout.py +168 -0
  122. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_make_form.py +145 -0
  123. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_merge.py +50 -0
  124. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_meta.py +123 -0
  125. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_page_image.py +101 -0
  126. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_read.py +153 -0
  127. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_secure.py +71 -0
  128. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_split.py +86 -0
  129. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_stamp.py +145 -0
  130. package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_watermark.py +51 -0
  131. package/built-in-skills/office-artifacts/references/pdf/tests/test_pdf_skill.py +414 -0
  132. package/built-in-skills/office-artifacts/references/powerpoint/GUIDE.md +220 -0
  133. package/built-in-skills/office-artifacts/references/powerpoint/LICENSE +21 -0
  134. package/built-in-skills/office-artifacts/references/powerpoint/NOTICE.md +21 -0
  135. package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_create.py +214 -0
  136. package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_edit.py +442 -0
  137. package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_from_template.py +88 -0
  138. package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_read.py +131 -0
  139. package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_render.py +104 -0
  140. package/built-in-skills/office-artifacts/references/powerpoint/tests/test_powerpoint_skill.py +478 -0
  141. package/built-in-skills/office-artifacts/references/xlsx/GUIDE.md +196 -0
  142. package/built-in-skills/office-artifacts/references/xlsx/LICENSE +21 -0
  143. package/built-in-skills/office-artifacts/references/xlsx/NOTICE.md +21 -0
  144. package/built-in-skills/office-artifacts/references/xlsx/references/restructuring.md +74 -0
  145. package/built-in-skills/office-artifacts/references/xlsx/scripts/csv_to_xlsx.py +108 -0
  146. package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_create.py +259 -0
  147. package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_edit.py +269 -0
  148. package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_read.py +160 -0
  149. package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_recalc.py +111 -0
  150. package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_restructure.py +418 -0
  151. package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_to_csv.py +69 -0
  152. package/built-in-skills/office-artifacts/references/xlsx/tests/test_xlsx_skill.py +542 -0
  153. package/built-in-skills/office-artifacts/tests/test_resource_regressions.py +272 -0
  154. package/built-in-skills/persona-generator/SKILL.md +9 -9
  155. package/built-in-skills/pkf-svg/SKILL.md +5 -0
  156. package/built-in-skills/pkf-svg/references/architecture-diagram/GUIDE.md +148 -0
  157. package/built-in-skills/pkf-svg/references/architecture-diagram/LICENSE +21 -0
  158. package/built-in-skills/pkf-svg/references/architecture-diagram/LICENSE.hermes +21 -0
  159. package/built-in-skills/pkf-svg/references/architecture-diagram/PROVENANCE.md +7 -0
  160. package/built-in-skills/pkf-svg/references/architecture-diagram/templates/template.html +345 -0
  161. package/built-in-skills/pkf-writing/SKILL.md +36 -14
  162. package/built-in-skills/prismer-airtable/LICENSE +21 -0
  163. package/built-in-skills/prismer-airtable/NOTICE.md +11 -0
  164. package/built-in-skills/prismer-airtable/SKILL.md +248 -0
  165. package/built-in-skills/prismer-airtable/scripts/airtable_client.py +76 -0
  166. package/built-in-skills/prismer-apple-notes/LICENSE +21 -0
  167. package/built-in-skills/prismer-apple-notes/NOTICE.md +17 -0
  168. package/built-in-skills/prismer-apple-notes/SKILL.md +118 -0
  169. package/built-in-skills/prismer-apple-notes/scripts/readiness.py +47 -0
  170. package/built-in-skills/prismer-apple-reminders/LICENSE +21 -0
  171. package/built-in-skills/prismer-apple-reminders/NOTICE.md +17 -0
  172. package/built-in-skills/prismer-apple-reminders/SKILL.md +155 -0
  173. package/built-in-skills/prismer-apple-reminders/scripts/readiness.py +47 -0
  174. package/built-in-skills/prismer-ascii-video/LICENSE +21 -0
  175. package/built-in-skills/prismer-ascii-video/LICENSE.hermes +21 -0
  176. package/built-in-skills/prismer-ascii-video/PROVENANCE.md +7 -0
  177. package/built-in-skills/prismer-ascii-video/README.md +290 -0
  178. package/built-in-skills/prismer-ascii-video/SKILL.md +252 -0
  179. package/built-in-skills/prismer-ascii-video/provenance/category-DESCRIPTION.md +3 -0
  180. package/built-in-skills/prismer-ascii-video/references/architecture.md +807 -0
  181. package/built-in-skills/prismer-ascii-video/references/composition.md +900 -0
  182. package/built-in-skills/prismer-ascii-video/references/effects.md +1877 -0
  183. package/built-in-skills/prismer-ascii-video/references/inputs.md +693 -0
  184. package/built-in-skills/prismer-ascii-video/references/optimization.md +688 -0
  185. package/built-in-skills/prismer-ascii-video/references/scenes.md +1018 -0
  186. package/built-in-skills/prismer-ascii-video/references/shaders.md +1408 -0
  187. package/built-in-skills/prismer-ascii-video/references/troubleshooting.md +360 -0
  188. package/built-in-skills/prismer-baoyu-infographic/LICENSE +21 -0
  189. package/built-in-skills/prismer-baoyu-infographic/LICENSE.hermes +21 -0
  190. package/built-in-skills/prismer-baoyu-infographic/LICENSE.origin +21 -0
  191. package/built-in-skills/prismer-baoyu-infographic/PORT_NOTES.md +37 -0
  192. package/built-in-skills/prismer-baoyu-infographic/PROVENANCE.md +7 -0
  193. package/built-in-skills/prismer-baoyu-infographic/SKILL.md +240 -0
  194. package/built-in-skills/prismer-baoyu-infographic/references/analysis-framework.md +182 -0
  195. package/built-in-skills/prismer-baoyu-infographic/references/base-prompt.md +43 -0
  196. package/built-in-skills/prismer-baoyu-infographic/references/layouts/bento-grid.md +41 -0
  197. package/built-in-skills/prismer-baoyu-infographic/references/layouts/binary-comparison.md +48 -0
  198. package/built-in-skills/prismer-baoyu-infographic/references/layouts/bridge.md +41 -0
  199. package/built-in-skills/prismer-baoyu-infographic/references/layouts/circular-flow.md +41 -0
  200. package/built-in-skills/prismer-baoyu-infographic/references/layouts/comic-strip.md +41 -0
  201. package/built-in-skills/prismer-baoyu-infographic/references/layouts/comparison-matrix.md +41 -0
  202. package/built-in-skills/prismer-baoyu-infographic/references/layouts/dashboard.md +41 -0
  203. package/built-in-skills/prismer-baoyu-infographic/references/layouts/dense-modules.md +72 -0
  204. package/built-in-skills/prismer-baoyu-infographic/references/layouts/funnel.md +41 -0
  205. package/built-in-skills/prismer-baoyu-infographic/references/layouts/hierarchical-layers.md +48 -0
  206. package/built-in-skills/prismer-baoyu-infographic/references/layouts/hub-spoke.md +41 -0
  207. package/built-in-skills/prismer-baoyu-infographic/references/layouts/iceberg.md +41 -0
  208. package/built-in-skills/prismer-baoyu-infographic/references/layouts/isometric-map.md +41 -0
  209. package/built-in-skills/prismer-baoyu-infographic/references/layouts/jigsaw.md +41 -0
  210. package/built-in-skills/prismer-baoyu-infographic/references/layouts/linear-progression.md +48 -0
  211. package/built-in-skills/prismer-baoyu-infographic/references/layouts/periodic-table.md +41 -0
  212. package/built-in-skills/prismer-baoyu-infographic/references/layouts/story-mountain.md +41 -0
  213. package/built-in-skills/prismer-baoyu-infographic/references/layouts/structural-breakdown.md +48 -0
  214. package/built-in-skills/prismer-baoyu-infographic/references/layouts/tree-branching.md +41 -0
  215. package/built-in-skills/prismer-baoyu-infographic/references/layouts/venn-diagram.md +41 -0
  216. package/built-in-skills/prismer-baoyu-infographic/references/layouts/winding-roadmap.md +41 -0
  217. package/built-in-skills/prismer-baoyu-infographic/references/structured-content-template.md +244 -0
  218. package/built-in-skills/prismer-baoyu-infographic/references/styles/aged-academia.md +36 -0
  219. package/built-in-skills/prismer-baoyu-infographic/references/styles/bold-graphic.md +36 -0
  220. package/built-in-skills/prismer-baoyu-infographic/references/styles/chalkboard.md +61 -0
  221. package/built-in-skills/prismer-baoyu-infographic/references/styles/claymation.md +29 -0
  222. package/built-in-skills/prismer-baoyu-infographic/references/styles/corporate-memphis.md +29 -0
  223. package/built-in-skills/prismer-baoyu-infographic/references/styles/craft-handmade.md +44 -0
  224. package/built-in-skills/prismer-baoyu-infographic/references/styles/cyberpunk-neon.md +29 -0
  225. package/built-in-skills/prismer-baoyu-infographic/references/styles/hand-drawn-edu.md +63 -0
  226. package/built-in-skills/prismer-baoyu-infographic/references/styles/ikea-manual.md +29 -0
  227. package/built-in-skills/prismer-baoyu-infographic/references/styles/kawaii.md +29 -0
  228. package/built-in-skills/prismer-baoyu-infographic/references/styles/knolling.md +29 -0
  229. package/built-in-skills/prismer-baoyu-infographic/references/styles/lego-brick.md +29 -0
  230. package/built-in-skills/prismer-baoyu-infographic/references/styles/morandi-journal.md +60 -0
  231. package/built-in-skills/prismer-baoyu-infographic/references/styles/origami.md +29 -0
  232. package/built-in-skills/prismer-baoyu-infographic/references/styles/pixel-art.md +29 -0
  233. package/built-in-skills/prismer-baoyu-infographic/references/styles/pop-laboratory.md +48 -0
  234. package/built-in-skills/prismer-baoyu-infographic/references/styles/retro-pop-grid.md +47 -0
  235. package/built-in-skills/prismer-baoyu-infographic/references/styles/storybook-watercolor.md +29 -0
  236. package/built-in-skills/prismer-baoyu-infographic/references/styles/subway-map.md +29 -0
  237. package/built-in-skills/prismer-baoyu-infographic/references/styles/technical-schematic.md +36 -0
  238. package/built-in-skills/prismer-baoyu-infographic/references/styles/ui-wireframe.md +29 -0
  239. package/built-in-skills/prismer-blocked-page-recovery/LICENSE +21 -0
  240. package/built-in-skills/prismer-blocked-page-recovery/NOTICE.md +17 -0
  241. package/built-in-skills/prismer-blocked-page-recovery/SKILL.md +158 -0
  242. package/built-in-skills/prismer-blocked-page-recovery/scripts/recover_page.py +311 -0
  243. package/built-in-skills/prismer-box/LICENSE +21 -0
  244. package/built-in-skills/prismer-box/NOTICE.md +11 -0
  245. package/built-in-skills/prismer-box/SKILL.md +147 -0
  246. package/built-in-skills/prismer-box/references/bulk-operations.md +43 -0
  247. package/built-in-skills/prismer-box/references/cli-guide.md +133 -0
  248. package/built-in-skills/prismer-box/references/content-workflows.md +86 -0
  249. package/built-in-skills/prismer-box/references/hubs.md +77 -0
  250. package/built-in-skills/prismer-box/references/oauth-setup.md +92 -0
  251. package/built-in-skills/prismer-box/references/rest-api.md +37 -0
  252. package/built-in-skills/prismer-box/references/sdk-development.md +85 -0
  253. package/built-in-skills/prismer-box/references/search-and-ai.md +147 -0
  254. package/built-in-skills/prismer-box/references/troubleshooting.md +33 -0
  255. package/built-in-skills/prismer-box/references/webhooks-and-events.md +43 -0
  256. package/built-in-skills/prismer-codebase-inspection/LICENSE +21 -0
  257. package/built-in-skills/prismer-codebase-inspection/NOTICE.md +17 -0
  258. package/built-in-skills/prismer-codebase-inspection/SKILL.md +141 -0
  259. package/built-in-skills/prismer-computer-use/LICENSE +21 -0
  260. package/built-in-skills/prismer-computer-use/NOTICE.md +17 -0
  261. package/built-in-skills/prismer-computer-use/SKILL.md +372 -0
  262. package/built-in-skills/prismer-design-md/LICENSE +21 -0
  263. package/built-in-skills/prismer-design-md/LICENSE.hermes +21 -0
  264. package/built-in-skills/prismer-design-md/PROVENANCE.md +7 -0
  265. package/built-in-skills/prismer-design-md/SKILL.md +227 -0
  266. package/built-in-skills/prismer-design-md/templates/starter.md +99 -0
  267. package/built-in-skills/prismer-email-inbox-triage/LICENSE +21 -0
  268. package/built-in-skills/prismer-email-inbox-triage/NOTICE.md +11 -0
  269. package/built-in-skills/prismer-email-inbox-triage/SKILL.md +116 -0
  270. package/built-in-skills/prismer-findmy/LICENSE +21 -0
  271. package/built-in-skills/prismer-findmy/NOTICE.md +17 -0
  272. package/built-in-skills/prismer-findmy/SKILL.md +150 -0
  273. package/built-in-skills/prismer-findmy/scripts/readiness.py +47 -0
  274. package/built-in-skills/prismer-gif-search/LICENSE +21 -0
  275. package/built-in-skills/prismer-gif-search/LICENSE.hermes +21 -0
  276. package/built-in-skills/prismer-gif-search/PROVENANCE.md +7 -0
  277. package/built-in-skills/prismer-gif-search/SKILL.md +97 -0
  278. package/built-in-skills/prismer-gif-search/scripts/tenor.py +81 -0
  279. package/built-in-skills/prismer-github/LICENSE +21 -0
  280. package/built-in-skills/prismer-github/NOTICE.md +17 -0
  281. package/built-in-skills/prismer-github/SKILL.md +74 -0
  282. package/built-in-skills/prismer-github/references/auth.md +91 -0
  283. package/built-in-skills/prismer-github/references/ci-troubleshooting.md +193 -0
  284. package/built-in-skills/prismer-github/references/code-review.md +465 -0
  285. package/built-in-skills/prismer-github/references/conventional-commits.md +81 -0
  286. package/built-in-skills/prismer-github/references/github-api-cheatsheet.md +177 -0
  287. package/built-in-skills/prismer-github/references/issue-to-pr.md +74 -0
  288. package/built-in-skills/prismer-github/references/issues.md +336 -0
  289. package/built-in-skills/prismer-github/references/pr-workflow.md +346 -0
  290. package/built-in-skills/prismer-github/references/repo-management.md +484 -0
  291. package/built-in-skills/prismer-github/references/review-output-template.md +84 -0
  292. package/built-in-skills/prismer-github/scripts/ensure-gh.py +132 -0
  293. package/built-in-skills/prismer-github/scripts/gh-env.sh +25 -0
  294. package/built-in-skills/prismer-github/scripts/git-credential-token.py +68 -0
  295. package/built-in-skills/prismer-github/scripts/github-api.py +71 -0
  296. package/built-in-skills/prismer-github/scripts/github-context.py +28 -0
  297. package/built-in-skills/prismer-github/templates/bug-report.md +35 -0
  298. package/built-in-skills/prismer-github/templates/feature-request.md +31 -0
  299. package/built-in-skills/prismer-github/templates/pr-body-bugfix.md +35 -0
  300. package/built-in-skills/prismer-github/templates/pr-body-feature.md +33 -0
  301. package/built-in-skills/prismer-google-workspace/LICENSE +21 -0
  302. package/built-in-skills/prismer-google-workspace/NOTICE.md +11 -0
  303. package/built-in-skills/prismer-google-workspace/SKILL.md +369 -0
  304. package/built-in-skills/prismer-google-workspace/references/daily-brief.md +65 -0
  305. package/built-in-skills/prismer-google-workspace/references/gmail-search-syntax.md +63 -0
  306. package/built-in-skills/prismer-google-workspace/scripts/_hermes_home.py +17 -0
  307. package/built-in-skills/prismer-google-workspace/scripts/_private_state.py +39 -0
  308. package/built-in-skills/prismer-google-workspace/scripts/google_api.py +1339 -0
  309. package/built-in-skills/prismer-google-workspace/scripts/gws_bridge.py +121 -0
  310. package/built-in-skills/prismer-google-workspace/scripts/setup.py +563 -0
  311. package/built-in-skills/prismer-google-workspace/tests/test_productivity_regressions.py +214 -0
  312. package/built-in-skills/prismer-hermes-agent/LICENSE +21 -0
  313. package/built-in-skills/prismer-hermes-agent/NOTICE.md +17 -0
  314. package/built-in-skills/prismer-hermes-agent/SKILL.md +247 -0
  315. package/built-in-skills/prismer-hermes-agent/references/background-systems.md +108 -0
  316. package/built-in-skills/prismer-hermes-agent/references/cli-reference.md +158 -0
  317. package/built-in-skills/prismer-hermes-agent/references/configuration.md +96 -0
  318. package/built-in-skills/prismer-hermes-agent/references/contributor-guide.md +151 -0
  319. package/built-in-skills/prismer-hermes-agent/references/delegate-task-concurrency-diagnosis.md +47 -0
  320. package/built-in-skills/prismer-hermes-agent/references/desktop-plugins.md +215 -0
  321. package/built-in-skills/prismer-hermes-agent/references/native-mcp.md +351 -0
  322. package/built-in-skills/prismer-hermes-agent/references/petdex.md +82 -0
  323. package/built-in-skills/prismer-hermes-agent/references/portal-auth-for-third-party-apps.md +135 -0
  324. package/built-in-skills/prismer-hermes-agent/references/project-context-files.md +55 -0
  325. package/built-in-skills/prismer-hermes-agent/references/providers-and-models.md +81 -0
  326. package/built-in-skills/prismer-hermes-agent/references/security-privacy.md +73 -0
  327. package/built-in-skills/prismer-hermes-agent/references/slash-commands.md +119 -0
  328. package/built-in-skills/prismer-hermes-agent/references/themes.md +134 -0
  329. package/built-in-skills/prismer-hermes-agent/references/troubleshooting.md +87 -0
  330. package/built-in-skills/prismer-hermes-agent/references/tui-widgets.md +144 -0
  331. package/built-in-skills/prismer-hermes-agent/references/webhooks.md +219 -0
  332. package/built-in-skills/prismer-hermes-agent/references/windows-quirks.md +64 -0
  333. package/built-in-skills/prismer-hermes-agent/templates/clock.mjs +51 -0
  334. package/built-in-skills/prismer-hermes-agent/templates/plugin.js +97 -0
  335. package/built-in-skills/prismer-hermes-agent/templates/skin.yaml +49 -0
  336. package/built-in-skills/prismer-himalaya/LICENSE +21 -0
  337. package/built-in-skills/prismer-himalaya/NOTICE.md +11 -0
  338. package/built-in-skills/prismer-himalaya/SKILL.md +340 -0
  339. package/built-in-skills/prismer-himalaya/references/configuration.md +227 -0
  340. package/built-in-skills/prismer-himalaya/references/message-composition.md +206 -0
  341. package/built-in-skills/prismer-himalaya/scripts/compose_draft.py +48 -0
  342. package/built-in-skills/prismer-im-collab/SKILL.md +1 -1
  343. package/built-in-skills/prismer-imessage/LICENSE +21 -0
  344. package/built-in-skills/prismer-imessage/NOTICE.md +17 -0
  345. package/built-in-skills/prismer-imessage/SKILL.md +128 -0
  346. package/built-in-skills/prismer-imessage/scripts/readiness.py +47 -0
  347. package/built-in-skills/prismer-manim-video/LICENSE +21 -0
  348. package/built-in-skills/prismer-manim-video/LICENSE.hermes +21 -0
  349. package/built-in-skills/prismer-manim-video/PROVENANCE.md +7 -0
  350. package/built-in-skills/prismer-manim-video/README.md +23 -0
  351. package/built-in-skills/prismer-manim-video/SKILL.md +279 -0
  352. package/built-in-skills/prismer-manim-video/references/animation-design-thinking.md +161 -0
  353. package/built-in-skills/prismer-manim-video/references/animations.md +282 -0
  354. package/built-in-skills/prismer-manim-video/references/camera-and-3d.md +135 -0
  355. package/built-in-skills/prismer-manim-video/references/decorations.md +202 -0
  356. package/built-in-skills/prismer-manim-video/references/equations.md +216 -0
  357. package/built-in-skills/prismer-manim-video/references/graphs-and-data.md +163 -0
  358. package/built-in-skills/prismer-manim-video/references/mobjects.md +333 -0
  359. package/built-in-skills/prismer-manim-video/references/paper-explainer.md +255 -0
  360. package/built-in-skills/prismer-manim-video/references/production-quality.md +190 -0
  361. package/built-in-skills/prismer-manim-video/references/rendering.md +187 -0
  362. package/built-in-skills/prismer-manim-video/references/scene-planning.md +118 -0
  363. package/built-in-skills/prismer-manim-video/references/troubleshooting.md +135 -0
  364. package/built-in-skills/prismer-manim-video/references/updaters-and-trackers.md +260 -0
  365. package/built-in-skills/prismer-manim-video/references/visual-design.md +124 -0
  366. package/built-in-skills/prismer-manim-video/scripts/setup.sh +15 -0
  367. package/built-in-skills/prismer-maps/LICENSE +21 -0
  368. package/built-in-skills/prismer-maps/NOTICE.md +11 -0
  369. package/built-in-skills/prismer-maps/SKILL.md +240 -0
  370. package/built-in-skills/prismer-maps/scripts/maps_client.py +1324 -0
  371. package/built-in-skills/prismer-node-inspect-debugger/LICENSE +21 -0
  372. package/built-in-skills/prismer-node-inspect-debugger/NOTICE.md +17 -0
  373. package/built-in-skills/prismer-node-inspect-debugger/SKILL.md +347 -0
  374. package/built-in-skills/prismer-notion/LICENSE +21 -0
  375. package/built-in-skills/prismer-notion/NOTICE.md +11 -0
  376. package/built-in-skills/prismer-notion/SKILL.md +495 -0
  377. package/built-in-skills/prismer-notion/references/block-types.md +112 -0
  378. package/built-in-skills/prismer-obsidian/LICENSE +21 -0
  379. package/built-in-skills/prismer-obsidian/LICENSE.hermes +21 -0
  380. package/built-in-skills/prismer-obsidian/PROVENANCE.md +7 -0
  381. package/built-in-skills/prismer-obsidian/SKILL.md +80 -0
  382. package/built-in-skills/prismer-obsidian/provenance/category-DESCRIPTION.md +3 -0
  383. package/built-in-skills/prismer-obsidian/scripts/write_note.py +84 -0
  384. package/built-in-skills/prismer-p5js/LICENSE +21 -0
  385. package/built-in-skills/prismer-p5js/LICENSE.hermes +21 -0
  386. package/built-in-skills/prismer-p5js/PROVENANCE.md +7 -0
  387. package/built-in-skills/prismer-p5js/README.md +64 -0
  388. package/built-in-skills/prismer-p5js/SKILL.md +574 -0
  389. package/built-in-skills/prismer-p5js/references/animation.md +439 -0
  390. package/built-in-skills/prismer-p5js/references/color-systems.md +355 -0
  391. package/built-in-skills/prismer-p5js/references/core-api.md +410 -0
  392. package/built-in-skills/prismer-p5js/references/export-pipeline.md +534 -0
  393. package/built-in-skills/prismer-p5js/references/interaction.md +398 -0
  394. package/built-in-skills/prismer-p5js/references/shapes-and-geometry.md +300 -0
  395. package/built-in-skills/prismer-p5js/references/troubleshooting.md +532 -0
  396. package/built-in-skills/prismer-p5js/references/typography.md +302 -0
  397. package/built-in-skills/prismer-p5js/references/visual-effects.md +905 -0
  398. package/built-in-skills/prismer-p5js/references/webgl-and-3d.md +423 -0
  399. package/built-in-skills/prismer-p5js/scripts/export-frames.js +91 -0
  400. package/built-in-skills/prismer-p5js/scripts/render.sh +113 -0
  401. package/built-in-skills/prismer-p5js/scripts/serve.sh +25 -0
  402. package/built-in-skills/prismer-p5js/scripts/setup.sh +87 -0
  403. package/built-in-skills/prismer-p5js/templates/viewer.html +401 -0
  404. package/built-in-skills/prismer-popular-web-designs/LICENSE +21 -0
  405. package/built-in-skills/prismer-popular-web-designs/LICENSE.hermes +21 -0
  406. package/built-in-skills/prismer-popular-web-designs/LICENSE.origin +21 -0
  407. package/built-in-skills/prismer-popular-web-designs/PROVENANCE.md +7 -0
  408. package/built-in-skills/prismer-popular-web-designs/SKILL.md +218 -0
  409. package/built-in-skills/prismer-popular-web-designs/templates/airbnb.md +259 -0
  410. package/built-in-skills/prismer-popular-web-designs/templates/airtable.md +102 -0
  411. package/built-in-skills/prismer-popular-web-designs/templates/apple.md +326 -0
  412. package/built-in-skills/prismer-popular-web-designs/templates/bmw.md +193 -0
  413. package/built-in-skills/prismer-popular-web-designs/templates/cal.md +272 -0
  414. package/built-in-skills/prismer-popular-web-designs/templates/claude.md +325 -0
  415. package/built-in-skills/prismer-popular-web-designs/templates/clay.md +317 -0
  416. package/built-in-skills/prismer-popular-web-designs/templates/clickhouse.md +294 -0
  417. package/built-in-skills/prismer-popular-web-designs/templates/cohere.md +279 -0
  418. package/built-in-skills/prismer-popular-web-designs/templates/coinbase.md +142 -0
  419. package/built-in-skills/prismer-popular-web-designs/templates/composio.md +320 -0
  420. package/built-in-skills/prismer-popular-web-designs/templates/cursor.md +322 -0
  421. package/built-in-skills/prismer-popular-web-designs/templates/elevenlabs.md +278 -0
  422. package/built-in-skills/prismer-popular-web-designs/templates/expo.md +294 -0
  423. package/built-in-skills/prismer-popular-web-designs/templates/figma.md +233 -0
  424. package/built-in-skills/prismer-popular-web-designs/templates/framer.md +259 -0
  425. package/built-in-skills/prismer-popular-web-designs/templates/hashicorp.md +291 -0
  426. package/built-in-skills/prismer-popular-web-designs/templates/ibm.md +345 -0
  427. package/built-in-skills/prismer-popular-web-designs/templates/intercom.md +159 -0
  428. package/built-in-skills/prismer-popular-web-designs/templates/kraken.md +138 -0
  429. package/built-in-skills/prismer-popular-web-designs/templates/linear.app.md +380 -0
  430. package/built-in-skills/prismer-popular-web-designs/templates/lovable.md +311 -0
  431. package/built-in-skills/prismer-popular-web-designs/templates/minimax.md +270 -0
  432. package/built-in-skills/prismer-popular-web-designs/templates/mintlify.md +339 -0
  433. package/built-in-skills/prismer-popular-web-designs/templates/miro.md +121 -0
  434. package/built-in-skills/prismer-popular-web-designs/templates/mistral.ai.md +274 -0
  435. package/built-in-skills/prismer-popular-web-designs/templates/mongodb.md +279 -0
  436. package/built-in-skills/prismer-popular-web-designs/templates/notion.md +322 -0
  437. package/built-in-skills/prismer-popular-web-designs/templates/nvidia.md +306 -0
  438. package/built-in-skills/prismer-popular-web-designs/templates/ollama.md +280 -0
  439. package/built-in-skills/prismer-popular-web-designs/templates/opencode.ai.md +294 -0
  440. package/built-in-skills/prismer-popular-web-designs/templates/pinterest.md +243 -0
  441. package/built-in-skills/prismer-popular-web-designs/templates/posthog.md +269 -0
  442. package/built-in-skills/prismer-popular-web-designs/templates/raycast.md +281 -0
  443. package/built-in-skills/prismer-popular-web-designs/templates/replicate.md +274 -0
  444. package/built-in-skills/prismer-popular-web-designs/templates/resend.md +316 -0
  445. package/built-in-skills/prismer-popular-web-designs/templates/revolut.md +198 -0
  446. package/built-in-skills/prismer-popular-web-designs/templates/runwayml.md +257 -0
  447. package/built-in-skills/prismer-popular-web-designs/templates/sanity.md +370 -0
  448. package/built-in-skills/prismer-popular-web-designs/templates/sentry.md +275 -0
  449. package/built-in-skills/prismer-popular-web-designs/templates/spacex.md +207 -0
  450. package/built-in-skills/prismer-popular-web-designs/templates/spotify.md +259 -0
  451. package/built-in-skills/prismer-popular-web-designs/templates/stripe.md +335 -0
  452. package/built-in-skills/prismer-popular-web-designs/templates/supabase.md +268 -0
  453. package/built-in-skills/prismer-popular-web-designs/templates/superhuman.md +265 -0
  454. package/built-in-skills/prismer-popular-web-designs/templates/together.ai.md +276 -0
  455. package/built-in-skills/prismer-popular-web-designs/templates/uber.md +308 -0
  456. package/built-in-skills/prismer-popular-web-designs/templates/vercel.md +323 -0
  457. package/built-in-skills/prismer-popular-web-designs/templates/voltagent.md +336 -0
  458. package/built-in-skills/prismer-popular-web-designs/templates/warp.md +266 -0
  459. package/built-in-skills/prismer-popular-web-designs/templates/webflow.md +105 -0
  460. package/built-in-skills/prismer-popular-web-designs/templates/wise.md +186 -0
  461. package/built-in-skills/prismer-popular-web-designs/templates/x.ai.md +270 -0
  462. package/built-in-skills/prismer-popular-web-designs/templates/zapier.md +341 -0
  463. package/built-in-skills/prismer-product-price-monitor/LICENSE +21 -0
  464. package/built-in-skills/prismer-product-price-monitor/NOTICE.md +11 -0
  465. package/built-in-skills/prismer-product-price-monitor/SKILL.md +97 -0
  466. package/built-in-skills/prismer-product-price-monitor/scripts/watch_state.py +116 -0
  467. package/built-in-skills/prismer-python-debugpy/LICENSE +21 -0
  468. package/built-in-skills/prismer-python-debugpy/NOTICE.md +17 -0
  469. package/built-in-skills/prismer-python-debugpy/SKILL.md +377 -0
  470. package/built-in-skills/prismer-python-debugpy/scripts/dap_client.py +68 -0
  471. package/built-in-skills/prismer-songsee/LICENSE +21 -0
  472. package/built-in-skills/prismer-songsee/LICENSE.hermes +21 -0
  473. package/built-in-skills/prismer-songsee/PROVENANCE.md +7 -0
  474. package/built-in-skills/prismer-songsee/SKILL.md +91 -0
  475. package/built-in-skills/prismer-songwriting-and-ai-music/LICENSE +21 -0
  476. package/built-in-skills/prismer-songwriting-and-ai-music/LICENSE.hermes +21 -0
  477. package/built-in-skills/prismer-songwriting-and-ai-music/PROVENANCE.md +7 -0
  478. package/built-in-skills/prismer-songwriting-and-ai-music/SKILL.md +317 -0
  479. package/built-in-skills/prismer-spike/LICENSE +21 -0
  480. package/built-in-skills/prismer-spike/LICENSE.gsd +21 -0
  481. package/built-in-skills/prismer-spike/NOTICE.md +17 -0
  482. package/built-in-skills/prismer-spike/SKILL.md +212 -0
  483. package/built-in-skills/prismer-teams-meeting-pipeline/LICENSE +21 -0
  484. package/built-in-skills/prismer-teams-meeting-pipeline/NOTICE.md +11 -0
  485. package/built-in-skills/prismer-teams-meeting-pipeline/SKILL.md +156 -0
  486. package/built-in-skills/prismer-xurl/LICENSE +21 -0
  487. package/built-in-skills/prismer-xurl/LICENSE.hermes +21 -0
  488. package/built-in-skills/prismer-xurl/PROVENANCE.md +7 -0
  489. package/built-in-skills/prismer-xurl/SKILL.md +444 -0
  490. package/built-in-skills/prismer-xurl/provenance/category-DESCRIPTION.md +3 -0
  491. package/built-in-skills/prismer-youtube-content/LICENSE +21 -0
  492. package/built-in-skills/prismer-youtube-content/LICENSE.hermes +21 -0
  493. package/built-in-skills/prismer-youtube-content/PROVENANCE.md +7 -0
  494. package/built-in-skills/prismer-youtube-content/SKILL.md +86 -0
  495. package/built-in-skills/prismer-youtube-content/provenance/category-DESCRIPTION.md +3 -0
  496. package/built-in-skills/prismer-youtube-content/references/output-formats.md +56 -0
  497. package/built-in-skills/prismer-youtube-content/scripts/fetch_transcript.py +146 -0
  498. package/built-in-skills/research-arxiv/LICENSE +21 -0
  499. package/built-in-skills/research-arxiv/NOTICE.md +4 -0
  500. package/built-in-skills/research-arxiv/SKILL.md +263 -0
  501. package/built-in-skills/research-arxiv/scripts/search_arxiv.py +111 -0
  502. package/built-in-skills/role-builder/SKILL.md +7 -1
  503. package/built-in-skills/role-builder/scripts/author-role.mjs +23 -7
  504. package/built-in-skills/role-builder/scripts/ingest-role.mjs +15 -117
  505. package/built-in-skills/role-builder/scripts/instantiate-and-run.mjs +15 -1
  506. package/built-in-skills/role-builder/scripts/operation-harness.mjs +6 -4
  507. package/built-in-skills/skill-creator/LICENSE.prismer +21 -0
  508. package/built-in-skills/skill-creator/NOTICE.md +18 -0
  509. package/built-in-skills/skill-creator/SKILL.md +20 -1
  510. package/built-in-skills/skill-creator/eval-viewer/generate_review.py +20 -31
  511. package/built-in-skills/skill-creator/eval-viewer/viewer.html +35 -23
  512. package/built-in-skills/skill-creator/references/hermes-agent-skill-authoring/GUIDE.md +220 -0
  513. package/built-in-skills/skill-creator/references/hermes-agent-skill-authoring/LICENSE +21 -0
  514. package/built-in-skills/{skill-authoring/SKILL.md → skill-creator/references/skill-authoring/GUIDE.md} +1 -1
  515. package/built-in-skills/{skill-builder/SKILL.md → skill-creator/references/skill-builder/GUIDE.md} +8 -12
  516. package/built-in-skills/skill-creator/references/skill-builder/scripts/ingest.mjs +93 -0
  517. package/built-in-skills/skill-creator/scripts/aggregate_benchmark.py +3 -2
  518. package/built-in-skills/skill-creator/scripts/import-library.mjs +30 -7
  519. package/built-in-skills/skill-creator/scripts/improve_description.py +14 -16
  520. package/built-in-skills/skill-creator/scripts/package_skill.py +16 -9
  521. package/built-in-skills/skill-creator/scripts/quick_validate.py +22 -5
  522. package/built-in-skills/skill-creator/scripts/run_eval.py +63 -144
  523. package/built-in-skills/skill-creator/scripts/run_loop.py +24 -16
  524. package/built-in-skills/slack-gif-creator/core/gif_builder.py +13 -2
  525. package/built-in-skills/slack-gif-creator/core/validators.py +17 -7
  526. package/built-in-skills/tasks/SKILL.md +2 -2
  527. package/built-in-skills/tdd/SKILL.md +7 -0
  528. package/built-in-skills/tdd/references/test-driven-development/GUIDE.md +356 -0
  529. package/built-in-skills/tdd/references/test-driven-development/LICENSE +21 -0
  530. package/built-in-skills/tdd/references/test-driven-development/LICENSE.superpowers +21 -0
  531. package/built-in-skills/tdd/references/test-driven-development/NOTICE.md +37 -0
  532. package/built-in-skills/team/SKILL.md +1 -1
  533. package/built-in-skills/web-artifacts-builder/SKILL.md +3 -3
  534. package/built-in-skills/web-artifacts-builder/scripts/bundle-artifact.sh +9 -7
  535. package/built-in-skills/web-artifacts-builder/scripts/init-artifact.sh +28 -55
  536. package/built-in-skills/webapp-qa/LICENSE +21 -0
  537. package/built-in-skills/webapp-qa/NOTICE.md +37 -0
  538. package/built-in-skills/webapp-qa/SKILL.md +41 -0
  539. package/built-in-skills/webapp-qa/references/dogfood/GUIDE.md +161 -0
  540. package/built-in-skills/webapp-qa/references/issue-taxonomy.md +109 -0
  541. package/built-in-skills/webapp-qa/templates/dogfood-report-template.md +86 -0
  542. package/built-in-skills/webapp-testing/SKILL.md +9 -2
  543. package/built-in-skills/webapp-testing/examples/console_logging.py +10 -4
  544. package/built-in-skills/webapp-testing/examples/element_discovery.py +11 -4
  545. package/built-in-skills/webapp-testing/examples/static_html_automation.py +14 -9
  546. package/built-in-skills/webapp-testing/scripts/with_server.py +34 -10
  547. package/built-in-skills/weekly-review/LICENSE +21 -0
  548. package/built-in-skills/weekly-review/NOTICE.md +21 -0
  549. package/built-in-skills/weekly-review/SKILL.md +49 -0
  550. package/components/eaas-pi-components.manifest.json +37 -0
  551. package/dist/cli.cjs +7017 -3340
  552. package/dist/cli.js +6631 -2936
  553. package/dist/index.cjs +7863 -3830
  554. package/dist/index.d.cts +459 -5
  555. package/dist/index.d.ts +459 -5
  556. package/dist/index.js +7106 -3064
  557. package/package.json +7 -2
  558. package/plugins/memory/prismer/__init__.py +4 -0
  559. package/plugins/memory/prismer/tool-schemas.generated.json +8 -0
  560. package/built-in-skills/skill-builder/scripts/ingest.mjs +0 -265
  561. package/built-in-skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  562. /package/built-in-skills/{document-generation/SKILL.md → office-artifacts/references/document-generation/GUIDE.md} +0 -0
  563. /package/built-in-skills/{skill-authoring/skill.json → skill-creator/references/skill-authoring/draft-contract.json} +0 -0
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env python3
2
+ """Bounded, version-preserving arXiv Atom search (stdlib only)."""
3
+ import argparse
4
+ import json
5
+ import re
6
+ import sys
7
+ import time
8
+ import urllib.error
9
+ import urllib.parse
10
+ import urllib.request
11
+ import xml.etree.ElementTree as ET
12
+
13
+ NS = {"a": "http://www.w3.org/2005/Atom"}
14
+ ID = re.compile(r"(?:\d{4}\.\d{4,5}|[a-z-]+(?:\.[A-Z]{2})?/\d{7})(?:v[1-9]\d*)?\Z")
15
+ SORTS = {"relevance": "relevance", "date": "submittedDate", "updated": "lastUpdatedDate"}
16
+
17
+
18
+ def parse_feed(data):
19
+ root = ET.fromstring(data)
20
+ if root.tag != "{" + NS["a"] + "}feed":
21
+ raise ValueError("response is not an Atom feed")
22
+ papers = []
23
+ for entry in root.findall("a:entry", NS):
24
+ def field(name, default="unknown"):
25
+ return " ".join((entry.findtext("a:" + name, default, NS) or default).split())
26
+ raw_id = field("id", "")
27
+ if "/api/errors" in raw_id:
28
+ raise ValueError("arXiv API error: " + field("summary"))
29
+ parsed = urllib.parse.urlsplit(raw_id)
30
+ if parsed.hostname not in {"arxiv.org", "www.arxiv.org", "export.arxiv.org"} or not parsed.path.startswith("/abs/"):
31
+ raise ValueError("entry has an invalid arXiv identifier")
32
+ paper_id = parsed.path.removeprefix("/abs/")
33
+ if not ID.fullmatch(paper_id):
34
+ raise ValueError("entry has an invalid arXiv identifier")
35
+ papers.append({
36
+ "id": paper_id, "title": field("title"),
37
+ "published": field("published"), "updated": field("updated"),
38
+ "authors": [a.findtext("a:name", "unknown", NS) for a in entry.findall("a:author", NS)],
39
+ "categories": [c.get("term", "") for c in entry.findall("a:category", NS)],
40
+ "abstract": field("summary", ""),
41
+ "abs_url": "https://arxiv.org/abs/" + paper_id,
42
+ "pdf_url": "https://arxiv.org/pdf/" + paper_id,
43
+ })
44
+ return papers
45
+
46
+
47
+ def search(query=None, author=None, category=None, ids=None, max_results=5, sort="relevance", start=0, as_json=False):
48
+ if not isinstance(max_results, int) or not 1 <= max_results <= 100:
49
+ raise ValueError("max_results must be between 1 and 100")
50
+ if not isinstance(start, int) or start < 0 or sort not in SORTS:
51
+ raise ValueError("invalid start or sort")
52
+ params = {"max_results": max_results, "start": start, "sortBy": SORTS[sort], "sortOrder": "descending"}
53
+ if ids:
54
+ values = [value.strip() for value in ids.split(",")]
55
+ if len(values) > 100 or not all(ID.fullmatch(value) for value in values):
56
+ raise ValueError("invalid arXiv id list")
57
+ params["id_list"] = ",".join(values)
58
+ else:
59
+ parts = [prefix + ":" + value for prefix, value in [("all", query), ("au", author), ("cat", category)] if value]
60
+ if not parts:
61
+ raise ValueError("provide a query, --author, --category, or --id")
62
+ params["search_query"] = " AND ".join(parts)
63
+ url = "https://export.arxiv.org/api/query?" + urllib.parse.urlencode(params)
64
+ request = urllib.request.Request(url, headers={"User-Agent": "PrismerResearch/1.0"})
65
+ for attempt in range(3):
66
+ try:
67
+ with urllib.request.urlopen(request, timeout=20) as response:
68
+ data = response.read(8 * 1024 * 1024 + 1)
69
+ if len(data) > 8 * 1024 * 1024:
70
+ raise ValueError("arXiv response exceeds 8 MiB")
71
+ break
72
+ except urllib.error.HTTPError as exc:
73
+ if attempt == 2 or exc.code not in {429, 500, 502, 503, 504}:
74
+ raise
75
+ time.sleep(3 * (attempt + 1))
76
+ papers = parse_feed(data)
77
+ if as_json:
78
+ print(json.dumps({"papers": papers, "start": start, "count": len(papers)}, ensure_ascii=False))
79
+ elif not papers:
80
+ print("No results found.")
81
+ else:
82
+ for index, paper in enumerate(papers, start=1):
83
+ print(f"{index}. {paper['title']}\n ID: {paper['id']} | Published: {paper['published']} | Updated: {paper['updated']}")
84
+ print(" Authors: " + ", ".join(paper["authors"]))
85
+ print(" Categories: " + ", ".join(paper["categories"]))
86
+ print(" Abstract: " + paper["abstract"])
87
+ print(f" Links: {paper['abs_url']} | {paper['pdf_url']}\n")
88
+ return papers
89
+
90
+
91
+ def main():
92
+ parser = argparse.ArgumentParser(description=__doc__)
93
+ parser.add_argument("query", nargs="?")
94
+ parser.add_argument("--author")
95
+ parser.add_argument("--category")
96
+ parser.add_argument("--id", dest="ids")
97
+ parser.add_argument("--max", type=int, default=5, dest="max_results")
98
+ parser.add_argument("--start", type=int, default=0)
99
+ parser.add_argument("--sort", choices=SORTS, default="relevance")
100
+ parser.add_argument("--json", action="store_true", dest="as_json")
101
+ args = parser.parse_args()
102
+ try:
103
+ search(**vars(args))
104
+ except (ValueError, ET.ParseError, OSError) as exc:
105
+ print(f"arxiv search failed: {exc}", file=sys.stderr)
106
+ return 1
107
+ return 0
108
+
109
+
110
+ if __name__ == "__main__":
111
+ sys.exit(main())
@@ -134,7 +134,7 @@ cloud role create ./<role-slug> --mine --json
134
134
  cloud role show <returned-slug-or-id> --json
135
135
  ```
136
136
 
137
- For a zero-dependency ingest client after the files are authored and validated:
137
+ For the retained legacy entrypoint (requires the current Cloud CLI; no raw HTTP fallback):
138
138
 
139
139
  ```bash
140
140
  node scripts/ingest-role.mjs ./<role-slug> --mine
@@ -142,6 +142,12 @@ node scripts/ingest-role.mjs ./<role-slug> --mine
142
142
 
143
143
  It reads `PRISMER_API_KEY` and `PRISMER_CLOUD_BASE` from the already-injected
144
144
  environment. Do not write literal secrets in the command, bundle, or ledger.
145
+ The adapter delegates validation and Skill preflight to Cloud before creation.
146
+ Ledger-based workflows require an injected API key even if Cloud has saved
147
+ credentials: the target origin and that executing key's hash bind every receipt.
148
+ Changing either requires a separate ledger. Completed receipts are read back,
149
+ not blindly trusted. A lock is never stolen on timeout; after a crash, verify
150
+ the old process has stopped and reconcile remote writes before explicit recovery.
145
151
 
146
152
  ## C. Change an existing agent's role
147
153
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { spawnSync } from 'node:child_process';
4
4
  import { createHash } from 'node:crypto';
5
- import { existsSync, mkdirSync, readFileSync, renameSync, statSync, writeFileSync } from 'node:fs';
5
+ import { existsSync, mkdirSync, readFileSync, renameSync, statSync, writeFileSync, openSync, closeSync, unlinkSync } from 'node:fs';
6
6
  import { dirname, resolve } from 'node:path';
7
7
 
8
8
  export class RoleAuthoringError extends Error {
@@ -95,7 +95,7 @@ export function loadRoleAuthoringConfig(argv, env = process.env) {
95
95
  baseUrl.username ||
96
96
  baseUrl.password ||
97
97
  baseUrl.search ||
98
- baseUrl.hash
98
+ baseUrl.hash || baseUrl.pathname !== '/'
99
99
  ) {
100
100
  throw new RoleAuthoringError(
101
101
  'local_validation',
@@ -116,6 +116,7 @@ export function loadRoleAuthoringConfig(argv, env = process.env) {
116
116
 
117
117
  const revision = roleRevision(rolePath);
118
118
  return {
119
+ credential: env.PRISMER_API_KEY?.trim() || '',
119
120
  rolePath,
120
121
  revision,
121
122
  cloudBin: env.PRISMER_CLOUD_BIN?.trim() || 'cloud',
@@ -133,7 +134,8 @@ export function loadRoleAuthoringConfig(argv, env = process.env) {
133
134
  function defaultRunCloud(config, args) {
134
135
  const result = spawnSync(config.cloudBin, args, {
135
136
  encoding: 'utf8',
136
- env: { ...process.env, PRISMER_CLOUD_BASE: config.baseUrl },
137
+ env: { ...process.env, PRISMER_CLOUD_BASE: config.baseUrl, PRISMER_API_KEY: config.credential },
138
+ timeout: 120_000,
137
139
  shell: false,
138
140
  });
139
141
  if (result.error) {
@@ -180,7 +182,7 @@ function cliError(result) {
180
182
 
181
183
  function writeLedger(path, ledger) {
182
184
  mkdirSync(dirname(path), { recursive: true });
183
- const temporary = `${path}.tmp`;
185
+ const temporary = `${path}.${process.pid}.tmp`;
184
186
  writeFileSync(temporary, `${JSON.stringify(ledger, null, 2)}\n`, { mode: 0o600 });
185
187
  renameSync(temporary, path);
186
188
  }
@@ -201,10 +203,24 @@ function readLedger(path) {
201
203
  }
202
204
 
203
205
  export async function runRoleAuthoring(config, runCloud = defaultRunCloud) {
206
+ mkdirSync(dirname(config.ledgerPath), { recursive: true });
207
+ const lockPath = `${config.ledgerPath}.lock`;
208
+ const lock = openSync(lockPath, 'wx', 0o600);
209
+ try {
210
+ return await runRoleAuthoringLocked(config, runCloud);
211
+ } finally {
212
+ closeSync(lock);
213
+ unlinkSync(lockPath);
214
+ }
215
+ }
216
+
217
+ async function runRoleAuthoringLocked(config, runCloud) {
218
+ if (!config.credential) throw new RoleAuthoringError('local_validation', 'IDENTITY_REQUIRED', 'PRISMER_API_KEY is required to bind the ledger to the executing credential', 2);
219
+ const targetBinding = createHash('sha256').update(JSON.stringify([config.baseUrl, config.credential])).digest('hex');
204
220
  const previous = readLedger(config.ledgerPath);
205
221
  if (
206
222
  previous &&
207
- (previous.rolePath !== config.rolePath ||
223
+ (previous.targetBinding !== targetBinding || previous.rolePath !== config.rolePath ||
208
224
  previous.revision !== config.revision ||
209
225
  Boolean(previous.publish) !== config.publish)
210
226
  ) {
@@ -215,8 +231,7 @@ export async function runRoleAuthoring(config, runCloud = defaultRunCloud) {
215
231
  2,
216
232
  );
217
233
  }
218
- if (previous?.stage === 'completed') return previous;
219
- if (previous?.stage === 'created' && previous.slug) {
234
+ if (['created', 'completed'].includes(previous?.stage) && previous.slug) {
220
235
  // The server push completed and its canonical slug was durably recorded;
221
236
  // resume from readback instead of pushing again (which intentionally bumps
222
237
  // a role version even when its content is identical).
@@ -256,6 +271,7 @@ export async function runRoleAuthoring(config, runCloud = defaultRunCloud) {
256
271
  }
257
272
 
258
273
  const ledger = {
274
+ targetBinding,
259
275
  schemaVersion: 1,
260
276
  rolePath: config.rolePath,
261
277
  revision: config.revision,
@@ -25,8 +25,7 @@
25
25
  // EXPLICIT act, never the default (16 §2.3).
26
26
  // • APPLY is admin OR the target agent's workspace owner.
27
27
 
28
- import { readFileSync, statSync } from 'node:fs';
29
- import { join } from 'node:path';
28
+ import { spawnSync } from 'node:child_process';
30
29
 
31
30
  function die(msg, code = 1) {
32
31
  console.error(`[role-builder] ✗ ${msg}`);
@@ -95,7 +94,7 @@ if (
95
94
  target.username ||
96
95
  target.password ||
97
96
  target.search ||
98
- target.hash
97
+ target.hash || target.pathname !== '/'
99
98
  ) {
100
99
  die('PRISMER_CLOUD_BASE must be a plain http(s) origin without credentials, query, or hash', 2);
101
100
  }
@@ -105,119 +104,18 @@ if (!isLocalTarget && !allowRemote) {
105
104
  die('remote mutation is blocked; set PRISMER_ALLOW_REMOTE_WRITE=1 after confirming the target environment', 2);
106
105
  }
107
106
 
108
- // Read a role authoring unit — file OR directory (mirrors `cloud role create` /
109
- // runtime bundle.readRoleBundle). A dir folds SOUL.md → operatingPrinciples.
110
- function readRoleBundle(p) {
111
- let st;
112
- try {
113
- st = statSync(p);
114
- } catch {
115
- die(`role path not found: ${p}`);
107
+ // Preserve the legacy CLI surface while delegating parsing/preflight to Cloud.
108
+ const command = ['role', 'create', rolePath];
109
+ if (wantPublish) command.push('--publish');
110
+ if (wantApply) command.push('--apply');
111
+ if (agentId) command.push('--agent', agentId);
112
+ if (workspaceId) command.push('--workspace-id', workspaceId);
113
+ if (asJson) command.push('--json');
114
+ const cloud = process.env.PRISMER_CLOUD_BIN || 'cloud';
115
+ for (const args of [['role', 'validate', rolePath, '--json'], ['role', 'test', rolePath, '--json'], command]) {
116
+ const result = spawnSync(cloud, args, { stdio: 'inherit', shell: false, timeout: 120_000,
117
+ env: { ...process.env, PRISMER_CLOUD_BASE: BASE } });
118
+ if (result.error || result.status !== 0) {
119
+ die('Cloud CLI failed or timed out; inspect remote state before retrying', result.status || 5);
116
120
  }
117
- if (!st.isDirectory()) {
118
- try {
119
- return JSON.parse(readFileSync(p, 'utf8'));
120
- } catch (err) {
121
- die(`could not read/parse ${p}: ${err?.message || err}`);
122
- }
123
- }
124
- // Directory bundle: role.json (required) + SOUL.md (optional persona).
125
- let r;
126
- try {
127
- r = JSON.parse(readFileSync(join(p, 'role.json'), 'utf8'));
128
- } catch (err) {
129
- if (err?.code === 'ENOENT') die(`role bundle dir is missing role.json: ${join(p, 'role.json')}`);
130
- die(`could not read/parse ${join(p, 'role.json')}: ${err?.message || err}`);
131
- }
132
- try {
133
- const soul = readFileSync(join(p, 'SOUL.md'), 'utf8');
134
- // SOUL.md is the persona source-of-truth → operatingPrinciples (markdown).
135
- if (soul.trim() !== '') r.operatingPrinciples = soul;
136
- } catch (err) {
137
- if (err?.code !== 'ENOENT') die(`could not read SOUL.md: ${err?.message || err}`);
138
- // SOUL.md absent is allowed.
139
- }
140
- return r;
141
- }
142
-
143
- const role = readRoleBundle(rolePath);
144
-
145
- const slug = role.slug || role.templateName;
146
- if (!slug && !role.name && !role.displayName) die('role.json must have slug or name/displayName');
147
-
148
- if (role.requiredSkills && !Array.isArray(role.requiredSkills)) {
149
- die('requiredSkills must be an array of { skillSlug, required }');
150
121
  }
151
- for (const rs of role.requiredSkills || []) {
152
- if (!rs || typeof rs.skillSlug !== 'string') {
153
- die(`each requiredSkills entry needs a string skillSlug — got ${JSON.stringify(rs)}`);
154
- }
155
- }
156
-
157
- async function api(method, path, body) {
158
- const res = await fetch(`${BASE}${path}`, {
159
- method,
160
- headers: { 'content-type': 'application/json', authorization: `Bearer ${API_KEY}` },
161
- ...(body ? { body: JSON.stringify(body) } : {}),
162
- });
163
- let json = null;
164
- try {
165
- json = await res.json();
166
- } catch {
167
- /* non-JSON */
168
- }
169
- return { status: res.status, json };
170
- }
171
-
172
- (async () => {
173
- // product204/16 §2.3 — DEFAULT is the owner-scoped create path (private role
174
- // owned by the caller, lands in Studio `/mine`); `--publish`/`--admin-catalog`
175
- // is the EXPLICIT admin catalog path (publishes straight to the Marketplace).
176
- const createPath = wantMine ? '/api/im/role-templates/mine' : '/api/im/role-templates';
177
- const created = await api('POST', createPath, role);
178
- if (created.status === 403) {
179
- die(
180
- wantMine
181
- ? 'create returned 403 — the API key does not resolve to a workspace user (auth failed).'
182
- : 'create returned 403 — the API key does not map to an admin email (role create is admin-only). Use --mine for an owner-scoped private role.',
183
- 3,
184
- );
185
- }
186
- if (created.status === 409) die(`role slug already exists (409). Use update or a new slug.`, 2);
187
- if (created.status !== 201 || !created.json?.ok) {
188
- die(`create failed (HTTP ${created.status}): ${created.json?.error || 'unknown error'}`);
189
- }
190
- const tpl = created.json.data;
191
- const result = {
192
- slug: tpl.slug,
193
- agentType: tpl.agentType,
194
- taskAuthority: tpl.taskAuthority,
195
- requiredSkills: Array.isArray(role.requiredSkills) ? role.requiredSkills.length : 0,
196
- applied: false,
197
- };
198
-
199
- if (wantApply) {
200
- const apply = await api('POST', `/api/im/role-templates/${encodeURIComponent(tpl.slug)}/apply`, {
201
- agentId,
202
- ...(workspaceId ? { workspaceId } : {}),
203
- });
204
- if (apply.status >= 200 && apply.status < 300 && apply.json?.ok !== false) {
205
- result.applied = agentId;
206
- } else if (apply.status === 403) {
207
- result.applyError = '403 — need admin or the target agent workspace owner';
208
- } else {
209
- result.applyError = `HTTP ${apply.status}: ${apply.json?.error || 'apply failed'}`;
210
- }
211
- }
212
-
213
- if (asJson) {
214
- console.log(JSON.stringify(result, null, 2));
215
- } else {
216
- console.log(`[role-builder] ✓ ingested role ${result.slug}`);
217
- console.log(` type: ${result.agentType} / authority=${result.taskAuthority}`);
218
- console.log(` skills: ${result.requiredSkills}`);
219
- console.log(` applied: ${result.applied}${result.applyError ? ` (${result.applyError})` : ''}`);
220
- console.log(` verify: GET /api/im/role-templates/${result.slug}`);
221
- }
222
- if (result.applyError) process.exitCode = 5;
223
- })().catch((err) => die(err?.message || String(err)));
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ import { mkdirSync, openSync, closeSync, unlinkSync } from 'node:fs';
4
+ import { dirname } from 'node:path';
3
5
  import {
4
6
  HarnessError,
5
7
  invocationHash,
@@ -143,6 +145,18 @@ async function waitForTask(config, task, ledger) {
143
145
  }
144
146
 
145
147
  export async function runRoleWorkflow(config) {
148
+ mkdirSync(dirname(config.ledgerPath), { recursive: true });
149
+ const lockPath = `${config.ledgerPath}.lock`;
150
+ const lock = openSync(lockPath, 'wx', 0o600);
151
+ try {
152
+ return await runRoleWorkflowLocked(config);
153
+ } finally {
154
+ closeSync(lock);
155
+ unlinkSync(lockPath);
156
+ }
157
+ }
158
+
159
+ async function runRoleWorkflowLocked(config) {
146
160
  const acceptedHash = invocationHash(config);
147
161
  const previous = readLedger(config.ledgerPath);
148
162
  if (
@@ -150,7 +164,7 @@ export async function runRoleWorkflow(config) {
150
164
  (previous.requestId !== config.requestId ||
151
165
  previous.role !== config.role ||
152
166
  previous.workspaceId !== config.workspaceId ||
153
- (previous.invocationHash && previous.invocationHash !== acceptedHash))
167
+ previous.invocationHash !== acceptedHash)
154
168
  ) {
155
169
  throw new HarnessError(
156
170
  'local_validation',
@@ -123,7 +123,7 @@ export function loadHarnessConfig(argv, env = process.env) {
123
123
  baseUrl.username ||
124
124
  baseUrl.password ||
125
125
  baseUrl.search ||
126
- baseUrl.hash
126
+ baseUrl.hash || baseUrl.pathname !== '/'
127
127
  ) {
128
128
  throw new HarnessError(
129
129
  'local_validation',
@@ -151,8 +151,8 @@ export function loadHarnessConfig(argv, env = process.env) {
151
151
  const requestId =
152
152
  envOrArg(parsed, '--request-id', 'PRISMER_REQUEST_ID', env)?.trim() ||
153
153
  `role-run-${randomUUID()}`;
154
- if (requestId.length > 191) {
155
- throw new HarnessError('local_validation', 'INVALID_REQUEST_ID', 'request id exceeds 191 characters', 2);
154
+ if (!/^[A-Za-z0-9][A-Za-z0-9_-]{0,190}$/.test(requestId)) {
155
+ throw new HarnessError('local_validation', 'INVALID_REQUEST_ID', 'request id must be a safe path component of at most 191 characters', 2);
156
156
  }
157
157
 
158
158
  const config = {
@@ -185,7 +185,7 @@ export function loadHarnessConfig(argv, env = process.env) {
185
185
 
186
186
  export function writeLedger(path, value) {
187
187
  mkdirSync(dirname(path), { recursive: true });
188
- const temporary = `${path}.tmp`;
188
+ const temporary = `${path}.${process.pid}.tmp`;
189
189
  writeFileSync(temporary, `${JSON.stringify(value, null, 2)}\n`, { mode: 0o600 });
190
190
  renameSync(temporary, path);
191
191
  }
@@ -209,6 +209,8 @@ export function invocationHash(config) {
209
209
  return createHash('sha256')
210
210
  .update(
211
211
  JSON.stringify({
212
+ baseUrl: config.baseUrl,
213
+ credentialHash: createHash('sha256').update(config.apiKey).digest('hex'),
212
214
  requestId: config.requestId,
213
215
  role: config.role,
214
216
  workspaceId: config.workspaceId,
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Prismer
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,18 @@
1
+ # Resource License Boundaries
2
+
3
+ - Imported Anthropic authoring/evaluation resources retain Apache-2.0 in
4
+ `LICENSE.txt`, including its original copyright notice. Local fixes do not
5
+ replace that license.
6
+ - Prismer-specific workflow, `scripts/import-library.mjs`, and legacy
7
+ `references/skill-authoring/` / `references/skill-builder/` retain MIT from
8
+ `sdk/cloud/LICENSE`, reproduced as `LICENSE.prismer` (Copyright 2026 Prismer).
9
+ - `references/hermes-agent-skill-authoring/GUIDE.md` contains the full upstream
10
+ `skills/software-development/hermes-agent-skill-authoring/SKILL.md` at Hermes
11
+ revision `1a1f4a59e252e1dc0137e7b2e7bcc8b0381d19c4`, adapted for scope/path
12
+ safety and explicit authorization of git operations. Its MIT license,
13
+ Copyright 2025 Nous Research, is retained beside the guide as `LICENSE`.
14
+ The upstream skill has no additional resource files. No source upstream was
15
+ modified. Its skill identity is recorded in `metadata.nativeReplaces`.
16
+
17
+ Distribute these notices and nested license files with the corresponding
18
+ resources. The mixed-license frontmatter is not a relicensing of any source.
@@ -3,7 +3,7 @@ name: skill-creator
3
3
  scope: common
4
4
  category: authoring
5
5
  description: Create, import, edit, validate, test, or publish a Prismer SS-01 Skill. Use whenever a user asks to turn a repeatable capability or external Skill repository into platform Skills, improve an existing Skill, or make Skills available in Studio, a workspace, or Marketplace. Follow the fixed author-to-readback workflow and use bundled scripts for deterministic repeated work; do not explore raw endpoints or compose ad-hoc CLI chains.
6
- license: MIT
6
+ license: Apache-2.0 AND MIT; see NOTICE.md
7
7
  compatibility:
8
8
  - prismer-sdk
9
9
  - hermes
@@ -12,6 +12,8 @@ compatibility:
12
12
  - openclaw
13
13
  metadata:
14
14
  category: authoring
15
+ aliases: [skill-builder, skill-authoring]
16
+ nativeReplaces: [hermes-agent-skill-authoring]
15
17
  allowed-tools:
16
18
  - Read
17
19
  - Write
@@ -21,6 +23,14 @@ allowed-tools:
21
23
 
22
24
  # Skill Creator
23
25
 
26
+ Historical skill-builder and skill-authoring installs resolve to this entry.
27
+ For low-level legacy formats only, see references/skill-builder/GUIDE.md and
28
+ references/skill-authoring/GUIDE.md. The current workflow below is authoritative.
29
+ For Hermes in-repository conventions, read
30
+ `references/hermes-agent-skill-authoring/GUIDE.md` only when targeting a verified
31
+ Hermes checkout. It is a full MIT-licensed reference, not a second entrypoint.
32
+ The bundled Anthropic authoring resources retain Apache-2.0 in LICENSE.txt.
33
+
24
34
  Choose one route and execute it directly. Do not inspect `cloud --help`, create
25
35
  probe catalog objects, or call raw Skill endpoints first.
26
36
 
@@ -33,6 +43,15 @@ probe catalog objects, or call raw Skill endpoints first.
33
43
 
34
44
  ## Ownership boundary
35
45
 
46
+ Optional paid trigger/description evaluations require explicit budget approval
47
+ and `PRISMER_ALLOW_PAID_EVAL=1`. Trigger probes use isolated temporary skill
48
+ directories, Read/Skill only, 0.25 USD per query and a 300-call batch ceiling.
49
+ Use a current Claude CLI supporting `--bare` and budget flags; unsupported CLI,
50
+ timeout, auth failure, or missing terminal result is an error, not a negative
51
+ trigger. Do not bypass nested-session or authentication guards. Viewer HTML
52
+ is local; spreadsheet preview additionally uses its declared external SheetJS
53
+ script and is not guaranteed offline. Static feedback is downloaded explicitly.
54
+
36
55
  Keep each concern in its proper layer:
37
56
 
38
57
  - Product resource operations belong in the service/SDK/CLI.
@@ -16,12 +16,8 @@ import argparse
16
16
  import base64
17
17
  import json
18
18
  import mimetypes
19
- import os
20
19
  import re
21
- import signal
22
- import subprocess
23
20
  import sys
24
- import time
25
21
  import webbrowser
26
22
  from functools import partial
27
23
  from http.server import HTTPServer, BaseHTTPRequestHandler
@@ -276,7 +272,8 @@ def generate_html(
276
272
  if benchmark:
277
273
  embedded["benchmark"] = benchmark
278
274
 
279
- data_json = json.dumps(embedded)
275
+ # HTML parses closing script tags before JavaScript parses string literals.
276
+ data_json = json.dumps(embedded).replace('<', '\\u003c').replace('>', '\\u003e').replace('&', '\\u0026')
280
277
 
281
278
  return template.replace("/*__EMBEDDED_DATA__*/", f"const EMBEDDED_DATA = {data_json};")
282
279
 
@@ -285,26 +282,6 @@ def generate_html(
285
282
  # HTTP server (stdlib only, zero dependencies)
286
283
  # ---------------------------------------------------------------------------
287
284
 
288
- def _kill_port(port: int) -> None:
289
- """Kill any process listening on the given port."""
290
- try:
291
- result = subprocess.run(
292
- ["lsof", "-ti", f":{port}"],
293
- capture_output=True, text=True, timeout=5,
294
- )
295
- for pid_str in result.stdout.strip().split("\n"):
296
- if pid_str.strip():
297
- try:
298
- os.kill(int(pid_str.strip()), signal.SIGTERM)
299
- except (ProcessLookupError, ValueError):
300
- pass
301
- if result.stdout.strip():
302
- time.sleep(0.5)
303
- except subprocess.TimeoutExpired:
304
- pass
305
- except FileNotFoundError:
306
- print("Note: lsof not found, cannot check if port is in use", file=sys.stderr)
307
-
308
285
  class ReviewHandler(BaseHTTPRequestHandler):
309
286
  """Serves the review HTML and handles feedback saves.
310
287
 
@@ -360,12 +337,26 @@ class ReviewHandler(BaseHTTPRequestHandler):
360
337
 
361
338
  def do_POST(self) -> None:
362
339
  if self.path == "/api/feedback":
363
- length = int(self.headers.get("Content-Length", 0))
340
+ origin = self.headers.get('Origin')
341
+ if origin and origin not in (f'http://localhost:{self.server.server_port}', f'http://127.0.0.1:{self.server.server_port}'):
342
+ self.send_error(403)
343
+ return
344
+ try:
345
+ length = int(self.headers.get('Content-Length', 0))
346
+ except ValueError:
347
+ self.send_error(400)
348
+ return
349
+ if not 0 < length <= 1024 * 1024:
350
+ self.send_error(413)
351
+ return
364
352
  body = self.rfile.read(length)
365
353
  try:
366
354
  data = json.loads(body)
367
- if not isinstance(data, dict) or "reviews" not in data:
368
- raise ValueError("Expected JSON object with 'reviews' key")
355
+ if (not isinstance(data, dict) or not isinstance(data.get('reviews'), list)
356
+ or data.get('status') not in ('in_progress', 'complete')
357
+ or any(not isinstance(r, dict) or not isinstance(r.get('run_id'), str)
358
+ or not isinstance(r.get('feedback'), str) for r in data['reviews'])):
359
+ raise ValueError('Invalid review payload')
369
360
  self.feedback_path.write_text(json.dumps(data, indent=2) + "\n")
370
361
  resp = b'{"ok":true}'
371
362
  self.send_response(200)
@@ -435,14 +426,12 @@ def main() -> None:
435
426
  print(f"\n Static viewer written to: {args.static}\n")
436
427
  sys.exit(0)
437
428
 
438
- # Kill any existing process on the target port
439
429
  port = args.port
440
- _kill_port(port)
441
430
  handler = partial(ReviewHandler, workspace, skill_name, feedback_path, previous, benchmark_path)
442
431
  try:
443
432
  server = HTTPServer(("127.0.0.1", port), handler)
444
433
  except OSError:
445
- # Port still in use after kill attempt — find a free one
434
+ # Never signal an unrelated listener; let the OS select a free port.
446
435
  server = HTTPServer(("127.0.0.1", 0), handler)
447
436
  port = server.server_address[1]
448
437