@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,136 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Validators - Check if GIFs meet Slack's requirements.
4
+
5
+ These validators help ensure your GIFs meet Slack's size and dimension constraints.
6
+ """
7
+
8
+ from pathlib import Path
9
+
10
+
11
+ def validate_gif(
12
+ gif_path: str | Path, is_emoji: bool = True, verbose: bool = True
13
+ ) -> tuple[bool, dict]:
14
+ """
15
+ Validate GIF for Slack (dimensions, size, frame count).
16
+
17
+ Args:
18
+ gif_path: Path to GIF file
19
+ is_emoji: True for emoji (128x128 recommended), False for message GIF
20
+ verbose: Print validation details
21
+
22
+ Returns:
23
+ Tuple of (passes: bool, results: dict with all details)
24
+ """
25
+ from PIL import Image
26
+
27
+ gif_path = Path(gif_path)
28
+
29
+ if not gif_path.exists():
30
+ return False, {"error": f"File not found: {gif_path}"}
31
+
32
+ # Get file size
33
+ size_bytes = gif_path.stat().st_size
34
+ size_kb = size_bytes / 1024
35
+ size_mb = size_kb / 1024
36
+
37
+ # Get dimensions and frame info
38
+ try:
39
+ with Image.open(gif_path) as img:
40
+ width, height = img.size
41
+
42
+ # Count frames
43
+ frame_count = 0
44
+ try:
45
+ while True:
46
+ img.seek(frame_count)
47
+ frame_count += 1
48
+ except EOFError:
49
+ pass
50
+
51
+ # Get duration
52
+ try:
53
+ duration_ms = img.info.get("duration", 100)
54
+ total_duration = (duration_ms * frame_count) / 1000
55
+ fps = frame_count / total_duration if total_duration > 0 else 0
56
+ except:
57
+ total_duration = None
58
+ fps = None
59
+
60
+ except Exception as e:
61
+ return False, {"error": f"Failed to read GIF: {e}"}
62
+
63
+ # Validate dimensions
64
+ if is_emoji:
65
+ optimal = width == height == 128
66
+ acceptable = width == height and 64 <= width <= 128
67
+ dim_pass = acceptable
68
+ else:
69
+ aspect_ratio = (
70
+ max(width, height) / min(width, height)
71
+ if min(width, height) > 0
72
+ else float("inf")
73
+ )
74
+ dim_pass = aspect_ratio <= 2.0 and 320 <= min(width, height) <= 640
75
+
76
+ results = {
77
+ "file": str(gif_path),
78
+ "passes": dim_pass,
79
+ "width": width,
80
+ "height": height,
81
+ "size_kb": size_kb,
82
+ "size_mb": size_mb,
83
+ "frame_count": frame_count,
84
+ "duration_seconds": total_duration,
85
+ "fps": fps,
86
+ "is_emoji": is_emoji,
87
+ "optimal": optimal if is_emoji else None,
88
+ }
89
+
90
+ # Print if verbose
91
+ if verbose:
92
+ print(f"\nValidating {gif_path.name}:")
93
+ print(
94
+ f" Dimensions: {width}x{height}"
95
+ + (
96
+ f" ({'optimal' if optimal else 'acceptable'})"
97
+ if is_emoji and acceptable
98
+ else ""
99
+ )
100
+ )
101
+ print(
102
+ f" Size: {size_kb:.1f} KB"
103
+ + (f" ({size_mb:.2f} MB)" if size_mb >= 1.0 else "")
104
+ )
105
+ print(
106
+ f" Frames: {frame_count}"
107
+ + (f" @ {fps:.1f} fps ({total_duration:.1f}s)" if fps else "")
108
+ )
109
+
110
+ if not dim_pass:
111
+ print(
112
+ f" Note: {'Emoji should be 128x128' if is_emoji else 'Unusual dimensions for Slack'}"
113
+ )
114
+
115
+ if size_mb > 5.0:
116
+ print(f" Note: Large file size - consider fewer frames/colors")
117
+
118
+ return dim_pass, results
119
+
120
+
121
+ def is_slack_ready(
122
+ gif_path: str | Path, is_emoji: bool = True, verbose: bool = True
123
+ ) -> bool:
124
+ """
125
+ Quick check if GIF is ready for Slack.
126
+
127
+ Args:
128
+ gif_path: Path to GIF file
129
+ is_emoji: True for emoji GIF, False for message GIF
130
+ verbose: Print feedback
131
+
132
+ Returns:
133
+ True if dimensions are acceptable
134
+ """
135
+ passes, _ = validate_gif(gif_path, is_emoji, verbose)
136
+ return passes
@@ -0,0 +1,4 @@
1
+ pillow>=10.0.0
2
+ imageio>=2.31.0
3
+ imageio-ffmpeg>=0.4.9
4
+ numpy>=1.24.0
@@ -0,0 +1,413 @@
1
+ ---
2
+ name: tasks
3
+ scope: common
4
+ description: Manage Prismer workspace tasks across the full Kanban lifecycle — create, list, inspect, update, complete, approve, reject, cancel. Use whenever the user asks to add a card to the board, dispatch work to another agent, track progress, or move a task between states. Executes via the `cloud task` CLI.
5
+ ---
6
+
7
+ # Tasks
8
+
9
+ Use this skill to drive the **workspace Kanban** end-to-end. Tasks are durable board items with owner, priority, schedule, and conversation linkage. Every operation goes through the `cloud task` CLI — never reply that a task was created/moved/completed unless the command actually returned a task ID and status.
10
+
11
+ ## ⛔ Hard rules — delegation discipline
12
+
13
+ When the user asks you to **assign / delegate / hand off** work to ANOTHER agent (e.g. "create kanban tasks and assign to @research-agent", "give this to Bob"):
14
+
15
+ 1. **Call `cloud task create --assignee-name <agent>` (or `--assignee-id`).** That is the ONLY legitimate delegation path. A delegation is a **tracked board card that ALSO auto-dispatches**: the card shows on the Kanban (留痕/可观测) *and* the cloud routes it to the target agent's daemon the moment the assignee is set — the target picks it up via its own dispatch loop, no manual "drag to Running" needed. (A `--no-card` pure run exists for internal orchestrator sub-steps that should NOT surface a card.)
16
+ 2. **STOP** as soon as `cloud task create` returns task IDs. Reply to the user with the IDs / titles. **Do not** invoke any other tool to "also do the research yourself" or "make sure it gets done".
17
+ 3. **NEVER use a generic `Task` / subagent / fan-out / parallel-agent tool to silently do the work in-process.** That bypasses the kanban board, the assignee never sees the card, the user's mental model ("an agent is working on this") is violated, and the delegation is fake. If you find yourself reaching for any tool whose name is "Task", "Subagent", "Worker", "Fanout", "ParallelAgents", or anything else that spawns an inline executor — **stop and re-read this section**.
18
+ 4. The phrase **"I've also started working on these"** after a `cloud task create` is a red flag that you violated rule 3. The correct phrase is **"Tasks created and assigned. @research-agent will pick up the cards."**
19
+
20
+ This is non-negotiable. Bypassing it makes the agent ecosystem look broken even when the cards are correct, because the user sees the answer come back too fast and notices that the supposed assignee was never @-mentioned in the conversation.
21
+
22
+ ## ↩️ 结果回流 — 委派后怎么拿到结果(HARD)
23
+
24
+ 委派出去之后,**结果不会自动回流**到你的对话或 run —— 没有回调、没有自动推送。被派的 agent 在它**自己的独立 context** 里执行(不进你当前这条会话、也不会在这里发言),产物落在 **task 卡 + 看板**上。所以:
25
+
26
+ - **要看结果,你必须主动拉**:`cloud task get <taskId>` 读 `status` / `result` / 附件。`status=completed` 才算交付;`review` 等你 approve/reject。
27
+ - **编排节奏**:`cloud task create --assignee-name <peer>` → 拿到 taskId → 反复 `cloud task get <taskId>` 直到 `status` 进终态 → 读产物 → 决定下一步。(有 `cloud task wait <id>` 时优先用它,省手搓轮询。)
28
+ - **「看不到对方回复 ≠ 它没在干」**。被派 agent 沉默是正常的——它在独立 context 里跑,结果只在卡上。**绝不要**因为对话里没动静就自己把活重做一遍(那就是影子执行,违反上面的 Hard rules)。
29
+ - 派完先停、把 taskId 报给用户;之后用 `cloud task get` 跟进,而不是把委派和自办混在一条回复里。
30
+
31
+ ## When to use
32
+
33
+ - The user asks to **create**, **assign**, **schedule**, or **track** work ("add to kanban", "give Bob this task", "remind me to ship X by Friday").
34
+ - You need to **delegate** a concrete deliverable to another agent. **(See ⛔ rules above.)**
35
+ - A long-running objective should persist as a workspace **goal** (`kind=goal`).
36
+ - The user asks about board state ("what's pending", "show me Bob's tasks", "what's blocking the release").
37
+ - A task already on the board needs to be **updated** (priority change, retitle, attach context), **completed**, **approved/rejected** in review, or **cancelled**.
38
+ - The task output is a document / deck / spreadsheet / PDF / report. In that
39
+ case use the `office-artifacts` skill before completion; a prose-only result
40
+ is not enough for file-deliverable tasks.
41
+
42
+ ## Lifecycle
43
+
44
+ ```
45
+ pending → assigned → running → review → completed | failed | cancelled
46
+ ↑ ↓
47
+ └──── blocked ────────┤ (unblock returns to assigned)
48
+
49
+ awaiting_approval
50
+
51
+ approved / rejected (back to review)
52
+ ```
53
+
54
+ Nine-state lifecycle: `pending / assigned / running / review / blocked / awaiting_approval / completed / failed / cancelled`. `awaiting_approval` cards stay visible on the review column — never treat them as gone. `blocked` has its own column.
55
+
56
+ A `work_item` shows on the Kanban; a `goal` shows on the Goals lane. Filter at list time with `--kind work_item,goal` if you only want board projection. A **delegation** (`cloud task create --assignee-name …`) is a `work_item` board card that also auto-dispatches (`dispatchPolicy=on-assign`) — it is BOTH visible on the board AND executing. A `work_item` you create for a human (or to drive yourself via the UI) stays `manual`: it only runs on an explicit drag-to-Running. **Only globally-visible formal tasks are board cards** — a chat `@mention` is a session-internal run, NOT a board card, and never produces one.
57
+
58
+ ## Permission model (v2.0 — `release 200` state machine)
59
+
60
+ The platform enforces a **trust-tier × transition matrix** (see `docs/release200/15-task-state-machine-and-kanban.md` §5.2). Each transition's `allowed` actors are part of the contract; calling outside the matrix returns `403 forbidden` with `{ actorTier, requiredTiers }`, and impossible transitions return `409 invalid-transition` with `{ allowedFromHere }`.
61
+
62
+ | Action | Permitted by |
63
+ |---|---|
64
+ | `create`, retitle, change priority, **reassign**, `cancel`, `approve`, `reject` | **creator** / orchestrator / admin |
65
+ | `claim`, update `--progress` / `--status-message`, `complete` (assignee submits to review), `fail` | **assignee** |
66
+ | **`review → completed` (approve)** | **creator** / orchestrator / admin — **never the assignee** (no self-approval) |
67
+
68
+ If you create a task and intend to drive it yourself (no other agent involved), **self-assign first**: `cloud task update <taskId> --assignee-id <your-imUserId>`. Otherwise `complete` and `update --progress` will both 403.
69
+
70
+ **v2.0 endpoint canonicalisation**: every kanban operation (`/complete`, `/approve`, `/reject`, `/cancel`, drag-to-column, restore-from-cancelled, blocked self-report) is forwarded internally to `POST /api/im/tasks/:id/transition`. The CLI verbs below are stable; the legacy `POST /tasks/:id/{complete,approve,reject,cancel,fail}` endpoints carry a `Deprecation` header but stay functional until **2026-09-01**. After that date, scripts hitting the API directly must migrate to `/transition`; CLI users are insulated.
71
+
72
+ ## CLI Reference
73
+
74
+ ### Create
75
+
76
+ ```bash
77
+ # Standard board card
78
+ cloud task create \
79
+ --title "Review PR #42" \
80
+ --description "Security check for the auth refactor; ship blocker." \
81
+ --capability code-review \
82
+ --priority high \
83
+ --assignee-id <imUserId> # or --assignee-name "@alice"
84
+ --conversation-id <convId> # pin to the session you're in
85
+
86
+ # Long-running objective (goal lane, not Kanban)
87
+ cloud task create --kind goal --title "Reduce p95 latency to <300ms" --priority high
88
+
89
+ # Scheduled / recurring
90
+ cloud task create --title "Daily 9am report" --schedule-cron "0 9 * * *"
91
+ cloud task create --title "Run in 2h" --schedule-at "2026-05-19T16:00:00Z"
92
+
93
+ # Marketplace task with credit escrow
94
+ cloud task create --title "Scan deps" --reward 10
95
+ ```
96
+
97
+ ### Read
98
+
99
+ ```bash
100
+ cloud task list # YOUR cards (created by or assigned to you)
101
+ cloud task list --mine # only tasks assigned to YOU (excludes ones you created)
102
+ cloud task list --status pending # your cards, filtered by status
103
+ cloud task list --kind work_item,goal # your cards, board projection only
104
+ cloud task list --conversation-id <convId> # your cards pinned to a conversation
105
+ cloud task get <taskId> # full detail + logs + runs (a card you have access to)
106
+ ```
107
+
108
+ > ⚠️ **`cloud task list` is scoped to YOU.** As a regular (executor) agent you
109
+ > only ever see cards **you created or that are assigned to you** — the server
110
+ > enforces this on EVERY filter (you cannot widen it with `--kind` / `--status`
111
+ > / `--view`). You **cannot enumerate** other roles' cards. This is deliberate:
112
+ > if you can't see someone else's task, you can't accidentally poach it.
113
+ >
114
+ > - `--assignee-id <other>` / `--creator-id <other>` for someone who isn't you → **403**.
115
+ > - The **workspace orchestrator** and **humans** see the whole board (they coordinate / drive the UI). If you are NOT the orchestrator and need to know what another role is doing, **@ them or @ the orchestrator** — don't try to list their cards.
116
+
117
+ ### 🚦 Act only on YOUR cards (HARD)
118
+
119
+ You only see your own cards, and even within them, seeing a card does NOT always mean it's yours to *transition*.
120
+
121
+ - **Only `claim` / `start` / `update --progress` / `complete` a task whose `assignee` is YOU.** Check the card's `assignee` against your own identity (`agent_im_user_id` / `agent_username` in `<execution_context>`) before acting.
122
+ - A card you can see but whose assignee is **another role / agent** (e.g. it appears because you *created* it for someone else) is **read-only** for you — do NOT claim it, do NOT start working it. The permission layer 403s the transition, and the real failure is social: you've told the room you're doing someone else's work.
123
+ - If you think a card should move (wrong assignee, stalled, mis-prioritised), **@ the orchestrator / task owner** and say why — don't poach it. Reassignment is the creator/orchestrator's call.
124
+ - The **orchestrator** role legitimately reads the full board to coordinate. Reading ≠ owning.
125
+
126
+ ### Update + transition
127
+
128
+ ```bash
129
+ cloud task update <taskId> --title "Updated title" --priority urgent
130
+ cloud task update <taskId> --progress 0.5 --status-message "halfway done"
131
+ cloud task claim <taskId> # take an unassigned task
132
+ cloud task complete <taskId> --result "LGTM, merged into main"
133
+ cloud task fail <taskId> --error "Build broke on CI"
134
+ cloud task approve <taskId> # accept a review-state result
135
+ cloud task reject <taskId> --reason "missing test coverage on edge case"
136
+ cloud task cancel <taskId> # withdraw before terminal state
137
+ ```
138
+
139
+ ## Operating Rules
140
+
141
+ ### Create
142
+
143
+ - **Never create an unscoped task.** A workspace is required — use `PRISMER_WORKSPACE_ID` from the runtime when present, else fail loudly and ask.
144
+ - **Never create a `work_item` without a concrete assignee.** Pass `--assignee-id` or `--assignee-name` that resolves to a single visible agent. Vague routing (no assignee → "someone will pick it up") leaks tasks into limbo.
145
+ - Avoid vague titles like "help with this". The title must name an **observable deliverable**.
146
+ - Put acceptance criteria + constraints + handoff context in `--description`, not in chat. The description is the source of truth the assignee reads.
147
+ - Don't use task creation to **hide uncertainty**. If ownership or scope is unclear, ask the user first.
148
+
149
+ ### Approve / Reject / Complete
150
+
151
+ - Read the task and its result **before** approving (`cloud task get`). The only exception is when the user just supplied explicit approval in this turn.
152
+ - Don't approve your own incomplete work to bypass review.
153
+ - Don't approve when the user asked for changes or raised unresolved concerns — use `task reject --reason` with a concrete actionable reason.
154
+ - Don't `task complete` if acceptance criteria are unmet. If human review is the gate, leave it in `review` and request approval instead.
155
+ - Never reject without a reason. Keep reasons factual and actionable (point to the missing artifact or failing criterion).
156
+ - `task cancel` is for **withdrawal of intent** (the work is no longer wanted). `task reject` is for **review failure** (the result is wrong). `task fail` is for **execution failure** (it tried and broke). Don't mix them.
157
+ - For file deliverables, do not complete until the generated file has been
158
+ placed in `$PRISMER_ARTIFACTS_DIR` or uploaded via `cloud asset upload --task-id`.
159
+ The Kanban card's artifact chip depends on the task-linked asset upload.
160
+
161
+ ### Update
162
+
163
+ - Don't send an empty update.
164
+ - Don't force `--status completed` here — use `task complete` so the lifecycle hook fires (result summary, escrow release, board move).
165
+ - `--progress` is a float 0.0–1.0 with real meaning. Don't fake precision; agents reading the board treat `0.73` as a measured ratio.
166
+
167
+ ### Read
168
+
169
+ - Don't infer task completion from `task list` summaries alone — `get` the task to confirm status.
170
+ - When no tasks match, report that directly. Never fabricate board state.
171
+ - Respect visibility — the service already scopes by workspace + ACL; don't try to query around it.
172
+
173
+ ## SPEC discipline (you as task owner)
174
+
175
+ A task without a SPEC is a task that will drift. Before assigning a non-trivial task
176
+ (>15 min of agent work or any cross-agent handoff), write a SPEC.md.
177
+
178
+ ### Write SPEC.md when
179
+
180
+ - task is delegated to another agent (cross-agent handoff)
181
+ - task involves >15 min of work
182
+ - task touches a deliverable the user will see / use
183
+ - you yourself want a contract to refer back to later
184
+
185
+ ### SPEC.md structure (4 sections — all optional but Goal is highly recommended)
186
+
187
+ ## Goal
188
+ one-sentence terminal state (what does "done" look like?)
189
+
190
+ ## Background
191
+ why this task exists; constraints from prior work
192
+
193
+ ## Constraints
194
+ bullet list — what must not break; what must be preserved
195
+
196
+ ## Out of scope
197
+ bullet list — what this task explicitly does NOT cover
198
+
199
+ ### Write via
200
+
201
+ cloud task spec-set <taskId> --file SPEC.md
202
+ cloud task spec-set <taskId> --markdown "..."
203
+ cloud task spec-show <taskId>
204
+
205
+ ### Anti-patterns
206
+
207
+ - Don't write SPEC after assignment — owner authoring before handoff IS the contract
208
+ - Don't change SPEC silently after status=running — owner must surface change; assignee must re-confirm
209
+
210
+ ## TODO discipline (you as task assignee)
211
+
212
+ When you receive an assigned task, before executing, decompose the SPEC into a TODO list.
213
+ The TODO list is your visible plan — the orchestrator (creator agent / human) watches
214
+ it for drift and intervenes if your plan stops matching the spec.
215
+
216
+ ### Write TODO.md when
217
+
218
+ - you are the assignee on any task with capability not in ('trivial', 'one-shot')
219
+ - you are about to start work (TODO before code)
220
+ - you discover new sub-steps mid-execution — append rather than silently expand
221
+
222
+ ### TODO.md structure
223
+
224
+ # TODO — <one-line restatement of objective>
225
+
226
+ - [ ] step 1 (small, observable)
227
+ - [ ] step 2
228
+ - [ ] sub-step 2a (depth ≤ 3)
229
+ - [ ] sub-step 2b
230
+ - [ ] step 3
231
+
232
+ 3–15 items is a healthy range. <3 means you didn't decompose. >15 means task should split.
233
+
234
+ ### Tick discipline
235
+
236
+ - Tick `- [ ] → - [x]` IMMEDIATELY when a step finishes (tick first, then move on)
237
+ - Do NOT tick speculatively — only after the step is verifiably done
238
+ - Each tick emits SSE → orchestrator sees progress; this is your observability layer
239
+ - If you skip a step (no longer needed) — remove it with a one-line note, don't leave unticked
240
+
241
+ ### Write via
242
+
243
+ cloud task todo-add <taskId> "step text"
244
+ cloud task todo-done <taskId> <idx>
245
+ cloud task todo-uncheck <taskId> <idx>
246
+ cloud task todo-show <taskId>
247
+
248
+ ### Anti-patterns
249
+
250
+ - Don't execute without a TODO.md (runaway risk)
251
+ - Don't tick the whole list at once at the end (orchestrator loses observability window)
252
+ - Don't silently expand TODO with steps that diverge from SPEC — surface to creator first
253
+
254
+ ## Self-check & verification
255
+
256
+ A task is NOT done until acceptance criteria pass. There are 4 verify modes; you
257
+ interact with them differently.
258
+
259
+ ### 4 verify modes (cloud does NOT pre-bake methods)
260
+
261
+ - `qualitative` — verifier agent picks a method at runtime (Playwright / LLM-judge / human eye).
262
+ - `quantitative` — verifier agent runs a real measurement against a threshold.
263
+ - `agent-self-check` — assignee self-evaluates before status=review.
264
+ - `manual` — human reviewer ticks the box in ApprovalCard.
265
+
266
+ Cloud does NOT ship a Playwright runner / endpoint-status checker / benchmark
267
+ harness. You (the agent) own the implementation. Use any tool in your skills.
268
+
269
+ ### Before setting status=review (as assignee)
270
+
271
+ You MUST run `cloud task verify <taskId>`. This:
272
+
273
+ 1. Lists all criteria with verifyMode='agent-self-check'
274
+ 2. For each, you read the expectation and self-assess (be honest — if you can't
275
+ verify, mark failed and turn the task to status=blocked instead of review)
276
+ 3. CLI exits 0 only if all self-check criteria pass; non-zero blocks review
277
+
278
+ You MUST also confirm:
279
+
280
+ - TODO.md progressPct ≥ 80% (cloud enforces; <80% triggers confirm modal)
281
+ - All evidence assets attached (`cloud task attach artifacts/foo.png` then add to
282
+ criterion.evidenceRefs via `cloud task verify-criterion ... --evidence asset:<id>`)
283
+
284
+ ### As a verifier agent (when you receive task.verify.requested)
285
+
286
+ You will receive a task dispatch message:
287
+
288
+ type: task.verify.requested
289
+ taskId: ...
290
+ criterionId: ...
291
+ expectation: "<markdown>"
292
+ spec: "<SPEC.md content>"
293
+ evidenceRefs: [...]
294
+
295
+ Your job is to:
296
+
297
+ 1. Read SPEC + criterion.expectation + existing evidence
298
+ 2. **Decide at runtime** what method to use:
299
+ - qualitative → Playwright screenshot, LLM-judge, human eyeball (escalate if you can't judge)
300
+ - quantitative → run a benchmark, GET a metric endpoint, run pytest — pick the right tool
301
+ 3. Execute the method; collect evidence (screenshots, metric values, logs)
302
+ 4. Attach evidence as task-bound assets: `cloud task attach <file>`
303
+ 5. Report outcome:
304
+
305
+ cloud task verify-criterion <tid> <cid> \
306
+ --outcome passed|failed \
307
+ --note "Method: Playwright spec checkout.spec.ts; ran 5 iterations; saw 28.9s p95. Steps: ..." \
308
+ --evidence asset:<id>
309
+
310
+ The `note` MUST include enough detail that a reader can re-run your method:
311
+
312
+ - what tool / command you used
313
+ - key parameters
314
+ - the actual measurement / observation
315
+ - (optional) why you chose this method
316
+
317
+ ### Anti-patterns
318
+
319
+ - DO NOT mark `outcome=passed` without actually running a verification (false positive)
320
+ - DO NOT skip evidence attachment (note alone is not auditable)
321
+ - DO NOT use one fixed method blindly — pick the right tool for the criterion
322
+ - DO NOT escalate to manual without first trying — verifier-agent is the default
323
+ - DO NOT pretend cloud has built-in playwright/benchmark runners — you run them locally
324
+
325
+ ### CLI quick reference
326
+
327
+ ```bash
328
+ # SPEC (owner)
329
+ cloud task spec-set <taskId> --file SPEC.md
330
+ cloud task spec-show <taskId>
331
+
332
+ # TODO (assignee)
333
+ cloud task todo-show <taskId>
334
+ cloud task todo-add <taskId> "step text"
335
+ cloud task todo-done <taskId> <idx>
336
+ cloud task todo-uncheck <taskId> <idx>
337
+
338
+ # Acceptance criteria
339
+ cloud task acceptance <taskId> # show all criteria + status
340
+ cloud task add-criterion <taskId> \
341
+ --mode qualitative --expectation "..." \
342
+ --verifier-agent agent_xxx # default = creator
343
+ cloud task verify <taskId> # assignee self-check
344
+ cloud task verify-criterion <taskId> <cid> \
345
+ --outcome passed --note "..." --evidence asset:<id> # verifier agent report
346
+ cloud task apply-template <taskId> --template <id> # adopt a template
347
+ ```
348
+
349
+ ## 产物输出(user-deliverable)
350
+
351
+ **文件交付是显式的**(release202/09 P2 起)。把文件写进 `artifacts/` **不会**自动交付——`artifacts-watcher` auto-scan 默认 **OFF**(`2f3e901b` retire watcher auto-scan)。仅当 carrier 决策是文件时,才使用 `cloud deliver` / `cloud task attach` 显式交付该文件。
352
+
353
+ ```bash
354
+ # 1) 把最终产物写到 artifacts/(draft / 中间文件走 scratch,不会被交付)
355
+ echo "..." > "${PRISMER_ARTIFACTS_DIR}/my-report.md"
356
+
357
+ # 2) 显式交付(按目标二选一)——传【绝对路径】:
358
+ cloud deliver "${PRISMER_ARTIFACTS_DIR}/my-report.md" # 动作 A:挂到你「当前这条回复」上
359
+ cloud task attach "${PRISMER_ARTIFACTS_DIR}/my-report.md" # 动作 ③:挂到「看板任务卡」(mode:task-attach)
360
+ ```
361
+
362
+ > ⚠️ **写进 `artifacts/` ≠ 交付**。没有 auto-scan。每个文件都要显式 `cloud deliver`(聊天回复产物)或 `cloud task attach`(任务卡产物),否则用户收不到。`artifacts/` 放最终交付物,draft / 中间文件走 `scratch/`。
363
+
364
+ > **常态(含 hermes):直接 `cloud deliver <abs-path>` 即可**——hermes 虽没有 per-dispatch env id(`PRISMER_RUN_ID` / `PRISMER_CONVERSATION_ID` unset),但 daemon(release203/15c)会按你的 agent 身份自动关联你**当前**的 dispatch,补全 run/conversation。spawn 适配器(claude-code / codex)env 已注入,同样无需 flag。
365
+ > **仅以下情形才手传 flag**:(a) 你要对**另一个**(非当前)dispatch 交付;(b) daemon 返回 **409 歧义**(同 agent 多个并发 dispatch 无法区分)。这时才从 `<execution_context>` 抄 `<run_id>` / `<conversation_id>`:
366
+ > ```bash
367
+ > cloud deliver "<abs-path>" --run-id "<run_id>" --conversation-id "<conversation_id>"
368
+ > ```
369
+ > 详见 `office-artifacts` SKILL(唯一交付契约)。
370
+
371
+ **Workflow**:
372
+
373
+ 1. 中间脚本 / draft 写到 `${PRISMER_SCRATCH_DIR}/`(scratch,不进 Asset、不交付)
374
+ 2. 最终产物写到 `${PRISMER_ARTIFACTS_DIR}/`(agent process env; physically `${TASK_WORKDIR}/artifacts/`)
375
+ 3. **显式交付每个产物**:聊天回复用 `cloud deliver <abs-path>`(动作 A),任务卡用 `cloud task attach <abs-path>`(动作 ③)。命令成功会打印 `assetId`
376
+
377
+ ### Carrier 选择与显式交付
378
+
379
+ carrier 优先级是:**用户明确要求 > Runtime carrier directive > 已选内容 skill > task 默认**。`tasks` skill 只管任务与回执,不擅自把内容改成 Markdown 文件、Asset 或 Memory Page。
380
+
381
+ 1. **inline PKF**:按 Runtime carrier directive 返回单一 inline PKF ContentBlock / sentinel。不写文件,不调 `cloud deliver` / `cloud task attach`,不并行产出 `.md` / `.html` / `.css` / `.js`。
382
+ 2. **用户明确要求文件**:按用户指定格式或内容 skill 决定的格式写入 `${PRISMER_ARTIFACTS_DIR}/`,再显式调 `cloud deliver` / `cloud task attach`。不要另造 Markdown 投影。
383
+ 3. **Asset / Memory**:只有用户要求或 Runtime carrier directive 明确选中时才 materialize;必须以服务端返回的 id / path / version / hash 以及读回结果作为权威证据。
384
+ 4. **任务 evidence**:截图、benchmark JSON、日志等原始证据可作为明确文件附件显式 `cloud task attach`;它们不会改变主交付物的 carrier。
385
+
386
+ **禁止**:
387
+
388
+ - inline 选中后并行生成 Markdown/HTML/CSS/JS 或附件;
389
+ - 把 draft / 中间产物放进 `artifacts/`(draft 走 `scratch/`);
390
+ - 把“写进 `artifacts/`”当成已交付——auto-scan 是 OFF,文件 carrier 必须有显式 receipt;
391
+ - 用 role 模板或 task 流程覆盖 Runtime carrier directive。
392
+
393
+ **Self-check checkpoint**:
394
+
395
+ `cloud task update --status review` 内嵌调用本地 daemon `/v1/checkpoints/pre_status_change`。该 hook 比较 `artifacts/` 内文件 sha256 与已 attach Asset.contentHash,若 diff 非空:
396
+
397
+ - exit code = 12
398
+ - stderr 列出未 attach 的文件路径 + hash + size
399
+ - agent context 看到 stderr 自行 decide → 补 attach 或加 `--skip-checkpoint`
400
+
401
+ **这不是 mandate retry 机制** —— 是给 agent 自己看的 self-check,不污染 user session 也不发 IMMessage。
402
+
403
+ ## Output reporting
404
+
405
+ After any state-changing operation, **echo back** the task ID and the **status the service returned** (not the status you expected). Example:
406
+
407
+ > Created task `cm5gxyz...` in `assigned` state, pinned to conversation `cm5conv...`, assigned to `@alice`.
408
+
409
+ If the CLI exits non-zero, surface the error code and message verbatim. **Never fabricate a task ID** — if you didn't run the command or it failed, say so.
410
+
411
+ ## Backing capabilities (D22 mapping)
412
+
413
+ Replaces these v1.x built-in skills: `task-create`, `task-list`, `task-get`, `task-update`, `task-complete`, `task-approve`, `task-reject`, `task-cancel`.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Matt Pocock
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.