@prismer/runtime 2.0.7 → 2.2.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/CHANGELOG.md +3631 -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 +135 -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 +257 -0
  44. package/built-in-skills/agent-meta/SKILL.md +53 -0
  45. package/built-in-skills/assets/SKILL.md +133 -0
  46. package/built-in-skills/browser-use/SKILL.md +93 -0
  47. package/built-in-skills/canvas-design/LICENSE.txt +202 -0
  48. package/built-in-skills/canvas-design/SKILL.md +157 -0
  49. package/built-in-skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  50. package/built-in-skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  51. package/built-in-skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  52. package/built-in-skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  53. package/built-in-skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  54. package/built-in-skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  55. package/built-in-skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  56. package/built-in-skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  57. package/built-in-skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  58. package/built-in-skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  59. package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  60. package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  61. package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  62. package/built-in-skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  63. package/built-in-skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  64. package/built-in-skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  65. package/built-in-skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  66. package/built-in-skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  67. package/built-in-skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  68. package/built-in-skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  69. package/built-in-skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  70. package/built-in-skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  71. package/built-in-skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  72. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  73. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  74. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  75. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  76. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  77. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  78. package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  79. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  80. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  81. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  82. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  83. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  84. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  85. package/built-in-skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  86. package/built-in-skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  87. package/built-in-skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  88. package/built-in-skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  89. package/built-in-skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  90. package/built-in-skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  91. package/built-in-skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  92. package/built-in-skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  93. package/built-in-skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  94. package/built-in-skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  95. package/built-in-skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  96. package/built-in-skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  97. package/built-in-skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  98. package/built-in-skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  99. package/built-in-skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  100. package/built-in-skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  101. package/built-in-skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  102. package/built-in-skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  103. package/built-in-skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  104. package/built-in-skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  105. package/built-in-skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  106. package/built-in-skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  107. package/built-in-skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  108. package/built-in-skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  109. package/built-in-skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  110. package/built-in-skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  111. package/built-in-skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  112. package/built-in-skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  113. package/built-in-skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  114. package/built-in-skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  115. package/built-in-skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  116. package/built-in-skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  117. package/built-in-skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  118. package/built-in-skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  119. package/built-in-skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  120. package/built-in-skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  121. package/built-in-skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  122. package/built-in-skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  123. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  124. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  125. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  126. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  127. package/built-in-skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  128. package/built-in-skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  129. package/built-in-skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  130. package/built-in-skills/claim-agent-ownership/SKILL.md +255 -0
  131. package/built-in-skills/claude-api/LICENSE.txt +202 -0
  132. package/built-in-skills/claude-api/SKILL.md +325 -0
  133. package/built-in-skills/claude-api/csharp/claude-api.md +402 -0
  134. package/built-in-skills/claude-api/curl/examples.md +216 -0
  135. package/built-in-skills/claude-api/curl/managed-agents.md +336 -0
  136. package/built-in-skills/claude-api/go/claude-api.md +421 -0
  137. package/built-in-skills/claude-api/go/managed-agents/README.md +561 -0
  138. package/built-in-skills/claude-api/java/claude-api.md +432 -0
  139. package/built-in-skills/claude-api/java/managed-agents/README.md +442 -0
  140. package/built-in-skills/claude-api/php/claude-api.md +375 -0
  141. package/built-in-skills/claude-api/php/managed-agents/README.md +435 -0
  142. package/built-in-skills/claude-api/python/claude-api/README.md +420 -0
  143. package/built-in-skills/claude-api/python/claude-api/batches.md +185 -0
  144. package/built-in-skills/claude-api/python/claude-api/files-api.md +165 -0
  145. package/built-in-skills/claude-api/python/claude-api/streaming.md +162 -0
  146. package/built-in-skills/claude-api/python/claude-api/tool-use.md +590 -0
  147. package/built-in-skills/claude-api/python/managed-agents/README.md +332 -0
  148. package/built-in-skills/claude-api/ruby/claude-api.md +113 -0
  149. package/built-in-skills/claude-api/ruby/managed-agents/README.md +389 -0
  150. package/built-in-skills/claude-api/shared/agent-design.md +101 -0
  151. package/built-in-skills/claude-api/shared/error-codes.md +213 -0
  152. package/built-in-skills/claude-api/shared/live-sources.md +135 -0
  153. package/built-in-skills/claude-api/shared/managed-agents-api-reference.md +378 -0
  154. package/built-in-skills/claude-api/shared/managed-agents-client-patterns.md +209 -0
  155. package/built-in-skills/claude-api/shared/managed-agents-core.md +238 -0
  156. package/built-in-skills/claude-api/shared/managed-agents-environments.md +215 -0
  157. package/built-in-skills/claude-api/shared/managed-agents-events.md +195 -0
  158. package/built-in-skills/claude-api/shared/managed-agents-memory.md +197 -0
  159. package/built-in-skills/claude-api/shared/managed-agents-multiagent.md +99 -0
  160. package/built-in-skills/claude-api/shared/managed-agents-onboarding.md +114 -0
  161. package/built-in-skills/claude-api/shared/managed-agents-outcomes.md +106 -0
  162. package/built-in-skills/claude-api/shared/managed-agents-overview.md +68 -0
  163. package/built-in-skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +173 -0
  164. package/built-in-skills/claude-api/shared/managed-agents-tools.md +321 -0
  165. package/built-in-skills/claude-api/shared/managed-agents-webhooks.md +110 -0
  166. package/built-in-skills/claude-api/shared/model-migration.md +779 -0
  167. package/built-in-skills/claude-api/shared/models.md +121 -0
  168. package/built-in-skills/claude-api/shared/prompt-caching.md +171 -0
  169. package/built-in-skills/claude-api/shared/tool-use-concepts.md +327 -0
  170. package/built-in-skills/claude-api/typescript/claude-api/README.md +333 -0
  171. package/built-in-skills/claude-api/typescript/claude-api/batches.md +106 -0
  172. package/built-in-skills/claude-api/typescript/claude-api/files-api.md +98 -0
  173. package/built-in-skills/claude-api/typescript/claude-api/streaming.md +178 -0
  174. package/built-in-skills/claude-api/typescript/claude-api/tool-use.md +527 -0
  175. package/built-in-skills/claude-api/typescript/managed-agents/README.md +359 -0
  176. package/built-in-skills/codebase-design/DEEPENING.md +37 -0
  177. package/built-in-skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
  178. package/built-in-skills/codebase-design/LICENSE +21 -0
  179. package/built-in-skills/codebase-design/SKILL.md +116 -0
  180. package/built-in-skills/conversation-compaction/SKILL.md +114 -0
  181. package/built-in-skills/council-creator/SKILL.md +426 -0
  182. package/built-in-skills/diagnosing-bugs/LICENSE +21 -0
  183. package/built-in-skills/diagnosing-bugs/SKILL.md +136 -0
  184. package/built-in-skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
  185. package/built-in-skills/doc-coauthoring/SKILL.md +376 -0
  186. package/built-in-skills/document-generation/SKILL.md +105 -0
  187. package/built-in-skills/domain-modeling/ADR-FORMAT.md +47 -0
  188. package/built-in-skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
  189. package/built-in-skills/domain-modeling/LICENSE +21 -0
  190. package/built-in-skills/domain-modeling/SKILL.md +76 -0
  191. package/built-in-skills/frontend-design/LICENSE.txt +177 -0
  192. package/built-in-skills/frontend-design/SKILL.md +43 -0
  193. package/built-in-skills/human-approval/SKILL.md +129 -0
  194. package/built-in-skills/image-generate/SKILL.md +128 -0
  195. package/built-in-skills/image-generate/scripts/generate-and-deliver.mjs +289 -0
  196. package/built-in-skills/ingest/SKILL.md +73 -0
  197. package/built-in-skills/internal-comms/LICENSE.txt +202 -0
  198. package/built-in-skills/internal-comms/SKILL.md +33 -0
  199. package/built-in-skills/internal-comms/examples/3p-updates.md +47 -0
  200. package/built-in-skills/internal-comms/examples/company-newsletter.md +65 -0
  201. package/built-in-skills/internal-comms/examples/faq-answers.md +30 -0
  202. package/built-in-skills/internal-comms/examples/general-comms.md +16 -0
  203. package/built-in-skills/liteparse/SKILL.md +176 -0
  204. package/built-in-skills/mcp-builder/LICENSE.txt +202 -0
  205. package/built-in-skills/mcp-builder/SKILL.md +237 -0
  206. package/built-in-skills/mcp-builder/reference/evaluation.md +602 -0
  207. package/built-in-skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  208. package/built-in-skills/mcp-builder/reference/node_mcp_server.md +970 -0
  209. package/built-in-skills/mcp-builder/reference/python_mcp_server.md +719 -0
  210. package/built-in-skills/mcp-builder/scripts/connections.py +151 -0
  211. package/built-in-skills/mcp-builder/scripts/evaluation.py +373 -0
  212. package/built-in-skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  213. package/built-in-skills/mcp-builder/scripts/requirements.txt +2 -0
  214. package/built-in-skills/memory/SKILL.md +471 -0
  215. package/built-in-skills/memory-dream/SKILL.md +339 -0
  216. package/built-in-skills/office-artifacts/SKILL.md +211 -0
  217. package/built-in-skills/okr/SKILL.md +154 -0
  218. package/built-in-skills/persona/SKILL.md +81 -0
  219. package/built-in-skills/persona-generator/SKILL.md +296 -0
  220. package/built-in-skills/pkf-svg/SKILL.md +253 -0
  221. package/built-in-skills/pkf-writing/SKILL.md +236 -0
  222. package/built-in-skills/prismer-im-collab/SKILL.md +168 -0
  223. package/built-in-skills/proactivity/SKILL.md +84 -0
  224. package/built-in-skills/remotion/SKILL.md +431 -0
  225. package/built-in-skills/role-builder/SKILL.md +203 -0
  226. package/built-in-skills/role-builder/scripts/author-role.mjs +334 -0
  227. package/built-in-skills/role-builder/scripts/ingest-role.mjs +223 -0
  228. package/built-in-skills/role-builder/scripts/instantiate-and-run.mjs +290 -0
  229. package/built-in-skills/role-builder/scripts/operation-harness.mjs +267 -0
  230. package/built-in-skills/skill-authoring/SKILL.md +134 -0
  231. package/built-in-skills/skill-authoring/skill.json +74 -0
  232. package/built-in-skills/skill-builder/SKILL.md +171 -0
  233. package/built-in-skills/skill-builder/scripts/ingest.mjs +265 -0
  234. package/built-in-skills/skill-creator/LICENSE.txt +202 -0
  235. package/built-in-skills/skill-creator/SKILL.md +227 -0
  236. package/built-in-skills/skill-creator/agents/analyzer.md +274 -0
  237. package/built-in-skills/skill-creator/agents/comparator.md +202 -0
  238. package/built-in-skills/skill-creator/agents/grader.md +223 -0
  239. package/built-in-skills/skill-creator/assets/eval_review.html +146 -0
  240. package/built-in-skills/skill-creator/eval-viewer/generate_review.py +471 -0
  241. package/built-in-skills/skill-creator/eval-viewer/viewer.html +1325 -0
  242. package/built-in-skills/skill-creator/references/external-library-import.md +110 -0
  243. package/built-in-skills/skill-creator/references/schemas.md +430 -0
  244. package/built-in-skills/skill-creator/scripts/__init__.py +0 -0
  245. package/built-in-skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  246. package/built-in-skills/skill-creator/scripts/generate_report.py +326 -0
  247. package/built-in-skills/skill-creator/scripts/import-library.mjs +475 -0
  248. package/built-in-skills/skill-creator/scripts/improve_description.py +247 -0
  249. package/built-in-skills/skill-creator/scripts/package_skill.py +136 -0
  250. package/built-in-skills/skill-creator/scripts/quick_validate.py +103 -0
  251. package/built-in-skills/skill-creator/scripts/run_eval.py +310 -0
  252. package/built-in-skills/skill-creator/scripts/run_loop.py +328 -0
  253. package/built-in-skills/skill-creator/scripts/utils.py +47 -0
  254. package/built-in-skills/slack-gif-creator/LICENSE.txt +202 -0
  255. package/built-in-skills/slack-gif-creator/SKILL.md +291 -0
  256. package/built-in-skills/slack-gif-creator/core/easing.py +234 -0
  257. package/built-in-skills/slack-gif-creator/core/frame_composer.py +176 -0
  258. package/built-in-skills/slack-gif-creator/core/gif_builder.py +269 -0
  259. package/built-in-skills/slack-gif-creator/core/validators.py +136 -0
  260. package/built-in-skills/slack-gif-creator/requirements.txt +4 -0
  261. package/built-in-skills/tasks/SKILL.md +413 -0
  262. package/built-in-skills/tdd/LICENSE +21 -0
  263. package/built-in-skills/tdd/SKILL.md +110 -0
  264. package/built-in-skills/tdd/mocking.md +59 -0
  265. package/built-in-skills/tdd/refactoring.md +10 -0
  266. package/built-in-skills/tdd/tests.md +61 -0
  267. package/built-in-skills/team/SKILL.md +77 -0
  268. package/built-in-skills/web-artifacts-builder/LICENSE.txt +202 -0
  269. package/built-in-skills/web-artifacts-builder/SKILL.md +105 -0
  270. package/built-in-skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  271. package/built-in-skills/web-artifacts-builder/scripts/init-artifact.sh +334 -0
  272. package/built-in-skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  273. package/built-in-skills/webapp-testing/LICENSE.txt +202 -0
  274. package/built-in-skills/webapp-testing/SKILL.md +97 -0
  275. package/built-in-skills/webapp-testing/examples/console_logging.py +35 -0
  276. package/built-in-skills/webapp-testing/examples/element_discovery.py +40 -0
  277. package/built-in-skills/webapp-testing/examples/static_html_automation.py +33 -0
  278. package/built-in-skills/webapp-testing/scripts/with_server.py +106 -0
  279. package/built-in-skills/wechat-pay/SKILL.md +59 -0
  280. package/dist/cli.cjs +72577 -16101
  281. package/dist/cli.js +72752 -16232
  282. package/dist/index.cjs +72632 -16024
  283. package/dist/index.d.cts +4956 -640
  284. package/dist/index.d.ts +4956 -640
  285. package/dist/index.js +72564 -15963
  286. package/package.json +39 -6
  287. package/plugins/memory/prismer/__init__.py +1211 -0
  288. package/plugins/memory/prismer/plugin.yaml +8 -0
  289. package/plugins/memory/prismer/tool-schemas.generated.json +249 -0
  290. package/plugins/tools/prismer-recall/__init__.py +282 -0
  291. package/plugins/tools/prismer-recall/plugin.yaml +15 -0
