@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,196 @@
1
+ ---
2
+ name: docx
3
+ description: Create, read, edit, template, and review Word .docx files.
4
+ version: 1.1.0
5
+ author: Nous Research
6
+ license: MIT
7
+ platforms: [linux, macos, windows]
8
+ metadata:
9
+ hermes:
10
+ tags: [word, docx, documents, office, templates, revisions, comments]
11
+ category: productivity
12
+ related_skills: [pdf, xlsx, powerpoint]
13
+ ---
14
+
15
+ # Docx Skill
16
+
17
+ Create, read, edit, and template Microsoft Word `.docx` files with
18
+ python-docx via small CLIs. It handles text, styles, lists, tables,
19
+ images, headers/footers, `{{token}}` templating, tracked changes
20
+ (list/accept/reject), comments (list/add/delete), TOC and page-number
21
+ fields, and package health checks. It does not render documents itself
22
+ (PDF needs LibreOffice — see Converting to PDF) or edit legacy `.doc`.
23
+
24
+ ## When to Use
25
+
26
+ - The user asks to generate a Word document (report, letter, contract).
27
+ - You need the text, outline, styles, or embedded images of a `.docx`.
28
+ - You must change an existing `.docx`: replace text, edit table cells,
29
+ insert/delete paragraphs, apply styles, merge fragmented runs.
30
+ - You have a `.docx` template with `{{placeholders}}` to fill from data.
31
+ - The document has tracked changes to review, accept, or reject.
32
+ - You need to read reviewers' comments, or add/delete comments.
33
+ - A `.docx` won't open or behaves oddly and you need corruption triage.
34
+ - The document needs a table of contents or "Page X of Y" footers.
35
+ - Not for: `.doc` (legacy), `.odt`, or WYSIWYG layout work.
36
+
37
+ ## Prerequisites
38
+
39
+ - Python 3.10+ with `python-docx` installed:
40
+ `pip install python-docx` (import name is `docx`; lxml comes with it).
41
+ - Comments `add` uses the native API on python-docx >= 1.2 and an XML
42
+ fallback on older versions — both are automatic.
43
+ - For image blocks: the image files must exist locally (PNG/JPEG).
44
+
45
+ ## How to Run
46
+
47
+ All helpers live in `scripts/` next to this file. Run them with the
48
+ `terminal` tool; each supports `--help` and prints JSON to stdout.
49
+
50
+ ```bash
51
+ python scripts/docx_create.py spec.json out.docx
52
+ python scripts/docx_read.py out.docx --text
53
+ python scripts/docx_edit.py replace out.docx --find old --replace new
54
+ python scripts/docx_template.py tpl.docx values.json filled.docx
55
+ python scripts/docx_revisions.py list out.docx
56
+ python scripts/docx_comments.py list out.docx
57
+ python scripts/docx_validate.py out.docx
58
+ ```
59
+
60
+ ## Quick Reference
61
+
62
+ | Task | Command |
63
+ | --- | --- |
64
+ | Create from JSON spec | `docx_create.py spec.json out.docx` |
65
+ | Full text (body+tables+headers/footers) | `docx_read.py f.docx --text` |
66
+ | Heading outline + table shapes | `docx_read.py f.docx --structure` |
67
+ | Styles actually used | `docx_read.py f.docx --styles` |
68
+ | Extract embedded images | `docx_read.py f.docx --images outdir/` |
69
+ | Detect tracked changes/comments | `docx_read.py f.docx --revisions` |
70
+ | Find/replace (formatting kept) | `docx_edit.py replace f.docx --find A --replace B -o out.docx` |
71
+ | Set a table cell | `docx_edit.py set-cell f.docx --table 0 --row 1 --col 2 --text X` |
72
+ | Insert paragraph before index N | `docx_edit.py insert f.docx --index N --text X --style Normal` |
73
+ | Delete paragraph N | `docx_edit.py delete f.docx --index N` |
74
+ | Apply style to paragraph N | `docx_edit.py style f.docx --index N --style "Heading 1"` |
75
+ | Merge equal-format adjacent runs | `docx_edit.py normalize f.docx -o out.docx` |
76
+ | Insert TOC field before para N | `docx_edit.py toc f.docx --index N -o out.docx` |
77
+ | "Page X of Y" footer fields | `docx_edit.py page-numbers f.docx` |
78
+ | Fill `{{tokens}}` | `docx_template.py tpl.docx values.json out.docx --strict` |
79
+ | List revisions (id/author/date/text) | `docx_revisions.py list f.docx` |
80
+ | Accept / reject all revisions | `docx_revisions.py accept-all f.docx -o out.docx` (or `reject-all`) |
81
+ | Accept / reject one revision | `docx_revisions.py accept f.docx --id 3 -o out.docx` |
82
+ | List comments (+anchored text) | `docx_comments.py list f.docx` |
83
+ | Add comment anchored to text | `docx_comments.py add f.docx --target "phrase" --text "note" --author You` |
84
+ | Delete comment by id | `docx_comments.py delete f.docx --id 0` |
85
+ | Health-check the package | `docx_validate.py f.docx` (exit 1 on errors) |
86
+
87
+ ## Procedure
88
+
89
+ 1. **Create.** Write a JSON spec with `write_file`, then run
90
+ `scripts/docx_create.py`. The spec supports: `page` (size + margins in
91
+ mm), `header`/`footer` strings, `footer_page_numbers` (adds a
92
+ "Page X of Y" field footer), `styles` (custom paragraph styles with
93
+ font, size, bold/italic, hex `color`), and `blocks` — `heading`
94
+ (level 1-9), `paragraph` (either `text` or a `runs` list where each run
95
+ may set `bold`/`italic`/`underline`), `bullet_list`, `numbered_list`,
96
+ `table` (`header` row rendered bold, `rows`, optional built-in table
97
+ `style` such as `Table Grid`), `image` (`path`, optional `width_mm`),
98
+ `toc` (Table of Contents field), and `page_break`. The full spec
99
+ format is documented at the top of `scripts/docx_create.py`.
100
+ 2. **Read.** Use `scripts/docx_read.py` with exactly one mode flag.
101
+ `--text` returns body paragraphs, all table cell text, and
102
+ header/footer text as JSON. `--structure` returns the heading outline
103
+ plus paragraph/table/section counts. `--images DIR` copies every file
104
+ under `word/media/` out of the package.
105
+ 3. **Edit.** Use `scripts/docx_edit.py`. `replace` walks body, tables
106
+ (nested included), headers and footers, and preserves run formatting;
107
+ add `--body-only` to skip headers/footers. Pass `-o out.docx` to keep
108
+ the original; omit it to edit in place. Paragraph indices for
109
+ `insert`/`delete`/`style`/`toc` refer to `--structure`/`--text` body
110
+ order. Run `normalize` first on documents that came out of heavy Word
111
+ editing — it merges adjacent runs with identical formatting so later
112
+ find-replace matches reliably.
113
+ 4. **Review revisions.** `docx_revisions.py list` reports every `w:ins`
114
+ and `w:del` (id, author, date, affected text) anywhere in body,
115
+ tables, headers, or footers. `accept-all` / `reject-all` resolve them
116
+ in bulk; `accept`/`reject --id N` handles a single revision. Accept
117
+ keeps insertions and drops deleted text; reject does the reverse.
118
+ 5. **Comments.** `docx_comments.py list` returns each comment's id,
119
+ author, date, body text, and the document text it is anchored to.
120
+ `add --target "some phrase"` anchors a new comment to the first
121
+ occurrence of that phrase (runs are split as needed; formatting is
122
+ preserved). `delete --id N` removes the comment and its markers
123
+ without touching document text.
124
+ 6. **Template.** Put `{{name}}`-style tokens in the document. Run
125
+ `scripts/docx_template.py` with a JSON object of values. Use
126
+ `--strict` to fail when tokens remain unfilled; the JSON output lists
127
+ `filled` counts and `unfilled_tokens` either way.
128
+ 7. **Verify** (always): re-read the output with `--text` or
129
+ `--structure`, and run `docx_validate.py` on anything you produced
130
+ via revision/comment surgery.
131
+
132
+ ## Converting to PDF
133
+
134
+ No script needed. When LibreOffice is installed, convert headlessly:
135
+
136
+ ```bash
137
+ soffice --headless --convert-to pdf --outdir outdir/ file.docx
138
+ ```
139
+
140
+ Check availability first (`command -v soffice || command -v
141
+ libreoffice`). If neither exists, tell the user PDF conversion is
142
+ unavailable in this environment rather than improvising — python-docx
143
+ cannot render PDFs, and layout fidelity requires a real renderer.
144
+
145
+ ## Pitfalls
146
+
147
+ - **Tokens split across runs.** Word often fragments text into several
148
+ runs. The replace helpers collapse matched runs (replacement inherits
149
+ the first run's formatting); running `docx_edit.py normalize` first
150
+ reduces fragmentation for all later edits.
151
+ - **Revision coverage.** `docx_revisions.py` resolves run-level
152
+ insertions and deletions (the overwhelming majority). Paragraph-mark
153
+ and table-row revisions, format-change records, and moves are detected
154
+ by `--revisions` but not auto-resolved — see
155
+ `references/revisions-and-comments.md` and hand those to Word.
156
+ - **Comment threading.** Replies and "resolved" status live in
157
+ `commentsExtended.xml`, which this skill ignores; comments it adds are
158
+ plain top-level comments.
159
+ - **Field results are computed by Word.** `toc`, `page-numbers`, and the
160
+ `toc`/`footer_page_numbers` spec options write *field codes*.
161
+ Word/LibreOffice populates the actual entries and numbers when the
162
+ file is opened (Word may prompt to update fields); python-docx never
163
+ computes them, so placeholder text shows until then.
164
+ - **Validation is a health check, not schema validation.**
165
+ `docx_validate.py` verifies the zip, required parts, relationship
166
+ targets, image magic bytes, and referenced styles. It is NOT XSD
167
+ validation — a file can pass and still contain XML Word dislikes.
168
+ - **Style names must exist.** Applying a style that isn't defined in the
169
+ document raises `KeyError`. Built-ins like `Heading 1`, `List Bullet`,
170
+ `List Number`, `Table Grid` exist in the default template; custom
171
+ styles must be declared in the create spec first.
172
+ - **Numbered lists restart.** `List Number` relies on Word's default
173
+ numbering; separate lists in one document may continue numbering
174
+ instead of restarting. Warn users needing precise multi-list numbering.
175
+ - **Cell writes replace formatting.** `set-cell` uses `cell.text = ...`,
176
+ which resets runs in that cell to plain formatting.
177
+ - **Encoding.** All JSON specs/values files are read as UTF-8 explicitly;
178
+ never rely on locale defaults when writing your own glue code.
179
+ - **Don't unzip-and-sed the XML.** Edit through the scripts (or
180
+ python-docx); raw text substitution in `document.xml` corrupts files
181
+ easily. Use `patch`/`write_file` only for the JSON inputs, never on the
182
+ `.docx` itself.
183
+
184
+ ## Verification
185
+
186
+ - After create/edit/template, run `docx_read.py out.docx --text` and
187
+ check the expected strings appear (and old strings are gone).
188
+ - After accept/reject, `docx_revisions.py list` should return `[]` (or
189
+ only the ids you intentionally left); after comment surgery,
190
+ `docx_comments.py list` should reflect the change and `--text` output
191
+ must be unchanged.
192
+ - `docx_validate.py out.docx` exits 0 with `"ok": true` on a healthy
193
+ package — run it after any revision/comment/field manipulation.
194
+ - For templates run with `--strict`, or check `unfilled_tokens == []`.
195
+ - Structure checks: `--structure` should show the expected heading
196
+ outline and table shapes; `--styles` confirms custom styles applied.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nous Research
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
13
+ all 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
21
+ THE SOFTWARE.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nous Research
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
13
+ all 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
21
+ THE SOFTWARE.
@@ -0,0 +1,88 @@
1
+ # Revisions and Comments — XML details
2
+
3
+ Deep reference for `docx_revisions.py` and `docx_comments.py`. Read this
4
+ when you need to reason about the raw WordprocessingML, extend the
5
+ scripts, or debug an unusual document. Everyday use only needs SKILL.md.
6
+
7
+ ## Tracked changes (w:ins / w:del)
8
+
9
+ Word records run-level tracked changes as wrapper elements inside a
10
+ paragraph (`w:p`), in the `w` namespace
11
+ `http://schemas.openxmlformats.org/wordprocessingml/2006/main`:
12
+
13
+ ```xml
14
+ <w:p>
15
+ <w:r><w:t>Base </w:t></w:r>
16
+ <w:ins w:id="1" w:author="Editor" w:date="2026-01-02T03:04:05Z">
17
+ <w:r><w:t>inserted text</w:t></w:r>
18
+ </w:ins>
19
+ <w:del w:id="2" w:author="Editor" w:date="2026-01-02T03:04:05Z">
20
+ <w:r><w:delText>deleted text</w:delText></w:r>
21
+ </w:del>
22
+ </w:p>
23
+ ```
24
+
25
+ Key facts the script relies on:
26
+
27
+ - Deleted text lives in `w:delText`, not `w:t` — that is why plain text
28
+ extraction naturally shows the "accepted" view (insertions visible,
29
+ deletions hidden).
30
+ - Resolution semantics:
31
+ - accept `w:ins` → unwrap (move child runs up, drop the wrapper)
32
+ - reject `w:ins` → remove the wrapper and its contents
33
+ - accept `w:del` → remove the wrapper and its contents
34
+ - reject `w:del` → rename each `w:delText` to `w:t`, then unwrap
35
+ - Revisions can appear anywhere block content is allowed: body, table
36
+ cells (nested tables too), headers, footers, text boxes. The script
37
+ iterates the body root plus every header/footer part root with
38
+ `root.iter(W+"ins", W+"del")`, which finds them at any depth.
39
+ - `w:id` values are unique per revision *element*, but one logical edit
40
+ session may produce several elements. `accept`/`reject --id` acts on
41
+ exactly the element(s) carrying that id.
42
+
43
+ Not handled by the script (detected by `docx_read.py --revisions` but
44
+ left alone): paragraph-mark revisions (`w:rPr/w:ins` on `w:pPr`), table
45
+ row insertions/deletions (`w:trPr/w:ins`), format-change records
46
+ (`w:rPrChange`, `w:pPrChange`), and moves (`w:moveFrom`/`w:moveTo`).
47
+ Moves are rare from typical editors; if present, treat the file with
48
+ Word itself rather than guessing.
49
+
50
+ ## Comments
51
+
52
+ Three cooperating pieces:
53
+
54
+ 1. **`word/comments.xml`** — one `w:comment` element per comment,
55
+ carrying `w:id`, `w:author`, `w:initials`, `w:date`, and body
56
+ paragraphs. Related from document.xml via the relationship type
57
+ `.../comments` and content type
58
+ `application/vnd...wordprocessingml.comments+xml` (also needs a
59
+ `[Content_Types].xml` override — python-docx's part machinery adds it
60
+ when the part is registered).
61
+ 2. **Range markers in the story** — `w:commentRangeStart w:id="N"`
62
+ before the anchored runs, `w:commentRangeEnd w:id="N"` after them.
63
+ 3. **The reference run** — a `w:r` containing `w:commentReference
64
+ w:id="N"`, placed right after the range end; it ties the balloon to
65
+ the location.
66
+
67
+ `docx_comments.py` behavior:
68
+
69
+ - **list / delete** always work at the XML level, so they handle files
70
+ from any producer. `anchored_text` is reconstructed by walking each
71
+ part root in document order and collecting `w:t` text between the
72
+ start and end markers for each id.
73
+ - **add** first isolates the target text into whole runs. If the match
74
+ starts or ends mid-run, the run is split at the boundary (the split
75
+ copies `w:rPr`, so formatting is preserved). Then:
76
+ - python-docx >= 1.2: the native `document.add_comment(runs, ...)`
77
+ API is used (it creates the comments part, markers, and reference
78
+ run itself).
79
+ - older versions or `--xml`: the script builds `word/comments.xml`,
80
+ registers the part + relationship through the opc layer, and
81
+ inserts the markers/reference manually.
82
+ - Deleting a comment removes the `w:comment` element and all three
83
+ marker kinds for that id; the anchored document text is untouched.
84
+
85
+ Modern Word also writes `commentsExtended.xml` (threading/resolved
86
+ state). The scripts neither read nor produce it: replies and "resolved"
87
+ flags are invisible here, and comments added by this skill are plain
88
+ top-level comments.
@@ -0,0 +1,292 @@
1
+ #!/usr/bin/env python3
2
+ # MIT License. Part of the Hermes docx skill.
3
+ """List, add, and delete comments in a .docx.
4
+
5
+ Subcommands:
6
+ list JSON per comment: id, author, initials, date, text, anchored_text
7
+ add add a comment anchored to the first occurrence of --target
8
+ delete remove a comment (and its range markers) by --id
9
+
10
+ Examples:
11
+ docx_comments.py list report.docx
12
+ docx_comments.py add report.docx --target "Q3 revenue" \
13
+ --text "Needs a source" --author "Reviewer" -o out.docx
14
+ docx_comments.py delete report.docx --id 0 -o out.docx
15
+
16
+ Uses the native python-docx comments API (>= 1.2) when available; falls
17
+ back to building word/comments.xml and the range markers directly for
18
+ older versions (or when --xml is passed). Listing and deletion always
19
+ work at the XML level so they handle documents from any producer.
20
+ """
21
+ from __future__ import annotations
22
+
23
+ import argparse
24
+ import datetime as _dt
25
+ import json
26
+ import sys
27
+ from copy import deepcopy
28
+
29
+ from docx import Document
30
+ from docx.opc.constants import RELATIONSHIP_TYPE as RT
31
+ from lxml import etree
32
+
33
+ from docx_common import iter_part_roots
34
+
35
+ W = "http://schemas.openxmlformats.org/wordprocessingml/2006/main"
36
+ COMMENTS_CT = ("application/vnd.openxmlformats-officedocument"
37
+ ".wordprocessingml.comments+xml")
38
+
39
+
40
+ def q(tag: str) -> str:
41
+ return f"{{{W}}}{tag}"
42
+
43
+
44
+ # ---------------------------------------------------------------- reading
45
+
46
+ def _comments_root(doc):
47
+ """Return the XML root of the comments part, or None."""
48
+ for rel in doc.part.rels.values():
49
+ if rel.reltype == RT.COMMENTS:
50
+ part = rel.target_part
51
+ el = getattr(part, "_element", None)
52
+ if el is not None:
53
+ return el
54
+ from docx.opc.part import XmlPart
55
+ part._element = etree.fromstring(part.blob)
56
+ part.__class__ = XmlPart
57
+ return part._element
58
+ return None
59
+
60
+
61
+ def _anchored_texts(doc) -> dict:
62
+ """Map comment id -> document text between its range markers."""
63
+ anchored: dict[str, list[str]] = {}
64
+ for root in iter_part_roots(doc):
65
+ active: set[str] = set()
66
+ for el in root.iter():
67
+ if el.tag == q("commentRangeStart"):
68
+ cid = el.get(q("id"))
69
+ active.add(cid)
70
+ anchored.setdefault(cid, [])
71
+ elif el.tag == q("commentRangeEnd"):
72
+ active.discard(el.get(q("id")))
73
+ elif el.tag == q("t") and active:
74
+ for cid in active:
75
+ anchored[cid].append(el.text or "")
76
+ return {cid: "".join(parts) for cid, parts in anchored.items()}
77
+
78
+
79
+ def list_comments(doc) -> list:
80
+ root = _comments_root(doc)
81
+ if root is None:
82
+ return []
83
+ anchored = _anchored_texts(doc)
84
+ out = []
85
+ for c in root.iter(q("comment")):
86
+ cid = c.get(q("id"))
87
+ text = "\n".join(
88
+ "".join(t.text or "" for t in p.iter(q("t")))
89
+ for p in c.iter(q("p")))
90
+ out.append({"id": cid, "author": c.get(q("author")),
91
+ "initials": c.get(q("initials")),
92
+ "date": c.get(q("date")), "text": text,
93
+ "anchored_text": anchored.get(cid, "")})
94
+ return out
95
+
96
+
97
+ # ---------------------------------------------------------------- anchoring
98
+
99
+ def _split_run(para, run_el, offset: int):
100
+ """Split a run element at text offset; return the new right-hand run."""
101
+ text = "".join(t.text or "" for t in run_el.iter(q("t")))
102
+ right = deepcopy(run_el)
103
+ run_el.addnext(right)
104
+ for el, s in ((run_el, text[:offset]), (right, text[offset:])):
105
+ for t in list(el.iter(q("t"))):
106
+ el.remove(t)
107
+ t = etree.SubElement(el, q("t"))
108
+ t.text = s
109
+ t.set("{http://www.w3.org/XML/1998/namespace}space", "preserve")
110
+ return right
111
+
112
+
113
+ def find_anchor_runs(doc, target: str):
114
+ """Isolate `target`'s first occurrence into whole runs; return them."""
115
+ from docx_common import iter_all_paragraphs
116
+ for para in iter_all_paragraphs(doc):
117
+ full = para.text
118
+ start = full.find(target)
119
+ if start < 0:
120
+ continue
121
+ end = start + len(target)
122
+ pos = 0
123
+ covered = []
124
+ for run_el in para._p.iter(q("r")):
125
+ rtext = "".join(t.text or "" for t in run_el.iter(q("t")))
126
+ r_start, r_end = pos, pos + len(rtext)
127
+ pos = r_end
128
+ if r_end <= start or r_start >= end:
129
+ continue
130
+ if r_start < start: # split off the left part
131
+ run_el = _split_run(para, run_el, start - r_start)
132
+ r_start = start
133
+ if r_end > end: # split off the right part
134
+ _split_run(para, run_el, end - r_start)
135
+ covered.append(run_el)
136
+ return para, covered
137
+ return None, []
138
+
139
+
140
+ # ---------------------------------------------------------------- adding
141
+
142
+ def _next_id(doc) -> int:
143
+ root = _comments_root(doc)
144
+ if root is None:
145
+ return 0
146
+ ids = [int(c.get(q("id"), "0")) for c in root.iter(q("comment"))
147
+ if c.get(q("id"), "").isdigit()]
148
+ return max(ids) + 1 if ids else 0
149
+
150
+
151
+ def add_comment_native(doc, runs, text, author, initials):
152
+ from docx.text.run import Run
153
+ run_objs = [Run(r, None) for r in runs]
154
+ comment = doc.add_comment(run_objs, text=text, author=author,
155
+ initials=initials or "")
156
+ return str(comment.comment_id)
157
+
158
+
159
+ def add_comment_xml(doc, runs, text, author, initials) -> str:
160
+ cid = str(_next_id(doc))
161
+ root = _comments_root(doc)
162
+ if root is None:
163
+ root = etree.fromstring(
164
+ f'<w:comments xmlns:w="{W}"/>'.encode("utf-8"))
165
+ from docx.opc.packuri import PackURI
166
+ from docx.opc.part import Part
167
+ blob = etree.tostring(root, xml_declaration=True,
168
+ encoding="UTF-8", standalone=True)
169
+ part = Part(PackURI("/word/comments.xml"), COMMENTS_CT, blob,
170
+ doc.part.package)
171
+ doc.part.relate_to(part, RT.COMMENTS)
172
+ # keep a live element on the part so edits reach save()
173
+ part._element = root
174
+ part.blob_ = None
175
+
176
+ def _blob(self=part):
177
+ return etree.tostring(self._element, xml_declaration=True,
178
+ encoding="UTF-8", standalone=True)
179
+ part.__class__ = type("CommentsXmlPart", (Part,),
180
+ {"blob": property(lambda self: _blob(self))})
181
+ now = _dt.datetime.now(_dt.timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
182
+ comment = etree.SubElement(root, q("comment"))
183
+ comment.set(q("id"), cid)
184
+ comment.set(q("author"), author)
185
+ if initials:
186
+ comment.set(q("initials"), initials)
187
+ comment.set(q("date"), now)
188
+ p = etree.SubElement(comment, q("p"))
189
+ r = etree.SubElement(p, q("r"))
190
+ t = etree.SubElement(r, q("t"))
191
+ t.text = text
192
+ # range markers around the anchor runs + reference run after them
193
+ first, last = runs[0], runs[-1]
194
+ start = first.makeelement(q("commentRangeStart"), {q("id"): cid})
195
+ first.addprevious(start)
196
+ end = last.makeelement(q("commentRangeEnd"), {q("id"): cid})
197
+ last.addnext(end)
198
+ ref_run = last.makeelement(q("r"), {})
199
+ ref = etree.SubElement(ref_run, q("commentReference"))
200
+ ref.set(q("id"), cid)
201
+ end.addnext(ref_run)
202
+ return cid
203
+
204
+
205
+ # ---------------------------------------------------------------- deleting
206
+
207
+ def delete_comment(doc, cid: str) -> bool:
208
+ root = _comments_root(doc)
209
+ found = False
210
+ if root is not None:
211
+ for c in list(root.iter(q("comment"))):
212
+ if c.get(q("id")) == cid:
213
+ c.getparent().remove(c)
214
+ found = True
215
+ for part_root in iter_part_roots(doc):
216
+ for tag in ("commentRangeStart", "commentRangeEnd",
217
+ "commentReference"):
218
+ for el in list(part_root.iter(q(tag))):
219
+ if el.get(q("id")) == cid:
220
+ parent = el.getparent()
221
+ # remove the wrapping run for reference marks
222
+ if tag == "commentReference" and parent.tag == q("r"):
223
+ parent.getparent().remove(parent)
224
+ else:
225
+ parent.remove(el)
226
+ found = True
227
+ return found
228
+
229
+
230
+ def main() -> int:
231
+ ap = argparse.ArgumentParser(
232
+ description="List, add, or delete comments in a .docx.")
233
+ sub = ap.add_subparsers(dest="cmd", required=True)
234
+
235
+ p = sub.add_parser("list", help="list comments as JSON")
236
+ p.add_argument("path", help="input .docx")
237
+
238
+ p = sub.add_parser("add", help="add a comment anchored to text")
239
+ p.add_argument("path", help="input .docx")
240
+ p.add_argument("-o", "--output", help="output path (default: in place)")
241
+ p.add_argument("--target", required=True,
242
+ help="anchor: first occurrence of this text")
243
+ p.add_argument("--text", required=True, help="comment body")
244
+ p.add_argument("--author", default="Hermes")
245
+ p.add_argument("--initials", default="")
246
+ p.add_argument("--xml", action="store_true",
247
+ help="force the XML fallback (skip native API)")
248
+
249
+ p = sub.add_parser("delete", help="delete a comment by id")
250
+ p.add_argument("path", help="input .docx")
251
+ p.add_argument("-o", "--output", help="output path (default: in place)")
252
+ p.add_argument("--id", required=True, help="comment id")
253
+
254
+ args = ap.parse_args()
255
+ doc = Document(args.path)
256
+
257
+ if args.cmd == "list":
258
+ print(json.dumps({"ok": True, "comments": list_comments(doc)},
259
+ ensure_ascii=False))
260
+ return 0
261
+
262
+ if args.cmd == "add":
263
+ para, runs = find_anchor_runs(doc, args.target)
264
+ if not runs:
265
+ print(json.dumps({"ok": False,
266
+ "error": f"target not found: {args.target}"}))
267
+ return 1
268
+ native = hasattr(doc, "add_comment") and not args.xml
269
+ if native:
270
+ cid = add_comment_native(doc, runs, args.text, args.author,
271
+ args.initials)
272
+ else:
273
+ cid = add_comment_xml(doc, runs, args.text, args.author,
274
+ args.initials)
275
+ result = {"ok": True, "comment_id": cid,
276
+ "native_api": native, "anchored_to": args.target}
277
+ else: # delete
278
+ if not delete_comment(doc, args.id):
279
+ print(json.dumps({"ok": False,
280
+ "error": f"no comment with id {args.id}"}))
281
+ return 1
282
+ result = {"ok": True, "deleted_id": args.id}
283
+
284
+ out = args.output or args.path
285
+ doc.save(out)
286
+ result["output"] = out
287
+ print(json.dumps(result, ensure_ascii=False))
288
+ return 0
289
+
290
+
291
+ if __name__ == "__main__":
292
+ sys.exit(main())