@@ -0,0 +1,128 @@
1
+ ---
2
+ name: image-generate
3
+ scope: persistence
4
+ description: Generate one new image from a text prompt and deliver it once as the current Prismer reply attachment. Use for draw, generate-image, poster, diagram, illustration, or other text-to-image requests. Do not use for editing or merely describing an existing image.
5
+ applies_to: [hermes, claude-code, openclaw, codex]
6
+ requires:
7
+ - assets
8
+ phaseModel:
9
+ defaultPhase: tool_use
10
+ version: 2
11
+ config:
12
+ - key: IMAGE_GEN_MODEL
13
+ type: string
14
+ required: false
15
+ default: null
16
+ bindable: [global, role, agent]
17
+ description: Preferred image-generation model id. The helper discovers the deployment model list and falls back by priority.
18
+ prompt:
19
+ zh: "生成图片时希望默认用哪个模型?"
20
+ en: "Which image model should be used by default?"
21
+ ---
22
+
23
+ # Image Generate
24
+
25
+ Generate and deliver the requested image through the bundled helper. The helper
26
+ owns model discovery, fallback, byte decoding, hashing, file creation, and the
27
+ single `cloud deliver` call. Do not rebuild those steps in Python, curl, or a
28
+ temporary script.
29
+
30
+ ## Run
31
+
32
+ From this skill directory, run:
33
+
34
+ ```bash
35
+ node scripts/generate-and-deliver.mjs \
36
+ --prompt '<complete generation prompt>' \
37
+ --size 1024x1024
38
+ ```
39
+
40
+ Optional flags:
41
+
42
+ - `--model <id>` overrides `IMAGE_GEN_MODEL` for this call.
43
+ - `--output <path>` selects the local PNG/JPEG/WebP filename. Without it, the
44
+ helper writes a content-hashed file under `PRISMER_ARTIFACTS_DIR` (or cwd when
45
+ no dispatch artifacts directory is available).
46
+ - `--size` accepts `256x256`, `512x512`, `1024x1024`, `1792x1024`, or
47
+ `1024x1792`; the selected deployment model must advertise that size.
48
+
49
+ Defaults: square `1024x1024`; portrait `1024x1792` or landscape `1792x1024`
50
+ only when the user asks for that orientation. Generate one image per helper
51
+ invocation.
52
+
53
+ ## Delivery contract
54
+
55
+ The helper ends by running `cloud deliver <file> --json` exactly once and
56
+ consumes that machine output internally. Runtime turns the delivered asset into
57
+ the reply's structured attachment and the chat renderer shows the preview.
58
+
59
+ Read the helper's one-line status before replying:
60
+
61
+ - `[image-generate] delivered` means the asset was uploaded for this reply.
62
+ Reply with a short natural-language caption; model and size may be mentioned.
63
+ - `[image-generate] queued` means the bytes are durable locally but the cloud
64
+ upload is pending reconnection. Say it was generated and queued for upload;
65
+ do not claim it is already attached.
66
+ - `[image-generate] uploaded-unattached` means the cloud stored the image under
67
+ the run archive but no active reply dispatch existed. Say it was generated
68
+ and archived; do not claim it is attached.
69
+ - Do not paste the helper's JSON, assetId object, ContentBlock, base64, data URI,
70
+ signed URL, or local path into the message body.
71
+ - Do not run `cloud deliver`, `cloud file send`, `cloud task attach`, an asset
72
+ upload command, or a multipart request again for the same output.
73
+ - Do not manually construct a structured attachment. Runtime owns that wire
74
+ representation.
75
+
76
+ The generated file may also be observed by Runtime's dispatch-final artifact
77
+ scan. That scan and `cloud deliver` share the same run/task scope and
78
+ content-addressed dedup key; agents must not add another upload path.
79
+
80
+ ## Prompt handling
81
+
82
+ Use the user's requested subject, composition, style, lighting, camera angle,
83
+ palette, text, and exclusions. Expand a vague request only enough to make those
84
+ visual choices explicit; do not silently change the subject or intent.
85
+
86
+ Do not generate privacy-sensitive depictions of identifiable people without
87
+ the user's explicit request. For editing, variation, or inpainting of an
88
+ existing image, use an image-editing capability instead. For reading an
89
+ existing image, use the asset/vision path.
90
+
91
+ ## Helper behavior
92
+
93
+ The bundled script:
94
+
95
+ 1. Resolves `PRISMER_CLOUD_BASE` / `PRISMER_BASE_URL` and `PRISMER_API_KEY`,
96
+ falling back to the Prismer runtime config.
97
+ 2. Discovers available image models, filters them by the requested size before
98
+ generation, and honors a compatible `--model` or `IMAGE_GEN_MODEL` first.
99
+ 3. Retries the next model only for model-not-found, quota/rate-limit, or server
100
+ failures. Prompt rejection and insufficient credits stop immediately.
101
+ 4. Accepts either base64 image bytes or a short-lived image URL, validates the
102
+ resulting PNG/JPEG/WebP bytes, and writes one content-hashed file.
103
+ 5. Delivers that file once through the daemon-aware CLI path, distinguishing a
104
+ completed upload from a durable offline queue receipt.
105
+
106
+ If it fails, report its status/code/message and stop. Do not fabricate an
107
+ assetId, claim that delivery succeeded, or retry a rejected prompt unchanged.
108
+
109
+ ## Examples
110
+
111
+ Square illustration:
112
+
113
+ ```bash
114
+ node scripts/generate-and-deliver.mjs \
115
+ --prompt 'Isometric server room, glowing blue racks, cinematic lighting' \
116
+ --size 1024x1024
117
+ ```
118
+
119
+ Portrait poster with an explicit model preference:
120
+
121
+ ```bash
122
+ node scripts/generate-and-deliver.mjs \
123
+ --prompt 'Minimalist monochrome owl poster, centered subject, clean negative space' \
124
+ --size 1024x1792 \
125
+ --model "$IMAGE_GEN_MODEL"
126
+ ```
127
+
128
+ Successful chat reply example: `图已生成并附在这条消息中。`
@@ -0,0 +1,289 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { execFile } from 'node:child_process';
4
+ import { createHash } from 'node:crypto';
5
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
6
+ import { homedir } from 'node:os';
7
+ import { dirname, extname, join, resolve } from 'node:path';
8
+ import { promisify } from 'node:util';
9
+
10
+ const execFileAsync = promisify(execFile);
11
+ const ALLOWED_SIZES = new Set(['256x256', '512x512', '1024x1024', '1792x1024', '1024x1792']);
12
+
13
+ function usage() {
14
+ return [
15
+ 'Usage: node scripts/generate-and-deliver.mjs --prompt <text> [options]',
16
+ '',
17
+ 'Options:',
18
+ ' --size <WxH> Default: 1024x1024',
19
+ ' --model <id> Default: IMAGE_GEN_MODEL or deployment priority',
20
+ ' --output <path> Default: $PRISMER_ARTIFACTS_DIR/generated-<sha8>.<ext> (or cwd)',
21
+ ' --base-url <url> Default: Prismer runtime env/config',
22
+ ' --help',
23
+ ].join('\n');
24
+ }
25
+
26
+ function parseArgs(argv) {
27
+ const out = { size: '1024x1024' };
28
+ for (let i = 0; i < argv.length; i += 1) {
29
+ const arg = argv[i];
30
+ if (arg === '--help' || arg === '-h') out.help = true;
31
+ else if (arg === '--prompt') out.prompt = argv[++i];
32
+ else if (arg === '--size') out.size = argv[++i];
33
+ else if (arg === '--model') out.model = argv[++i];
34
+ else if (arg === '--output') out.output = argv[++i];
35
+ else if (arg === '--base-url') out.baseUrl = argv[++i];
36
+ else throw new Error(`Unknown argument: ${arg}`);
37
+ }
38
+ if (!out.help && (typeof out.prompt !== 'string' || out.prompt.trim().length === 0)) {
39
+ throw new Error('--prompt is required');
40
+ }
41
+ if (!out.help && out.prompt.length > 4000) throw new Error('--prompt must be at most 4000 characters');
42
+ if (!out.help && !ALLOWED_SIZES.has(out.size)) throw new Error(`Unsupported --size: ${out.size}`);
43
+ return out;
44
+ }
45
+
46
+ async function readRuntimeConfig() {
47
+ const root = process.env.PRISMER_HOME || join(homedir(), '.prismer');
48
+ try {
49
+ const raw = await readFile(join(root, 'config.toml'), 'utf8');
50
+ const value = (keys) => {
51
+ for (const key of keys) {
52
+ const match = raw.match(new RegExp(`^${key}\\s*=\\s*["']([^"']+)["']`, 'm'));
53
+ if (match?.[1]) return match[1];
54
+ }
55
+ return undefined;
56
+ };
57
+ return {
58
+ baseUrl: value(['cloud_api_base', 'base_url']),
59
+ apiKey: value(['api_key']),
60
+ };
61
+ } catch {
62
+ return {};
63
+ }
64
+ }
65
+
66
+ async function resolveAuth(args) {
67
+ const config = await readRuntimeConfig();
68
+ const baseUrl =
69
+ args.baseUrl ||
70
+ process.env.PRISMER_CLOUD_BASE ||
71
+ process.env.PRISMER_BASE_URL ||
72
+ process.env.CLOUD_API_BASE ||
73
+ process.env.PRISMER_CLOUD_API_BASE ||
74
+ config.baseUrl;
75
+ const apiKey = process.env.PRISMER_API_KEY || config.apiKey;
76
+ if (!baseUrl) throw new Error('Missing Prismer cloud base URL (set PRISMER_CLOUD_BASE or configure cloud_api_base)');
77
+ if (!apiKey) throw new Error('Missing PRISMER_API_KEY and no api_key was found in config.toml');
78
+ return { baseUrl: baseUrl.replace(/\/$/, ''), apiKey };
79
+ }
80
+
81
+ async function readJson(response) {
82
+ const text = await response.text();
83
+ if (!text) return {};
84
+ try {
85
+ return JSON.parse(text);
86
+ } catch {
87
+ throw new Error(`Cloud returned non-JSON status=${response.status}: ${text.slice(0, 200)}`);
88
+ }
89
+ }
90
+
91
+ function errorDetail(status, body) {
92
+ const error = body?.error;
93
+ const code = typeof error?.code === 'string' ? error.code : typeof error?.type === 'string' ? error.type : '';
94
+ const message = typeof error?.message === 'string' ? error.message : typeof error === 'string' ? error : `HTTP ${status}`;
95
+ return { status, code, message };
96
+ }
97
+
98
+ function canFallback(error) {
99
+ if (error.status === 402) return false;
100
+ return (
101
+ error.status === 404 ||
102
+ error.status === 429 ||
103
+ error.status >= 500 ||
104
+ ['model_not_found', 'rate_limit', 'rate_limit_exceeded', 'insufficient_quota'].includes(error.code)
105
+ );
106
+ }
107
+
108
+ function normalizeModel(model) {
109
+ return {
110
+ id: model.id,
111
+ sizes: Array.isArray(model.sizes) ? model.sizes.filter((size) => typeof size === 'string') : null,
112
+ };
113
+ }
114
+
115
+ function supportsSize(model, size) {
116
+ return model.sizes === null || model.sizes.length === 0 || model.sizes.includes(size);
117
+ }
118
+
119
+ async function discoverModels(auth, preferred, size) {
120
+ const response = await fetch(`${auth.baseUrl}/api/v1/image-models`, {
121
+ headers: { Authorization: `Bearer ${auth.apiKey}` },
122
+ signal: AbortSignal.timeout(30_000),
123
+ });
124
+ const body = await readJson(response);
125
+ if (!response.ok || !Array.isArray(body.data)) {
126
+ const detail = errorDetail(response.status, body);
127
+ if (preferred) return [{ id: preferred, sizes: null }];
128
+ throw new Error(`Image model discovery failed: ${detail.status} ${detail.code} ${detail.message}`.trim());
129
+ }
130
+ const discovered = body.data
131
+ .filter((model) => model && typeof model.id === 'string')
132
+ .sort((a, b) => Number(a.priority ?? 999) - Number(b.priority ?? 999))
133
+ .map(normalizeModel);
134
+ const preferredModel = preferred ? discovered.find((model) => model.id === preferred) : undefined;
135
+ const candidates = [
136
+ ...(preferred && !preferredModel ? [{ id: preferred, sizes: null }] : []),
137
+ ...(preferredModel ? [preferredModel] : []),
138
+ ...discovered,
139
+ ].filter((model) => supportsSize(model, size));
140
+ const unique = candidates.filter((model, index) => candidates.findIndex((item) => item.id === model.id) === index);
141
+ if (unique.length === 0) {
142
+ const available = discovered
143
+ .map((model) => `${model.id}=[${model.sizes?.join(',') || 'unknown'}]`)
144
+ .join(', ');
145
+ throw new Error(`No image model supports size=${size}; available: ${available || 'none'}`);
146
+ }
147
+ return unique;
148
+ }
149
+
150
+ async function generate(auth, args, models) {
151
+ const failures = [];
152
+ for (const candidate of models) {
153
+ const model = candidate.id;
154
+ const response = await fetch(`${auth.baseUrl}/api/v1/images/generations`, {
155
+ method: 'POST',
156
+ headers: {
157
+ Authorization: `Bearer ${auth.apiKey}`,
158
+ 'Content-Type': 'application/json',
159
+ },
160
+ body: JSON.stringify({
161
+ prompt: args.prompt,
162
+ model,
163
+ size: args.size,
164
+ n: 1,
165
+ response_format: 'b64_json',
166
+ }),
167
+ signal: AbortSignal.timeout(180_000),
168
+ });
169
+ const body = await readJson(response);
170
+ if (!response.ok) {
171
+ const detail = { model, ...errorDetail(response.status, body) };
172
+ failures.push(detail);
173
+ if (canFallback(detail)) {
174
+ process.stderr.write(`[image-generate] model=${model} failed (${detail.status} ${detail.code || 'error'}); trying fallback\n`);
175
+ continue;
176
+ }
177
+ throw new Error(`Image generation failed: model=${model} status=${detail.status} code=${detail.code || '-'} message=${detail.message}`);
178
+ }
179
+ const item = body?.data?.[0];
180
+ if (typeof item?.b64_json === 'string' && item.b64_json.length > 0) {
181
+ return { bytes: Buffer.from(item.b64_json, 'base64'), model };
182
+ }
183
+ if (typeof item?.url === 'string' && item.url.length > 0) {
184
+ return { bytes: await downloadImage(item.url), model };
185
+ }
186
+ throw new Error(`Image generation returned no bytes or URL for model=${model}`);
187
+ }
188
+ throw new Error(
189
+ `All image models failed: ${failures.map((failure) => `${failure.model}:${failure.status}/${failure.code || 'error'}`).join(', ')}`,
190
+ );
191
+ }
192
+
193
+ async function downloadImage(url) {
194
+ if (url.startsWith('data:')) {
195
+ const match = url.match(/^data:[^;,]+;base64,(.+)$/s);
196
+ if (!match) throw new Error('Unsupported image data URL');
197
+ return Buffer.from(match[1], 'base64');
198
+ }
199
+ const response = await fetch(url, { signal: AbortSignal.timeout(60_000) });
200
+ if (!response.ok) throw new Error(`Generated image download failed: HTTP ${response.status}`);
201
+ return Buffer.from(await response.arrayBuffer());
202
+ }
203
+
204
+ function detectImage(bytes) {
205
+ if (bytes.subarray(0, 8).equals(Buffer.from('89504e470d0a1a0a', 'hex'))) return { extension: '.png', mediaType: 'image/png' };
206
+ if (bytes.subarray(0, 3).equals(Buffer.from('ffd8ff', 'hex'))) return { extension: '.jpg', mediaType: 'image/jpeg' };
207
+ if (bytes.subarray(0, 4).toString('ascii') === 'RIFF' && bytes.subarray(8, 12).toString('ascii') === 'WEBP') {
208
+ return { extension: '.webp', mediaType: 'image/webp' };
209
+ }
210
+ throw new Error('Generated bytes are not a supported PNG, JPEG, or WebP image');
211
+ }
212
+
213
+ async function saveImage(args, bytes) {
214
+ const detected = detectImage(bytes);
215
+ const sha = createHash('sha256').update(bytes).digest('hex');
216
+ const generatedName = `generated-${sha.slice(0, 8)}${detected.extension}`;
217
+ const output = args.output
218
+ ? resolve(args.output)
219
+ : resolve(process.env.PRISMER_ARTIFACTS_DIR || process.cwd(), generatedName);
220
+ if (args.output && extname(output).toLowerCase() !== detected.extension) {
221
+ throw new Error(`--output extension must match generated ${detected.mediaType} bytes (${detected.extension})`);
222
+ }
223
+ await mkdir(dirname(output), { recursive: true });
224
+ await writeFile(output, bytes);
225
+ return { output, sha, mediaType: detected.mediaType };
226
+ }
227
+
228
+ async function deliver(output) {
229
+ const cloudBin = process.env.PRISMER_CLOUD_BIN || 'cloud';
230
+ let stdout;
231
+ try {
232
+ ({ stdout } = await execFileAsync(cloudBin, ['deliver', output, '--json'], {
233
+ encoding: 'utf8',
234
+ timeout: 120_000,
235
+ maxBuffer: 1024 * 1024,
236
+ }));
237
+ } catch (error) {
238
+ const detail = typeof error?.stderr === 'string' ? error.stderr.trim() : error.message;
239
+ throw new Error(`cloud deliver failed: ${detail}`);
240
+ }
241
+ let result;
242
+ try {
243
+ result = JSON.parse(stdout);
244
+ } catch {
245
+ throw new Error(`cloud deliver returned non-JSON output: ${stdout.slice(0, 200)}`);
246
+ }
247
+ if (result?.ok !== true) throw new Error(`cloud deliver rejected the image: ${result?.error || 'unknown error'}`);
248
+ if (result.status === 202 || result.queued === true) return { status: 'queued', receipt: result };
249
+ if (typeof result.assetId !== 'string' || result.assetId.length === 0) {
250
+ throw new Error('cloud deliver returned ok without an assetId or queued receipt');
251
+ }
252
+ if (result.ridesReply === false) return { status: 'uploaded-unattached', receipt: result };
253
+ return { status: 'delivered', receipt: result };
254
+ }
255
+
256
+ async function main() {
257
+ const args = parseArgs(process.argv.slice(2));
258
+ if (args.help) {
259
+ process.stdout.write(`${usage()}\n`);
260
+ return;
261
+ }
262
+ const auth = await resolveAuth(args);
263
+ const preferred = args.model || process.env.IMAGE_GEN_MODEL;
264
+ const models = await discoverModels(auth, preferred, args.size);
265
+ if (models.length === 0) throw new Error('No image generation models are available');
266
+ const generated = await generate(auth, args, models);
267
+ const saved = await saveImage(args, generated.bytes);
268
+ const delivery = await deliver(saved.output);
269
+ if (delivery.status === 'queued') {
270
+ process.stdout.write(
271
+ `[image-generate] queued file=${saved.output} model=${generated.model} size=${args.size} sha=${saved.sha.slice(0, 12)}; upload pending reconnect\n`,
272
+ );
273
+ return;
274
+ }
275
+ if (delivery.status === 'uploaded-unattached') {
276
+ process.stdout.write(
277
+ `[image-generate] uploaded-unattached file=${saved.output} assetId=${delivery.receipt.assetId} model=${generated.model} size=${args.size} sha=${saved.sha.slice(0, 12)}; no reply dispatch was available\n`,
278
+ );
279
+ return;
280
+ }
281
+ process.stdout.write(
282
+ `[image-generate] delivered file=${saved.output} assetId=${delivery.receipt.assetId} model=${generated.model} size=${args.size} sha=${saved.sha.slice(0, 12)}\n`,
283
+ );
284
+ }
285
+
286
+ main().catch((error) => {
287
+ process.stderr.write(`[image-generate] ${error instanceof Error ? error.message : String(error)}\n`);
288
+ process.exitCode = 1;
289
+ });
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: ingest
3
+ scope: common
4
+ description: Turn external web URLs into LLM-ready content — load + cache web pages (HQCC compression) and search the web. Use whenever the user gives a URL, asks you to read a webpage, or wants top-K pages on a topic. Executes via the `cloud load` and `cloud search` CLIs. For local document parsing (PDF text + OCR), use the `liteparse` skill instead.
5
+ ---
6
+
7
+ # Ingest
8
+
9
+ Use this skill to **bring external web content into the LLM context window** without copy-pasting raw HTML or burning tokens on uncompressed prose:
10
+
11
+ - **Web content** → `cloud load` / `cloud search` → returns HQCC (a compressed, LLM-optimized form). Cache hits are free.
12
+
13
+ > **Local documents (PDF text extraction + OCR) are handled by the `liteparse` skill**, not here — it's a local-first, zero-network tool with Tesseract + PDFium bundled. `ingest` covers web URLs only.
14
+
15
+ > If your runtime registers the `workspace_web_search` / `web_load` tools (Hermes agents do), prefer them over the CLI — same workspace-billed cloud lane (`/api/context/load`). Never script HTTP via `execute_code`/subprocess for web research.
16
+
17
+ ## When to use
18
+
19
+ - The user pastes a URL or asks "what does this page say".
20
+ - The user asks to research a topic ("AI agent frameworks 2025") — use `search` to fetch top-K relevant pages.
21
+ - A task description contains URLs that need to be resolved into actual content before the assignee can act.
22
+
23
+ > Attached PDFs / images / scans → use the `liteparse` skill (local-first PDF text + OCR), not `ingest`.
24
+
25
+ ## CLI Reference
26
+
27
+ ```bash
28
+ # Single URL → HQCC
29
+ cloud load https://example.com
30
+ cloud load https://example.com --format raw # exact wording / code / tables (more tokens)
31
+
32
+ # Batch (up to 50 URLs)
33
+ cloud load https://a.com https://b.com https://c.com
34
+
35
+ # Search → load (fetch top-K relevant pages)
36
+ cloud search "AI agent frameworks 2025"
37
+ cloud search "topic" -k 10
38
+
39
+ # Pre-save to cache (e.g. content you scraped elsewhere)
40
+ cloud context save https://example.com "compressed content"
41
+ ```
42
+
43
+ ## Workflow
44
+
45
+ ### For web URLs
46
+
47
+ 1. Decide: single URL load? Batch? Or search query?
48
+ 2. Default to `--format hqcc` (compressed). Use `raw` only when **exact wording, code, or tables** are needed.
49
+ 3. Run `cloud load` / `cloud search` and capture: source URLs, titles, cache status, cost.
50
+ 4. Base downstream reasoning **only on the returned content**. If a load failed, say so; don't pretend you read it.
51
+
52
+ ## Operating Rules
53
+
54
+ ### Load / Search
55
+
56
+ - **Prefer cached context.** Don't re-process the same source — the service handles cache lookup automatically; just don't re-issue identical loads in tight loops.
57
+ - Preserve **source URLs** in your notes and citations. The HQCC return retains origin pointers; use them.
58
+ - Don't claim to have read a source until the load **succeeds**. If it fails (404, blocked, timeout), report the failed URL and continue only with clearly stated assumptions or ask for a better source.
59
+ - `--format raw` costs more tokens. Only use when the user needs exact wording (legal text, code snippets, tables that compress badly).
60
+ - For batch loads, the service runs them concurrently up to a limit; you don't need to throttle yourself.
61
+ - For a document / image / scan (not a web page), hand off to the `liteparse` skill — `ingest` does not do OCR or PDF extraction.
62
+
63
+ ## Output reporting
64
+
65
+ After load/search:
66
+ - One-line summary per source: `<title> · <url> · cache_hit | fresh · <cost>`
67
+ - Then proceed with the user's actual question, citing the source by URL.
68
+
69
+ ## Backing capabilities (D22 mapping)
70
+
71
+ Replaces the v1.x built-in skill `context-load`. Local document OCR /
72
+ extraction (formerly `parse-document`, backed by the now-retired
73
+ `parser.prismer.dev` service) moved to the local-first `liteparse` skill.