@prismer/runtime 2.0.8 → 2.2.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4004 -0
- package/README.md +34 -12
- package/apc/skills/FIELD-DICTIONARY.md +111 -0
- package/apc/skills/bug-reproduce/SKILL.md +150 -0
- package/apc/skills/bug-reproduce/skill.json +96 -0
- package/apc/skills/code-review/SKILL.md +198 -0
- package/apc/skills/code-review/skill.json +124 -0
- package/apc/skills/design-review/SKILL.md +122 -0
- package/apc/skills/design-review/skill.json +88 -0
- package/apc/skills/doc-sync/SKILL.md +168 -0
- package/apc/skills/doc-sync/skill.json +81 -0
- package/apc/skills/env-doctor/SKILL.md +194 -0
- package/apc/skills/env-doctor/skill.json +209 -0
- package/apc/skills/git-ops/SKILL.md +189 -0
- package/apc/skills/git-ops/skill.json +94 -0
- package/apc/skills/impact-trace/SKILL.md +168 -0
- package/apc/skills/impact-trace/skill.json +104 -0
- package/apc/skills/observability/SKILL.md +195 -0
- package/apc/skills/observability/skill.json +116 -0
- package/apc/skills/release-db-config-sync/SKILL.md +186 -0
- package/apc/skills/release-db-config-sync/skill.json +109 -0
- package/apc/skills/release-ota-promote/SKILL.md +195 -0
- package/apc/skills/release-ota-promote/skill.json +176 -0
- package/apc/skills/release-preflight/SKILL.md +174 -0
- package/apc/skills/release-preflight/skill.json +175 -0
- package/apc/skills/release-rollback/SKILL.md +214 -0
- package/apc/skills/release-rollback/skill.json +230 -0
- package/apc/skills/release-tag/SKILL.md +194 -0
- package/apc/skills/release-tag/skill.json +94 -0
- package/apc/skills/releasing-prod/SKILL.md +49 -0
- package/apc/skills/releasing-test/SKILL.md +144 -0
- package/apc/skills/sdk-release/SKILL.md +200 -0
- package/apc/skills/spec-intake/SKILL.md +169 -0
- package/apc/skills/spec-intake/skill.json +93 -0
- package/apc/skills/test-result-feedback/SKILL.md +239 -0
- package/apc/skills/test-result-feedback/skill.json +193 -0
- package/apc/skills/test-runner/SKILL.md +169 -0
- package/apc/skills/test-runner/skill.json +103 -0
- package/apc/skills/ui-align/SKILL.md +209 -0
- package/apc/skills/ui-align/skill.json +114 -0
- package/apc/skills/ui-canvas/SKILL.md +148 -0
- package/apc/skills/ui-canvas/skill.json +127 -0
- package/built-in-skills/agent-coordination/SKILL.md +77 -38
- package/built-in-skills/agent-meta/SKILL.md +12 -0
- package/built-in-skills/assets/SKILL.md +9 -7
- package/built-in-skills/browser-use/SKILL.md +93 -0
- package/built-in-skills/canvas-design/SKILL.md +4 -3
- package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/InstrumentSerif-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/LICENSE-SOURCES.md +16 -0
- package/built-in-skills/claim-agent-ownership/SKILL.md +10 -5
- package/built-in-skills/claude-api/SKILL.md +2 -1
- package/built-in-skills/claude-api/python/claude-api/README.md +2 -2
- package/built-in-skills/claude-api/python/claude-api/tool-use.md +9 -5
- package/built-in-skills/claude-api/python/managed-agents/README.md +11 -1
- package/built-in-skills/claude-api/shared/error-codes.md +4 -4
- package/built-in-skills/claude-api/shared/managed-agents-client-patterns.md +4 -2
- package/built-in-skills/claude-api/shared/managed-agents-core.md +1 -2
- package/built-in-skills/claude-api/shared/managed-agents-events.md +41 -22
- package/built-in-skills/claude-api/shared/managed-agents-multiagent.md +5 -3
- package/built-in-skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +1 -1
- package/built-in-skills/claude-api/shared/managed-agents-tools.md +2 -3
- package/built-in-skills/claude-api/shared/model-migration.md +3 -3
- package/built-in-skills/claude-api/shared/models.md +1 -1
- package/built-in-skills/claude-api/typescript/claude-api/batches.md +1 -1
- package/built-in-skills/claude-api/typescript/claude-api/files-api.md +3 -1
- package/built-in-skills/claude-api/typescript/claude-api/tool-use.md +8 -2
- package/built-in-skills/claude-api/typescript/managed-agents/README.md +8 -2
- package/built-in-skills/codebase-design/DEEPENING.md +37 -0
- package/built-in-skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
- package/built-in-skills/codebase-design/LICENSE +21 -0
- package/built-in-skills/codebase-design/SKILL.md +130 -0
- package/built-in-skills/codebase-design/references/requesting-code-review/GUIDE.md +291 -0
- package/built-in-skills/codebase-design/references/requesting-code-review/LICENSE +21 -0
- package/built-in-skills/codebase-design/references/requesting-code-review/LICENSE.superpowers +21 -0
- package/built-in-skills/codebase-design/references/requesting-code-review/NOTICE.md +37 -0
- package/built-in-skills/codebase-design/references/sdlc-review/GUIDE.md +130 -0
- package/built-in-skills/codebase-design/references/sdlc-review/LICENSE +21 -0
- package/built-in-skills/codebase-design/references/sdlc-review/NOTICE.md +17 -0
- package/built-in-skills/codebase-design/references/simplify-code/GUIDE.md +269 -0
- package/built-in-skills/codebase-design/references/simplify-code/LICENSE +21 -0
- package/built-in-skills/codebase-design/references/simplify-code/NOTICE.md +37 -0
- package/built-in-skills/competitor-intelligence/LICENSE +21 -0
- package/built-in-skills/competitor-intelligence/NOTICE.md +6 -0
- package/built-in-skills/competitor-intelligence/SKILL.md +125 -0
- package/built-in-skills/competitor-intelligence/scripts/watch_state.py +160 -0
- package/built-in-skills/conversation-compaction/SKILL.md +117 -0
- package/built-in-skills/council-creator/SKILL.md +427 -0
- package/built-in-skills/diagnosing-bugs/LICENSE +21 -0
- package/built-in-skills/diagnosing-bugs/SKILL.md +148 -0
- package/built-in-skills/diagnosing-bugs/references/desktop-dom/GUIDE.md +64 -0
- package/built-in-skills/diagnosing-bugs/references/desktop-dom/LICENSE +21 -0
- package/built-in-skills/diagnosing-bugs/references/desktop-dom/NOTICE.md +17 -0
- package/built-in-skills/diagnosing-bugs/references/systematic-debugging/GUIDE.md +410 -0
- package/built-in-skills/diagnosing-bugs/references/systematic-debugging/LICENSE +21 -0
- package/built-in-skills/diagnosing-bugs/references/systematic-debugging/LICENSE.superpowers +21 -0
- package/built-in-skills/diagnosing-bugs/references/systematic-debugging/NOTICE.md +37 -0
- package/built-in-skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
- package/built-in-skills/doc-coauthoring/SKILL.md +7 -0
- package/built-in-skills/doc-coauthoring/references/humanizer/GUIDE.md +647 -0
- package/built-in-skills/doc-coauthoring/references/humanizer/LICENSE +21 -0
- package/built-in-skills/doc-coauthoring/references/humanizer/LICENSE.hermes +21 -0
- package/built-in-skills/doc-coauthoring/references/humanizer/PROVENANCE.md +7 -0
- package/built-in-skills/document-actions/LICENSE +21 -0
- package/built-in-skills/document-actions/NOTICE.md +21 -0
- package/built-in-skills/document-actions/SKILL.md +46 -0
- package/built-in-skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/built-in-skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/built-in-skills/domain-modeling/LICENSE +21 -0
- package/built-in-skills/domain-modeling/SKILL.md +76 -0
- package/built-in-skills/evidence-citations/LICENSE +21 -0
- package/built-in-skills/evidence-citations/NOTICE.md +21 -0
- package/built-in-skills/evidence-citations/SKILL.md +46 -0
- package/built-in-skills/evidence-citations/references/citation-formats.md +68 -0
- package/built-in-skills/evidence-citations/references/grounding-rationale.md +64 -0
- package/built-in-skills/evidence-citations/scripts/sources.py +720 -0
- package/built-in-skills/frontend-design/SKILL.md +7 -0
- package/built-in-skills/frontend-design/references/claude-design/GUIDE.md +650 -0
- package/built-in-skills/frontend-design/references/claude-design/LICENSE +21 -0
- package/built-in-skills/frontend-design/references/claude-design/LICENSE.hermes +21 -0
- package/built-in-skills/frontend-design/references/claude-design/PROVENANCE.md +7 -0
- package/built-in-skills/human-approval/SKILL.md +17 -2
- package/built-in-skills/image-generate/SKILL.md +107 -301
- package/built-in-skills/image-generate/scripts/generate-and-deliver.mjs +310 -0
- package/built-in-skills/ingest/SKILL.md +13 -45
- package/built-in-skills/internal-comms/SKILL.md +1 -0
- package/built-in-skills/liteparse/SKILL.md +130 -110
- package/built-in-skills/mcp-builder/SKILL.md +1 -0
- package/built-in-skills/mcp-builder/reference/evaluation.md +11 -2
- package/built-in-skills/mcp-builder/reference/node_mcp_server.md +34 -5
- package/built-in-skills/mcp-builder/reference/python_mcp_server.md +6 -2
- package/built-in-skills/mcp-builder/scripts/connections.py +1 -1
- package/built-in-skills/mcp-builder/scripts/evaluation.py +52 -34
- package/built-in-skills/mcp-builder/scripts/requirements.txt +2 -2
- package/built-in-skills/meeting-actions/LICENSE +21 -0
- package/built-in-skills/meeting-actions/NOTICE.md +21 -0
- package/built-in-skills/meeting-actions/SKILL.md +48 -0
- package/built-in-skills/memory/SKILL.md +444 -55
- package/built-in-skills/memory/references/llm-wiki/GUIDE.md +468 -0
- package/built-in-skills/memory/references/llm-wiki/LICENSE +21 -0
- package/built-in-skills/memory/references/llm-wiki/NOTICE.md +4 -0
- package/built-in-skills/memory/references/llm-wiki/scripts/lint_wiki.py +84 -0
- package/built-in-skills/memory/references/llm-wiki/scripts/requirements.txt +1 -0
- package/built-in-skills/memory/references/llm-wiki/templates/SCHEMA.md +19 -0
- package/built-in-skills/memory/references/llm-wiki/templates/index.md +9 -0
- package/built-in-skills/memory/references/llm-wiki/templates/log.md +4 -0
- package/built-in-skills/memory-dream/SKILL.md +332 -0
- package/built-in-skills/memory-import/SKILL.md +51 -0
- package/built-in-skills/office-artifacts/NOTICE.md +15 -0
- package/built-in-skills/office-artifacts/SKILL.md +37 -4
- package/built-in-skills/office-artifacts/references/RESOURCE-LIMITS.md +44 -0
- package/built-in-skills/office-artifacts/references/document-generation/GUIDE.md +105 -0
- package/built-in-skills/office-artifacts/references/docx/GUIDE.md +196 -0
- package/built-in-skills/office-artifacts/references/docx/LICENSE +21 -0
- package/built-in-skills/office-artifacts/references/docx/NOTICE.md +21 -0
- package/built-in-skills/office-artifacts/references/docx/references/revisions-and-comments.md +88 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_comments.py +292 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_common.py +93 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_create.py +177 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_edit.py +250 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_read.py +169 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_revisions.py +149 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_template.py +70 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_validate.py +155 -0
- package/built-in-skills/office-artifacts/references/docx/tests/test_docx_skill.py +525 -0
- package/built-in-skills/office-artifacts/references/pdf/GUIDE.md +125 -0
- package/built-in-skills/office-artifacts/references/pdf/LICENSE +21 -0
- package/built-in-skills/office-artifacts/references/pdf/NOTICE.md +21 -0
- package/built-in-skills/office-artifacts/references/pdf/references/forms.md +99 -0
- package/built-in-skills/office-artifacts/references/pdf/references/nano-pdf-editing.md +40 -0
- package/built-in-skills/office-artifacts/references/pdf/references/ocr-extraction.md +165 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/_raster.py +87 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/extract_marker.py +95 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/extract_pymupdf.py +107 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_create.py +153 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_fill_form.py +97 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_form_layout.py +168 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_make_form.py +145 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_merge.py +50 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_meta.py +123 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_page_image.py +101 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_read.py +153 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_secure.py +71 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_split.py +86 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_stamp.py +145 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_watermark.py +51 -0
- package/built-in-skills/office-artifacts/references/pdf/tests/test_pdf_skill.py +414 -0
- package/built-in-skills/office-artifacts/references/powerpoint/GUIDE.md +220 -0
- package/built-in-skills/office-artifacts/references/powerpoint/LICENSE +21 -0
- package/built-in-skills/office-artifacts/references/powerpoint/NOTICE.md +21 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_create.py +214 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_edit.py +442 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_from_template.py +88 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_read.py +131 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_render.py +104 -0
- package/built-in-skills/office-artifacts/references/powerpoint/tests/test_powerpoint_skill.py +478 -0
- package/built-in-skills/office-artifacts/references/xlsx/GUIDE.md +196 -0
- package/built-in-skills/office-artifacts/references/xlsx/LICENSE +21 -0
- package/built-in-skills/office-artifacts/references/xlsx/NOTICE.md +21 -0
- package/built-in-skills/office-artifacts/references/xlsx/references/restructuring.md +74 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/csv_to_xlsx.py +108 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_create.py +259 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_edit.py +269 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_read.py +160 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_recalc.py +111 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_restructure.py +418 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_to_csv.py +69 -0
- package/built-in-skills/office-artifacts/references/xlsx/tests/test_xlsx_skill.py +542 -0
- package/built-in-skills/office-artifacts/tests/test_resource_regressions.py +272 -0
- package/built-in-skills/okr/SKILL.md +154 -0
- package/built-in-skills/persona/SKILL.md +81 -0
- package/built-in-skills/persona-generator/SKILL.md +296 -0
- package/built-in-skills/pkf-svg/SKILL.md +258 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/GUIDE.md +148 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/LICENSE +21 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/LICENSE.hermes +21 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/PROVENANCE.md +7 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/templates/template.html +345 -0
- package/built-in-skills/pkf-writing/SKILL.md +258 -0
- package/built-in-skills/prismer-airtable/LICENSE +21 -0
- package/built-in-skills/prismer-airtable/NOTICE.md +11 -0
- package/built-in-skills/prismer-airtable/SKILL.md +248 -0
- package/built-in-skills/prismer-airtable/scripts/airtable_client.py +76 -0
- package/built-in-skills/prismer-apple-notes/LICENSE +21 -0
- package/built-in-skills/prismer-apple-notes/NOTICE.md +17 -0
- package/built-in-skills/prismer-apple-notes/SKILL.md +118 -0
- package/built-in-skills/prismer-apple-notes/scripts/readiness.py +47 -0
- package/built-in-skills/prismer-apple-reminders/LICENSE +21 -0
- package/built-in-skills/prismer-apple-reminders/NOTICE.md +17 -0
- package/built-in-skills/prismer-apple-reminders/SKILL.md +155 -0
- package/built-in-skills/prismer-apple-reminders/scripts/readiness.py +47 -0
- package/built-in-skills/prismer-ascii-video/LICENSE +21 -0
- package/built-in-skills/prismer-ascii-video/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-ascii-video/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-ascii-video/README.md +290 -0
- package/built-in-skills/prismer-ascii-video/SKILL.md +252 -0
- package/built-in-skills/prismer-ascii-video/provenance/category-DESCRIPTION.md +3 -0
- package/built-in-skills/prismer-ascii-video/references/architecture.md +807 -0
- package/built-in-skills/prismer-ascii-video/references/composition.md +900 -0
- package/built-in-skills/prismer-ascii-video/references/effects.md +1877 -0
- package/built-in-skills/prismer-ascii-video/references/inputs.md +693 -0
- package/built-in-skills/prismer-ascii-video/references/optimization.md +688 -0
- package/built-in-skills/prismer-ascii-video/references/scenes.md +1018 -0
- package/built-in-skills/prismer-ascii-video/references/shaders.md +1408 -0
- package/built-in-skills/prismer-ascii-video/references/troubleshooting.md +360 -0
- package/built-in-skills/prismer-baoyu-infographic/LICENSE +21 -0
- package/built-in-skills/prismer-baoyu-infographic/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-baoyu-infographic/LICENSE.origin +21 -0
- package/built-in-skills/prismer-baoyu-infographic/PORT_NOTES.md +37 -0
- package/built-in-skills/prismer-baoyu-infographic/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-baoyu-infographic/SKILL.md +240 -0
- package/built-in-skills/prismer-baoyu-infographic/references/analysis-framework.md +182 -0
- package/built-in-skills/prismer-baoyu-infographic/references/base-prompt.md +43 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/bento-grid.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/binary-comparison.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/bridge.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/circular-flow.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/comic-strip.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/comparison-matrix.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/dashboard.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/dense-modules.md +72 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/funnel.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/hierarchical-layers.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/hub-spoke.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/iceberg.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/isometric-map.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/jigsaw.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/linear-progression.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/periodic-table.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/story-mountain.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/structural-breakdown.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/tree-branching.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/venn-diagram.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/winding-roadmap.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/structured-content-template.md +244 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/aged-academia.md +36 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/bold-graphic.md +36 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/chalkboard.md +61 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/claymation.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/corporate-memphis.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/craft-handmade.md +44 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/cyberpunk-neon.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/hand-drawn-edu.md +63 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/ikea-manual.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/kawaii.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/knolling.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/lego-brick.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/morandi-journal.md +60 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/origami.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/pixel-art.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/pop-laboratory.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/retro-pop-grid.md +47 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/storybook-watercolor.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/subway-map.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/technical-schematic.md +36 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/ui-wireframe.md +29 -0
- package/built-in-skills/prismer-blocked-page-recovery/LICENSE +21 -0
- package/built-in-skills/prismer-blocked-page-recovery/NOTICE.md +17 -0
- package/built-in-skills/prismer-blocked-page-recovery/SKILL.md +158 -0
- package/built-in-skills/prismer-blocked-page-recovery/scripts/recover_page.py +311 -0
- package/built-in-skills/prismer-box/LICENSE +21 -0
- package/built-in-skills/prismer-box/NOTICE.md +11 -0
- package/built-in-skills/prismer-box/SKILL.md +147 -0
- package/built-in-skills/prismer-box/references/bulk-operations.md +43 -0
- package/built-in-skills/prismer-box/references/cli-guide.md +133 -0
- package/built-in-skills/prismer-box/references/content-workflows.md +86 -0
- package/built-in-skills/prismer-box/references/hubs.md +77 -0
- package/built-in-skills/prismer-box/references/oauth-setup.md +92 -0
- package/built-in-skills/prismer-box/references/rest-api.md +37 -0
- package/built-in-skills/prismer-box/references/sdk-development.md +85 -0
- package/built-in-skills/prismer-box/references/search-and-ai.md +147 -0
- package/built-in-skills/prismer-box/references/troubleshooting.md +33 -0
- package/built-in-skills/prismer-box/references/webhooks-and-events.md +43 -0
- package/built-in-skills/prismer-codebase-inspection/LICENSE +21 -0
- package/built-in-skills/prismer-codebase-inspection/NOTICE.md +17 -0
- package/built-in-skills/prismer-codebase-inspection/SKILL.md +141 -0
- package/built-in-skills/prismer-computer-use/LICENSE +21 -0
- package/built-in-skills/prismer-computer-use/NOTICE.md +17 -0
- package/built-in-skills/prismer-computer-use/SKILL.md +372 -0
- package/built-in-skills/prismer-design-md/LICENSE +21 -0
- package/built-in-skills/prismer-design-md/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-design-md/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-design-md/SKILL.md +227 -0
- package/built-in-skills/prismer-design-md/templates/starter.md +99 -0
- package/built-in-skills/prismer-email-inbox-triage/LICENSE +21 -0
- package/built-in-skills/prismer-email-inbox-triage/NOTICE.md +11 -0
- package/built-in-skills/prismer-email-inbox-triage/SKILL.md +116 -0
- package/built-in-skills/prismer-findmy/LICENSE +21 -0
- package/built-in-skills/prismer-findmy/NOTICE.md +17 -0
- package/built-in-skills/prismer-findmy/SKILL.md +150 -0
- package/built-in-skills/prismer-findmy/scripts/readiness.py +47 -0
- package/built-in-skills/prismer-gif-search/LICENSE +21 -0
- package/built-in-skills/prismer-gif-search/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-gif-search/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-gif-search/SKILL.md +97 -0
- package/built-in-skills/prismer-gif-search/scripts/tenor.py +81 -0
- package/built-in-skills/prismer-github/LICENSE +21 -0
- package/built-in-skills/prismer-github/NOTICE.md +17 -0
- package/built-in-skills/prismer-github/SKILL.md +74 -0
- package/built-in-skills/prismer-github/references/auth.md +91 -0
- package/built-in-skills/prismer-github/references/ci-troubleshooting.md +193 -0
- package/built-in-skills/prismer-github/references/code-review.md +465 -0
- package/built-in-skills/prismer-github/references/conventional-commits.md +81 -0
- package/built-in-skills/prismer-github/references/github-api-cheatsheet.md +177 -0
- package/built-in-skills/prismer-github/references/issue-to-pr.md +74 -0
- package/built-in-skills/prismer-github/references/issues.md +336 -0
- package/built-in-skills/prismer-github/references/pr-workflow.md +346 -0
- package/built-in-skills/prismer-github/references/repo-management.md +484 -0
- package/built-in-skills/prismer-github/references/review-output-template.md +84 -0
- package/built-in-skills/prismer-github/scripts/ensure-gh.py +132 -0
- package/built-in-skills/prismer-github/scripts/gh-env.sh +25 -0
- package/built-in-skills/prismer-github/scripts/git-credential-token.py +68 -0
- package/built-in-skills/prismer-github/scripts/github-api.py +71 -0
- package/built-in-skills/prismer-github/scripts/github-context.py +28 -0
- package/built-in-skills/prismer-github/templates/bug-report.md +35 -0
- package/built-in-skills/prismer-github/templates/feature-request.md +31 -0
- package/built-in-skills/prismer-github/templates/pr-body-bugfix.md +35 -0
- package/built-in-skills/prismer-github/templates/pr-body-feature.md +33 -0
- package/built-in-skills/prismer-google-workspace/LICENSE +21 -0
- package/built-in-skills/prismer-google-workspace/NOTICE.md +11 -0
- package/built-in-skills/prismer-google-workspace/SKILL.md +369 -0
- package/built-in-skills/prismer-google-workspace/references/daily-brief.md +65 -0
- package/built-in-skills/prismer-google-workspace/references/gmail-search-syntax.md +63 -0
- package/built-in-skills/prismer-google-workspace/scripts/_hermes_home.py +17 -0
- package/built-in-skills/prismer-google-workspace/scripts/_private_state.py +39 -0
- package/built-in-skills/prismer-google-workspace/scripts/google_api.py +1339 -0
- package/built-in-skills/prismer-google-workspace/scripts/gws_bridge.py +121 -0
- package/built-in-skills/prismer-google-workspace/scripts/setup.py +563 -0
- package/built-in-skills/prismer-google-workspace/tests/test_productivity_regressions.py +214 -0
- package/built-in-skills/prismer-hermes-agent/LICENSE +21 -0
- package/built-in-skills/prismer-hermes-agent/NOTICE.md +17 -0
- package/built-in-skills/prismer-hermes-agent/SKILL.md +247 -0
- package/built-in-skills/prismer-hermes-agent/references/background-systems.md +108 -0
- package/built-in-skills/prismer-hermes-agent/references/cli-reference.md +158 -0
- package/built-in-skills/prismer-hermes-agent/references/configuration.md +96 -0
- package/built-in-skills/prismer-hermes-agent/references/contributor-guide.md +151 -0
- package/built-in-skills/prismer-hermes-agent/references/delegate-task-concurrency-diagnosis.md +47 -0
- package/built-in-skills/prismer-hermes-agent/references/desktop-plugins.md +215 -0
- package/built-in-skills/prismer-hermes-agent/references/native-mcp.md +351 -0
- package/built-in-skills/prismer-hermes-agent/references/petdex.md +82 -0
- package/built-in-skills/prismer-hermes-agent/references/portal-auth-for-third-party-apps.md +135 -0
- package/built-in-skills/prismer-hermes-agent/references/project-context-files.md +55 -0
- package/built-in-skills/prismer-hermes-agent/references/providers-and-models.md +81 -0
- package/built-in-skills/prismer-hermes-agent/references/security-privacy.md +73 -0
- package/built-in-skills/prismer-hermes-agent/references/slash-commands.md +119 -0
- package/built-in-skills/prismer-hermes-agent/references/themes.md +134 -0
- package/built-in-skills/prismer-hermes-agent/references/troubleshooting.md +87 -0
- package/built-in-skills/prismer-hermes-agent/references/tui-widgets.md +144 -0
- package/built-in-skills/prismer-hermes-agent/references/webhooks.md +219 -0
- package/built-in-skills/prismer-hermes-agent/references/windows-quirks.md +64 -0
- package/built-in-skills/prismer-hermes-agent/templates/clock.mjs +51 -0
- package/built-in-skills/prismer-hermes-agent/templates/plugin.js +97 -0
- package/built-in-skills/prismer-hermes-agent/templates/skin.yaml +49 -0
- package/built-in-skills/prismer-himalaya/LICENSE +21 -0
- package/built-in-skills/prismer-himalaya/NOTICE.md +11 -0
- package/built-in-skills/prismer-himalaya/SKILL.md +340 -0
- package/built-in-skills/prismer-himalaya/references/configuration.md +227 -0
- package/built-in-skills/prismer-himalaya/references/message-composition.md +206 -0
- package/built-in-skills/prismer-himalaya/scripts/compose_draft.py +48 -0
- package/built-in-skills/prismer-im-collab/SKILL.md +27 -7
- package/built-in-skills/prismer-imessage/LICENSE +21 -0
- package/built-in-skills/prismer-imessage/NOTICE.md +17 -0
- package/built-in-skills/prismer-imessage/SKILL.md +128 -0
- package/built-in-skills/prismer-imessage/scripts/readiness.py +47 -0
- package/built-in-skills/prismer-manim-video/LICENSE +21 -0
- package/built-in-skills/prismer-manim-video/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-manim-video/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-manim-video/README.md +23 -0
- package/built-in-skills/prismer-manim-video/SKILL.md +279 -0
- package/built-in-skills/prismer-manim-video/references/animation-design-thinking.md +161 -0
- package/built-in-skills/prismer-manim-video/references/animations.md +282 -0
- package/built-in-skills/prismer-manim-video/references/camera-and-3d.md +135 -0
- package/built-in-skills/prismer-manim-video/references/decorations.md +202 -0
- package/built-in-skills/prismer-manim-video/references/equations.md +216 -0
- package/built-in-skills/prismer-manim-video/references/graphs-and-data.md +163 -0
- package/built-in-skills/prismer-manim-video/references/mobjects.md +333 -0
- package/built-in-skills/prismer-manim-video/references/paper-explainer.md +255 -0
- package/built-in-skills/prismer-manim-video/references/production-quality.md +190 -0
- package/built-in-skills/prismer-manim-video/references/rendering.md +187 -0
- package/built-in-skills/prismer-manim-video/references/scene-planning.md +118 -0
- package/built-in-skills/prismer-manim-video/references/troubleshooting.md +135 -0
- package/built-in-skills/prismer-manim-video/references/updaters-and-trackers.md +260 -0
- package/built-in-skills/prismer-manim-video/references/visual-design.md +124 -0
- package/built-in-skills/prismer-manim-video/scripts/setup.sh +15 -0
- package/built-in-skills/prismer-maps/LICENSE +21 -0
- package/built-in-skills/prismer-maps/NOTICE.md +11 -0
- package/built-in-skills/prismer-maps/SKILL.md +240 -0
- package/built-in-skills/prismer-maps/scripts/maps_client.py +1324 -0
- package/built-in-skills/prismer-node-inspect-debugger/LICENSE +21 -0
- package/built-in-skills/prismer-node-inspect-debugger/NOTICE.md +17 -0
- package/built-in-skills/prismer-node-inspect-debugger/SKILL.md +347 -0
- package/built-in-skills/prismer-notion/LICENSE +21 -0
- package/built-in-skills/prismer-notion/NOTICE.md +11 -0
- package/built-in-skills/prismer-notion/SKILL.md +495 -0
- package/built-in-skills/prismer-notion/references/block-types.md +112 -0
- package/built-in-skills/prismer-obsidian/LICENSE +21 -0
- package/built-in-skills/prismer-obsidian/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-obsidian/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-obsidian/SKILL.md +80 -0
- package/built-in-skills/prismer-obsidian/provenance/category-DESCRIPTION.md +3 -0
- package/built-in-skills/prismer-obsidian/scripts/write_note.py +84 -0
- package/built-in-skills/prismer-p5js/LICENSE +21 -0
- package/built-in-skills/prismer-p5js/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-p5js/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-p5js/README.md +64 -0
- package/built-in-skills/prismer-p5js/SKILL.md +574 -0
- package/built-in-skills/prismer-p5js/references/animation.md +439 -0
- package/built-in-skills/prismer-p5js/references/color-systems.md +355 -0
- package/built-in-skills/prismer-p5js/references/core-api.md +410 -0
- package/built-in-skills/prismer-p5js/references/export-pipeline.md +534 -0
- package/built-in-skills/prismer-p5js/references/interaction.md +398 -0
- package/built-in-skills/prismer-p5js/references/shapes-and-geometry.md +300 -0
- package/built-in-skills/prismer-p5js/references/troubleshooting.md +532 -0
- package/built-in-skills/prismer-p5js/references/typography.md +302 -0
- package/built-in-skills/prismer-p5js/references/visual-effects.md +905 -0
- package/built-in-skills/prismer-p5js/references/webgl-and-3d.md +423 -0
- package/built-in-skills/prismer-p5js/scripts/export-frames.js +91 -0
- package/built-in-skills/prismer-p5js/scripts/render.sh +113 -0
- package/built-in-skills/prismer-p5js/scripts/serve.sh +25 -0
- package/built-in-skills/prismer-p5js/scripts/setup.sh +87 -0
- package/built-in-skills/prismer-p5js/templates/viewer.html +401 -0
- package/built-in-skills/prismer-popular-web-designs/LICENSE +21 -0
- package/built-in-skills/prismer-popular-web-designs/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-popular-web-designs/LICENSE.origin +21 -0
- package/built-in-skills/prismer-popular-web-designs/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-popular-web-designs/SKILL.md +218 -0
- package/built-in-skills/prismer-popular-web-designs/templates/airbnb.md +259 -0
- package/built-in-skills/prismer-popular-web-designs/templates/airtable.md +102 -0
- package/built-in-skills/prismer-popular-web-designs/templates/apple.md +326 -0
- package/built-in-skills/prismer-popular-web-designs/templates/bmw.md +193 -0
- package/built-in-skills/prismer-popular-web-designs/templates/cal.md +272 -0
- package/built-in-skills/prismer-popular-web-designs/templates/claude.md +325 -0
- package/built-in-skills/prismer-popular-web-designs/templates/clay.md +317 -0
- package/built-in-skills/prismer-popular-web-designs/templates/clickhouse.md +294 -0
- package/built-in-skills/prismer-popular-web-designs/templates/cohere.md +279 -0
- package/built-in-skills/prismer-popular-web-designs/templates/coinbase.md +142 -0
- package/built-in-skills/prismer-popular-web-designs/templates/composio.md +320 -0
- package/built-in-skills/prismer-popular-web-designs/templates/cursor.md +322 -0
- package/built-in-skills/prismer-popular-web-designs/templates/elevenlabs.md +278 -0
- package/built-in-skills/prismer-popular-web-designs/templates/expo.md +294 -0
- package/built-in-skills/prismer-popular-web-designs/templates/figma.md +233 -0
- package/built-in-skills/prismer-popular-web-designs/templates/framer.md +259 -0
- package/built-in-skills/prismer-popular-web-designs/templates/hashicorp.md +291 -0
- package/built-in-skills/prismer-popular-web-designs/templates/ibm.md +345 -0
- package/built-in-skills/prismer-popular-web-designs/templates/intercom.md +159 -0
- package/built-in-skills/prismer-popular-web-designs/templates/kraken.md +138 -0
- package/built-in-skills/prismer-popular-web-designs/templates/linear.app.md +380 -0
- package/built-in-skills/prismer-popular-web-designs/templates/lovable.md +311 -0
- package/built-in-skills/prismer-popular-web-designs/templates/minimax.md +270 -0
- package/built-in-skills/prismer-popular-web-designs/templates/mintlify.md +339 -0
- package/built-in-skills/prismer-popular-web-designs/templates/miro.md +121 -0
- package/built-in-skills/prismer-popular-web-designs/templates/mistral.ai.md +274 -0
- package/built-in-skills/prismer-popular-web-designs/templates/mongodb.md +279 -0
- package/built-in-skills/prismer-popular-web-designs/templates/notion.md +322 -0
- package/built-in-skills/prismer-popular-web-designs/templates/nvidia.md +306 -0
- package/built-in-skills/prismer-popular-web-designs/templates/ollama.md +280 -0
- package/built-in-skills/prismer-popular-web-designs/templates/opencode.ai.md +294 -0
- package/built-in-skills/prismer-popular-web-designs/templates/pinterest.md +243 -0
- package/built-in-skills/prismer-popular-web-designs/templates/posthog.md +269 -0
- package/built-in-skills/prismer-popular-web-designs/templates/raycast.md +281 -0
- package/built-in-skills/prismer-popular-web-designs/templates/replicate.md +274 -0
- package/built-in-skills/prismer-popular-web-designs/templates/resend.md +316 -0
- package/built-in-skills/prismer-popular-web-designs/templates/revolut.md +198 -0
- package/built-in-skills/prismer-popular-web-designs/templates/runwayml.md +257 -0
- package/built-in-skills/prismer-popular-web-designs/templates/sanity.md +370 -0
- package/built-in-skills/prismer-popular-web-designs/templates/sentry.md +275 -0
- package/built-in-skills/prismer-popular-web-designs/templates/spacex.md +207 -0
- package/built-in-skills/prismer-popular-web-designs/templates/spotify.md +259 -0
- package/built-in-skills/prismer-popular-web-designs/templates/stripe.md +335 -0
- package/built-in-skills/prismer-popular-web-designs/templates/supabase.md +268 -0
- package/built-in-skills/prismer-popular-web-designs/templates/superhuman.md +265 -0
- package/built-in-skills/prismer-popular-web-designs/templates/together.ai.md +276 -0
- package/built-in-skills/prismer-popular-web-designs/templates/uber.md +308 -0
- package/built-in-skills/prismer-popular-web-designs/templates/vercel.md +323 -0
- package/built-in-skills/prismer-popular-web-designs/templates/voltagent.md +336 -0
- package/built-in-skills/prismer-popular-web-designs/templates/warp.md +266 -0
- package/built-in-skills/prismer-popular-web-designs/templates/webflow.md +105 -0
- package/built-in-skills/prismer-popular-web-designs/templates/wise.md +186 -0
- package/built-in-skills/prismer-popular-web-designs/templates/x.ai.md +270 -0
- package/built-in-skills/prismer-popular-web-designs/templates/zapier.md +341 -0
- package/built-in-skills/prismer-product-price-monitor/LICENSE +21 -0
- package/built-in-skills/prismer-product-price-monitor/NOTICE.md +11 -0
- package/built-in-skills/prismer-product-price-monitor/SKILL.md +97 -0
- package/built-in-skills/prismer-product-price-monitor/scripts/watch_state.py +116 -0
- package/built-in-skills/prismer-python-debugpy/LICENSE +21 -0
- package/built-in-skills/prismer-python-debugpy/NOTICE.md +17 -0
- package/built-in-skills/prismer-python-debugpy/SKILL.md +377 -0
- package/built-in-skills/prismer-python-debugpy/scripts/dap_client.py +68 -0
- package/built-in-skills/prismer-songsee/LICENSE +21 -0
- package/built-in-skills/prismer-songsee/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-songsee/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-songsee/SKILL.md +91 -0
- package/built-in-skills/prismer-songwriting-and-ai-music/LICENSE +21 -0
- package/built-in-skills/prismer-songwriting-and-ai-music/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-songwriting-and-ai-music/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-songwriting-and-ai-music/SKILL.md +317 -0
- package/built-in-skills/prismer-spike/LICENSE +21 -0
- package/built-in-skills/prismer-spike/LICENSE.gsd +21 -0
- package/built-in-skills/prismer-spike/NOTICE.md +17 -0
- package/built-in-skills/prismer-spike/SKILL.md +212 -0
- package/built-in-skills/prismer-teams-meeting-pipeline/LICENSE +21 -0
- package/built-in-skills/prismer-teams-meeting-pipeline/NOTICE.md +11 -0
- package/built-in-skills/prismer-teams-meeting-pipeline/SKILL.md +156 -0
- package/built-in-skills/prismer-xurl/LICENSE +21 -0
- package/built-in-skills/prismer-xurl/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-xurl/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-xurl/SKILL.md +444 -0
- package/built-in-skills/prismer-xurl/provenance/category-DESCRIPTION.md +3 -0
- package/built-in-skills/prismer-youtube-content/LICENSE +21 -0
- package/built-in-skills/prismer-youtube-content/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-youtube-content/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-youtube-content/SKILL.md +86 -0
- package/built-in-skills/prismer-youtube-content/provenance/category-DESCRIPTION.md +3 -0
- package/built-in-skills/prismer-youtube-content/references/output-formats.md +56 -0
- package/built-in-skills/prismer-youtube-content/scripts/fetch_transcript.py +146 -0
- package/built-in-skills/proactivity/SKILL.md +84 -0
- package/built-in-skills/remotion/SKILL.md +431 -0
- package/built-in-skills/research-arxiv/LICENSE +21 -0
- package/built-in-skills/research-arxiv/NOTICE.md +4 -0
- package/built-in-skills/research-arxiv/SKILL.md +263 -0
- package/built-in-skills/research-arxiv/scripts/search_arxiv.py +111 -0
- package/built-in-skills/role-builder/SKILL.md +209 -0
- package/built-in-skills/role-builder/scripts/author-role.mjs +350 -0
- package/built-in-skills/role-builder/scripts/ingest-role.mjs +121 -0
- package/built-in-skills/role-builder/scripts/instantiate-and-run.mjs +304 -0
- package/built-in-skills/role-builder/scripts/operation-harness.mjs +269 -0
- package/built-in-skills/skill-creator/LICENSE.prismer +21 -0
- package/built-in-skills/skill-creator/NOTICE.md +18 -0
- package/built-in-skills/skill-creator/SKILL.md +182 -421
- package/built-in-skills/skill-creator/eval-viewer/generate_review.py +20 -31
- package/built-in-skills/skill-creator/eval-viewer/viewer.html +35 -23
- package/built-in-skills/skill-creator/references/external-library-import.md +110 -0
- package/built-in-skills/skill-creator/references/hermes-agent-skill-authoring/GUIDE.md +220 -0
- package/built-in-skills/skill-creator/references/hermes-agent-skill-authoring/LICENSE +21 -0
- package/built-in-skills/skill-creator/references/skill-authoring/GUIDE.md +134 -0
- package/built-in-skills/{skill-authoring/skill.json → skill-creator/references/skill-authoring/draft-contract.json} +3 -3
- package/built-in-skills/skill-creator/references/skill-builder/GUIDE.md +167 -0
- package/built-in-skills/skill-creator/references/skill-builder/scripts/ingest.mjs +93 -0
- package/built-in-skills/skill-creator/scripts/aggregate_benchmark.py +3 -2
- package/built-in-skills/skill-creator/scripts/import-library.mjs +498 -0
- package/built-in-skills/skill-creator/scripts/improve_description.py +14 -16
- package/built-in-skills/skill-creator/scripts/package_skill.py +16 -9
- package/built-in-skills/skill-creator/scripts/quick_validate.py +22 -5
- package/built-in-skills/skill-creator/scripts/run_eval.py +63 -144
- package/built-in-skills/skill-creator/scripts/run_loop.py +24 -16
- package/built-in-skills/slack-gif-creator/SKILL.md +20 -0
- package/built-in-skills/slack-gif-creator/core/gif_builder.py +13 -2
- package/built-in-skills/slack-gif-creator/core/validators.py +17 -7
- package/built-in-skills/tasks/SKILL.md +39 -24
- package/built-in-skills/tdd/LICENSE +21 -0
- package/built-in-skills/tdd/SKILL.md +117 -0
- package/built-in-skills/tdd/mocking.md +59 -0
- package/built-in-skills/tdd/refactoring.md +10 -0
- package/built-in-skills/tdd/references/test-driven-development/GUIDE.md +356 -0
- package/built-in-skills/tdd/references/test-driven-development/LICENSE +21 -0
- package/built-in-skills/tdd/references/test-driven-development/LICENSE.superpowers +21 -0
- package/built-in-skills/tdd/references/test-driven-development/NOTICE.md +37 -0
- package/built-in-skills/tdd/tests.md +61 -0
- package/built-in-skills/team/SKILL.md +3 -2
- package/built-in-skills/web-artifacts-builder/SKILL.md +4 -3
- package/built-in-skills/web-artifacts-builder/scripts/bundle-artifact.sh +9 -7
- package/built-in-skills/web-artifacts-builder/scripts/init-artifact.sh +28 -55
- package/built-in-skills/webapp-qa/LICENSE +21 -0
- package/built-in-skills/webapp-qa/NOTICE.md +37 -0
- package/built-in-skills/webapp-qa/SKILL.md +41 -0
- package/built-in-skills/webapp-qa/references/dogfood/GUIDE.md +161 -0
- package/built-in-skills/webapp-qa/references/issue-taxonomy.md +109 -0
- package/built-in-skills/webapp-qa/templates/dogfood-report-template.md +86 -0
- package/built-in-skills/webapp-testing/SKILL.md +10 -2
- package/built-in-skills/webapp-testing/examples/console_logging.py +10 -4
- package/built-in-skills/webapp-testing/examples/element_discovery.py +11 -4
- package/built-in-skills/webapp-testing/examples/static_html_automation.py +14 -9
- package/built-in-skills/webapp-testing/scripts/with_server.py +34 -10
- package/built-in-skills/wechat-pay/SKILL.md +59 -0
- package/built-in-skills/weekly-review/LICENSE +21 -0
- package/built-in-skills/weekly-review/NOTICE.md +21 -0
- package/built-in-skills/weekly-review/SKILL.md +49 -0
- package/components/eaas-pi-components.manifest.json +37 -0
- package/dist/cli.cjs +75799 -20210
- package/dist/cli.js +75900 -20248
- package/dist/index.cjs +76159 -20082
- package/dist/index.d.cts +4766 -766
- package/dist/index.d.ts +4766 -766
- package/dist/index.js +76040 -19960
- package/package.json +42 -6
- package/plugins/memory/prismer/__init__.py +1215 -0
- package/plugins/memory/prismer/plugin.yaml +8 -0
- package/plugins/memory/prismer/tool-schemas.generated.json +257 -0
- package/plugins/tools/prismer-recall/__init__.py +282 -0
- package/plugins/tools/prismer-recall/plugin.yaml +15 -0
- package/built-in-skills/memory-curation/SKILL.md +0 -135
- package/built-in-skills/skill-authoring/SKILL.md +0 -124
- package/built-in-skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
|
@@ -8,6 +8,8 @@ for a set of queries. Outputs results as JSON.
|
|
|
8
8
|
import argparse
|
|
9
9
|
import json
|
|
10
10
|
import os
|
|
11
|
+
import re
|
|
12
|
+
import tempfile
|
|
11
13
|
import select
|
|
12
14
|
import subprocess
|
|
13
15
|
import sys
|
|
@@ -16,7 +18,10 @@ import uuid
|
|
|
16
18
|
from concurrent.futures import ProcessPoolExecutor, as_completed
|
|
17
19
|
from pathlib import Path
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
if __package__:
|
|
22
|
+
from .utils import parse_skill_md
|
|
23
|
+
else:
|
|
24
|
+
from utils import parse_skill_md
|
|
20
25
|
|
|
21
26
|
|
|
22
27
|
def find_project_root() -> Path:
|
|
@@ -33,153 +38,60 @@ def find_project_root() -> Path:
|
|
|
33
38
|
|
|
34
39
|
|
|
35
40
|
def run_single_query(
|
|
36
|
-
query: str,
|
|
37
|
-
|
|
38
|
-
skill_description: str,
|
|
39
|
-
timeout: int,
|
|
40
|
-
project_root: str,
|
|
41
|
-
model: str | None = None,
|
|
41
|
+
query: str, skill_name: str, skill_description: str, timeout: int,
|
|
42
|
+
project_root: str, model: str | None = None,
|
|
42
43
|
) -> bool:
|
|
43
|
-
"""
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
""
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
indented_desc = "\n ".join(skill_description.split("\n"))
|
|
60
|
-
command_content = (
|
|
61
|
-
f"---\n"
|
|
62
|
-
f"description: |\n"
|
|
63
|
-
f" {indented_desc}\n"
|
|
64
|
-
f"---\n\n"
|
|
65
|
-
f"# {skill_name}\n\n"
|
|
66
|
-
f"This skill handles: {skill_description}\n"
|
|
44
|
+
"""Evaluate only a temporary probe skill; never write into the user's repo."""
|
|
45
|
+
if os.environ.get("PRISMER_ALLOW_PAID_EVAL") != "1":
|
|
46
|
+
raise PermissionError("Set PRISMER_ALLOW_PAID_EVAL=1 after approving evaluation cost")
|
|
47
|
+
if not re.fullmatch(r"[a-z0-9]+(?:-[a-z0-9]+)*", skill_name):
|
|
48
|
+
raise ValueError("Unsafe skill name")
|
|
49
|
+
if timeout <= 0:
|
|
50
|
+
raise ValueError("timeout must be positive")
|
|
51
|
+
clean_name = f"{skill_name}-skill-{uuid.uuid4().hex[:8]}"
|
|
52
|
+
with tempfile.TemporaryDirectory(prefix="skill-trigger-") as directory:
|
|
53
|
+
skill_dir = Path(directory) / ".claude" / "skills" / clean_name
|
|
54
|
+
skill_dir.mkdir(parents=True)
|
|
55
|
+
description = "\\n ".join(skill_description.splitlines())
|
|
56
|
+
(skill_dir / "SKILL.md").write_text(
|
|
57
|
+
f"---\\nname: {clean_name}\\ndescription: |\\n {description}\\n---\\n"
|
|
58
|
+
"Report that this probe skill was selected. Do not execute any other action.\\n",
|
|
59
|
+
encoding="utf-8",
|
|
67
60
|
)
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
"--output-format", "stream-json",
|
|
74
|
-
"--verbose",
|
|
75
|
-
"--include-partial-messages",
|
|
76
|
-
]
|
|
61
|
+
cmd = ["claude", "-p", query, "--output-format", "stream-json", "--verbose",
|
|
62
|
+
"--bare", "--tools", "Read,Skill", "--allowedTools", "Read,Skill",
|
|
63
|
+
"--permission-mode", "dontAsk", "--strict-mcp-config",
|
|
64
|
+
"--mcp-config", '{"mcpServers":{}}', "--setting-sources", "",
|
|
65
|
+
"--no-session-persistence", "--max-budget-usd", "0.25"]
|
|
77
66
|
if model:
|
|
78
67
|
cmd.extend(["--model", model])
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
triggered = False
|
|
94
|
-
start_time = time.time()
|
|
95
|
-
buffer = ""
|
|
96
|
-
# Track state for stream event detection
|
|
97
|
-
pending_tool_name = None
|
|
98
|
-
accumulated_json = ""
|
|
99
|
-
|
|
100
|
-
try:
|
|
101
|
-
while time.time() - start_time < timeout:
|
|
102
|
-
if process.poll() is not None:
|
|
103
|
-
remaining = process.stdout.read()
|
|
104
|
-
if remaining:
|
|
105
|
-
buffer += remaining.decode("utf-8", errors="replace")
|
|
106
|
-
break
|
|
107
|
-
|
|
108
|
-
ready, _, _ = select.select([process.stdout], [], [], 1.0)
|
|
109
|
-
if not ready:
|
|
110
|
-
continue
|
|
111
|
-
|
|
112
|
-
chunk = os.read(process.stdout.fileno(), 8192)
|
|
113
|
-
if not chunk:
|
|
114
|
-
break
|
|
115
|
-
buffer += chunk.decode("utf-8", errors="replace")
|
|
116
|
-
|
|
117
|
-
while "\n" in buffer:
|
|
118
|
-
line, buffer = buffer.split("\n", 1)
|
|
119
|
-
line = line.strip()
|
|
120
|
-
if not line:
|
|
121
|
-
continue
|
|
122
|
-
|
|
123
|
-
try:
|
|
124
|
-
event = json.loads(line)
|
|
125
|
-
except json.JSONDecodeError:
|
|
68
|
+
# communicate drains both pipes; errors are never scored as negatives.
|
|
69
|
+
completed = subprocess.run(cmd, cwd=directory, env=dict(os.environ),
|
|
70
|
+
capture_output=True, text=True, timeout=timeout)
|
|
71
|
+
if completed.returncode:
|
|
72
|
+
raise RuntimeError(f"Claude evaluation exited {completed.returncode}")
|
|
73
|
+
triggered, finished = False, False
|
|
74
|
+
for line in completed.stdout.splitlines():
|
|
75
|
+
try:
|
|
76
|
+
event = json.loads(line)
|
|
77
|
+
except json.JSONDecodeError:
|
|
78
|
+
continue
|
|
79
|
+
if event.get("type") == "assistant":
|
|
80
|
+
for block in event.get("message", {}).get("content", []):
|
|
81
|
+
if block.get("type") != "tool_use":
|
|
126
82
|
continue
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
pending_tool_name = tool_name
|
|
139
|
-
accumulated_json = ""
|
|
140
|
-
else:
|
|
141
|
-
return False
|
|
142
|
-
|
|
143
|
-
elif se_type == "content_block_delta" and pending_tool_name:
|
|
144
|
-
delta = se.get("delta", {})
|
|
145
|
-
if delta.get("type") == "input_json_delta":
|
|
146
|
-
accumulated_json += delta.get("partial_json", "")
|
|
147
|
-
if clean_name in accumulated_json:
|
|
148
|
-
return True
|
|
149
|
-
|
|
150
|
-
elif se_type in ("content_block_stop", "message_stop"):
|
|
151
|
-
if pending_tool_name:
|
|
152
|
-
return clean_name in accumulated_json
|
|
153
|
-
if se_type == "message_stop":
|
|
154
|
-
return False
|
|
155
|
-
|
|
156
|
-
# Fallback: full assistant message
|
|
157
|
-
elif event.get("type") == "assistant":
|
|
158
|
-
message = event.get("message", {})
|
|
159
|
-
for content_item in message.get("content", []):
|
|
160
|
-
if content_item.get("type") != "tool_use":
|
|
161
|
-
continue
|
|
162
|
-
tool_name = content_item.get("name", "")
|
|
163
|
-
tool_input = content_item.get("input", {})
|
|
164
|
-
if tool_name == "Skill" and clean_name in tool_input.get("skill", ""):
|
|
165
|
-
triggered = True
|
|
166
|
-
elif tool_name == "Read" and clean_name in tool_input.get("file_path", ""):
|
|
167
|
-
triggered = True
|
|
168
|
-
return triggered
|
|
169
|
-
|
|
170
|
-
elif event.get("type") == "result":
|
|
171
|
-
return triggered
|
|
172
|
-
finally:
|
|
173
|
-
# Clean up process on any exit path (return, exception, timeout)
|
|
174
|
-
if process.poll() is None:
|
|
175
|
-
process.kill()
|
|
176
|
-
process.wait()
|
|
177
|
-
|
|
83
|
+
args = block.get("input", {})
|
|
84
|
+
if block.get("name") == "Skill":
|
|
85
|
+
triggered |= clean_name in args.get("skill", "")
|
|
86
|
+
elif block.get("name") == "Read":
|
|
87
|
+
triggered |= clean_name in args.get("file_path", "")
|
|
88
|
+
elif event.get("type") == "result":
|
|
89
|
+
if event.get("is_error") or event.get("subtype") not in (None, "success"):
|
|
90
|
+
raise RuntimeError("Claude evaluation returned an error result")
|
|
91
|
+
finished = True
|
|
92
|
+
if not finished:
|
|
93
|
+
raise RuntimeError("Claude evaluation produced no successful terminal result")
|
|
178
94
|
return triggered
|
|
179
|
-
finally:
|
|
180
|
-
if command_file.exists():
|
|
181
|
-
command_file.unlink()
|
|
182
|
-
|
|
183
95
|
|
|
184
96
|
def run_eval(
|
|
185
97
|
eval_set: list[dict],
|
|
@@ -193,6 +105,14 @@ def run_eval(
|
|
|
193
105
|
model: str | None = None,
|
|
194
106
|
) -> dict:
|
|
195
107
|
"""Run the full eval set and return results."""
|
|
108
|
+
if not eval_set or num_workers < 1 or runs_per_query < 1 or timeout <= 0:
|
|
109
|
+
raise ValueError('Non-empty eval set and positive workers/runs/timeout required')
|
|
110
|
+
if not 0 < trigger_threshold <= 1:
|
|
111
|
+
raise ValueError('trigger_threshold must be in (0, 1]')
|
|
112
|
+
if len({item['query'] for item in eval_set}) != len(eval_set):
|
|
113
|
+
raise ValueError('Duplicate queries make train/test membership ambiguous')
|
|
114
|
+
if len(eval_set) * runs_per_query > 300 or num_workers > 10:
|
|
115
|
+
raise ValueError('Evaluation exceeds 300-call or 10-worker safety budget')
|
|
196
116
|
results = []
|
|
197
117
|
|
|
198
118
|
with ProcessPoolExecutor(max_workers=num_workers) as executor:
|
|
@@ -221,8 +141,7 @@ def run_eval(
|
|
|
221
141
|
try:
|
|
222
142
|
query_triggers[query].append(future.result())
|
|
223
143
|
except Exception as e:
|
|
224
|
-
|
|
225
|
-
query_triggers[query].append(False)
|
|
144
|
+
raise RuntimeError('Evaluation incomplete; failed calls cannot count as negative triggers') from e
|
|
226
145
|
|
|
227
146
|
for query, triggers in query_triggers.items():
|
|
228
147
|
item = query_items[query]
|
|
@@ -15,27 +15,37 @@ import time
|
|
|
15
15
|
import webbrowser
|
|
16
16
|
from pathlib import Path
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
from
|
|
20
|
-
from
|
|
21
|
-
from
|
|
18
|
+
if __package__:
|
|
19
|
+
from .generate_report import generate_html
|
|
20
|
+
from .improve_description import improve_description
|
|
21
|
+
from .run_eval import find_project_root, run_eval
|
|
22
|
+
from .utils import parse_skill_md
|
|
23
|
+
else:
|
|
24
|
+
from generate_report import generate_html
|
|
25
|
+
from improve_description import improve_description
|
|
26
|
+
from run_eval import find_project_root, run_eval
|
|
27
|
+
from utils import parse_skill_md
|
|
22
28
|
|
|
23
29
|
|
|
24
30
|
def split_eval_set(eval_set: list[dict], holdout: float, seed: int = 42) -> tuple[list[dict], list[dict]]:
|
|
25
31
|
"""Split eval set into train and test sets, stratified by should_trigger."""
|
|
26
|
-
random.
|
|
32
|
+
rng = random.Random(seed)
|
|
33
|
+
if not 0 < holdout < 1:
|
|
34
|
+
raise ValueError('holdout must be between 0 and 1')
|
|
27
35
|
|
|
28
36
|
# Separate by should_trigger
|
|
29
37
|
trigger = [e for e in eval_set if e["should_trigger"]]
|
|
30
38
|
no_trigger = [e for e in eval_set if not e["should_trigger"]]
|
|
31
39
|
|
|
32
40
|
# Shuffle each group
|
|
33
|
-
|
|
34
|
-
|
|
41
|
+
if len(trigger) < 2 or len(no_trigger) < 2:
|
|
42
|
+
raise ValueError('Stratified holdout needs at least two positive and two negative queries')
|
|
43
|
+
rng.shuffle(trigger)
|
|
44
|
+
rng.shuffle(no_trigger)
|
|
35
45
|
|
|
36
46
|
# Calculate split points
|
|
37
|
-
n_trigger_test = max(1, int(len(trigger) * holdout))
|
|
38
|
-
n_no_trigger_test = max(1, int(len(no_trigger) * holdout))
|
|
47
|
+
n_trigger_test = min(len(trigger) - 1, max(1, int(len(trigger) * holdout)))
|
|
48
|
+
n_no_trigger_test = min(len(no_trigger) - 1, max(1, int(len(no_trigger) * holdout)))
|
|
39
49
|
|
|
40
50
|
# Split
|
|
41
51
|
test_set = trigger[:n_trigger_test] + no_trigger[:n_no_trigger_test]
|
|
@@ -60,6 +70,8 @@ def run_loop(
|
|
|
60
70
|
log_dir: Path | None = None,
|
|
61
71
|
) -> dict:
|
|
62
72
|
"""Run the eval + improvement loop."""
|
|
73
|
+
if max_iterations < 1 or not 0 <= holdout < 1:
|
|
74
|
+
raise ValueError('Positive max_iterations and holdout in [0, 1) required')
|
|
63
75
|
project_root = find_project_root()
|
|
64
76
|
name, original_description, content = parse_skill_md(skill_path)
|
|
65
77
|
current_description = description_override or original_description
|
|
@@ -213,13 +225,9 @@ def run_loop(
|
|
|
213
225
|
|
|
214
226
|
current_description = new_description
|
|
215
227
|
|
|
216
|
-
#
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
best_score = f"{best['test_passed']}/{best['test_total']}"
|
|
220
|
-
else:
|
|
221
|
-
best = max(history, key=lambda h: h["train_passed"])
|
|
222
|
-
best_score = f"{best['train_passed']}/{best['train_total']}"
|
|
228
|
+
# Selection cannot use holdout scores; improvement also receives train only.
|
|
229
|
+
best = max(history, key=lambda h: h['train_passed'])
|
|
230
|
+
best_score = f"{best['train_passed']}/{best['train_total']}"
|
|
223
231
|
|
|
224
232
|
if verbose:
|
|
225
233
|
print(f"\nExit reason: {exit_reason}", file=sys.stderr)
|
|
@@ -1,9 +1,29 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: slack-gif-creator
|
|
3
|
+
scope: persistence
|
|
3
4
|
description: Knowledge and utilities for creating animated GIFs optimized for Slack. Provides constraints, validation tools, and animation concepts. Use when users request animated GIFs for Slack like "make me a GIF of X doing Y for Slack."
|
|
4
5
|
license: Complete terms in LICENSE.txt
|
|
6
|
+
config:
|
|
7
|
+
- key: SLACK_WEBHOOK_URL
|
|
8
|
+
type: secret
|
|
9
|
+
required: false
|
|
10
|
+
default: null
|
|
11
|
+
bindable: [role, agent]
|
|
12
|
+
description: Optional Slack Incoming Webhook to post the finished GIF to a channel directly. Webhook URLs embed a token — treated as a secret.
|
|
13
|
+
prompt:
|
|
14
|
+
zh: "要把 GIF 直接发到 Slack 频道吗?请提供 Incoming Webhook URL。"
|
|
15
|
+
en: "Should the GIF be posted to a Slack channel directly? Provide the Incoming Webhook URL."
|
|
5
16
|
---
|
|
6
17
|
|
|
18
|
+
## Optional: post directly to Slack
|
|
19
|
+
|
|
20
|
+
If `SLACK_WEBHOOK_URL` is present in your environment, you may additionally
|
|
21
|
+
post the finished GIF to that Slack channel (upload the file where the
|
|
22
|
+
webhook workflow expects it, or send a message linking the delivered asset).
|
|
23
|
+
Never print the webhook URL itself into chat, files, or logs. When the
|
|
24
|
+
variable is absent, skip this step silently — delivery below is the only
|
|
25
|
+
required output.
|
|
26
|
+
|
|
7
27
|
## Delivering the GIF
|
|
8
28
|
|
|
9
29
|
When this skill finishes producing an animated GIF (`output.gif`), deliver
|
|
@@ -29,7 +29,10 @@ class GIFBuilder:
|
|
|
29
29
|
self.width = width
|
|
30
30
|
self.height = height
|
|
31
31
|
self.fps = fps
|
|
32
|
+
if fps <= 0 or width <= 0 or height <= 0:
|
|
33
|
+
raise ValueError('Dimensions and fps must be positive')
|
|
32
34
|
self.frames: list[np.ndarray] = []
|
|
35
|
+
self._frame_ticks: list[int] = []
|
|
33
36
|
|
|
34
37
|
def add_frame(self, frame: np.ndarray | Image.Image):
|
|
35
38
|
"""
|
|
@@ -50,6 +53,7 @@ class GIFBuilder:
|
|
|
50
53
|
frame = np.array(pil_frame)
|
|
51
54
|
|
|
52
55
|
self.frames.append(frame)
|
|
56
|
+
self._frame_ticks.append(1)
|
|
53
57
|
|
|
54
58
|
def add_frames(self, frames: list[np.ndarray | Image.Image]):
|
|
55
59
|
"""Add multiple frames at once."""
|
|
@@ -136,6 +140,7 @@ class GIFBuilder:
|
|
|
136
140
|
return 0
|
|
137
141
|
|
|
138
142
|
deduplicated = [self.frames[0]]
|
|
143
|
+
ticks = [self._frame_ticks[0]]
|
|
139
144
|
removed_count = 0
|
|
140
145
|
|
|
141
146
|
for i in range(1, len(self.frames)):
|
|
@@ -151,10 +156,13 @@ class GIFBuilder:
|
|
|
151
156
|
# High threshold (0.9995+) means only remove nearly identical frames
|
|
152
157
|
if similarity < threshold:
|
|
153
158
|
deduplicated.append(self.frames[i])
|
|
159
|
+
ticks.append(self._frame_ticks[i])
|
|
154
160
|
else:
|
|
161
|
+
ticks[-1] += self._frame_ticks[i]
|
|
155
162
|
removed_count += 1
|
|
156
163
|
|
|
157
164
|
self.frames = deduplicated
|
|
165
|
+
self._frame_ticks = ticks
|
|
158
166
|
return removed_count
|
|
159
167
|
|
|
160
168
|
def save(
|
|
@@ -213,6 +221,8 @@ class GIFBuilder:
|
|
|
213
221
|
)
|
|
214
222
|
# Keep every nth frame to get close to 12 frames
|
|
215
223
|
keep_every = max(1, len(self.frames) // 12)
|
|
224
|
+
self._frame_ticks = [sum(self._frame_ticks[i:i + keep_every])
|
|
225
|
+
for i in range(0, len(self.frames), keep_every)]
|
|
216
226
|
self.frames = [
|
|
217
227
|
self.frames[i] for i in range(0, len(self.frames), keep_every)
|
|
218
228
|
]
|
|
@@ -221,7 +231,7 @@ class GIFBuilder:
|
|
|
221
231
|
optimized_frames = self.optimize_colors(num_colors, use_global_palette=True)
|
|
222
232
|
|
|
223
233
|
# Calculate frame duration in milliseconds
|
|
224
|
-
frame_duration = 1000 / self.fps
|
|
234
|
+
frame_duration = [1000 * ticks / self.fps for ticks in self._frame_ticks]
|
|
225
235
|
|
|
226
236
|
# Save GIF
|
|
227
237
|
imageio.imwrite(
|
|
@@ -242,7 +252,7 @@ class GIFBuilder:
|
|
|
242
252
|
"dimensions": f"{self.width}x{self.height}",
|
|
243
253
|
"frame_count": len(optimized_frames),
|
|
244
254
|
"fps": self.fps,
|
|
245
|
-
"duration_seconds":
|
|
255
|
+
"duration_seconds": sum(self._frame_ticks) / self.fps,
|
|
246
256
|
"colors": num_colors,
|
|
247
257
|
}
|
|
248
258
|
|
|
@@ -267,3 +277,4 @@ class GIFBuilder:
|
|
|
267
277
|
def clear(self):
|
|
268
278
|
"""Clear all frames (useful for creating multiple GIFs)."""
|
|
269
279
|
self.frames = []
|
|
280
|
+
self._frame_ticks = []
|
|
@@ -9,7 +9,8 @@ from pathlib import Path
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
def validate_gif(
|
|
12
|
-
gif_path: str | Path, is_emoji: bool = True, verbose: bool = True
|
|
12
|
+
gif_path: str | Path, is_emoji: bool = True, verbose: bool = True,
|
|
13
|
+
max_bytes: int = 5 * 1024 * 1024,
|
|
13
14
|
) -> tuple[bool, dict]:
|
|
14
15
|
"""
|
|
15
16
|
Validate GIF for Slack (dimensions, size, frame count).
|
|
@@ -25,6 +26,8 @@ def validate_gif(
|
|
|
25
26
|
from PIL import Image
|
|
26
27
|
|
|
27
28
|
gif_path = Path(gif_path)
|
|
29
|
+
if max_bytes <= 0:
|
|
30
|
+
raise ValueError('max_bytes must be positive')
|
|
28
31
|
|
|
29
32
|
if not gif_path.exists():
|
|
30
33
|
return False, {"error": f"File not found: {gif_path}"}
|
|
@@ -37,21 +40,25 @@ def validate_gif(
|
|
|
37
40
|
# Get dimensions and frame info
|
|
38
41
|
try:
|
|
39
42
|
with Image.open(gif_path) as img:
|
|
43
|
+
if img.format != 'GIF':
|
|
44
|
+
return False, {'error': 'Input must be a GIF, not ' + str(img.format)}
|
|
40
45
|
width, height = img.size
|
|
41
46
|
|
|
42
47
|
# Count frames
|
|
43
48
|
frame_count = 0
|
|
49
|
+
duration_ms = 0
|
|
44
50
|
try:
|
|
45
51
|
while True:
|
|
46
52
|
img.seek(frame_count)
|
|
53
|
+
img.load()
|
|
54
|
+
duration_ms += img.info.get('duration', 0)
|
|
47
55
|
frame_count += 1
|
|
48
56
|
except EOFError:
|
|
49
57
|
pass
|
|
50
58
|
|
|
51
59
|
# Get duration
|
|
52
60
|
try:
|
|
53
|
-
|
|
54
|
-
total_duration = (duration_ms * frame_count) / 1000
|
|
61
|
+
total_duration = duration_ms / 1000
|
|
55
62
|
fps = frame_count / total_duration if total_duration > 0 else 0
|
|
56
63
|
except:
|
|
57
64
|
total_duration = None
|
|
@@ -73,9 +80,12 @@ def validate_gif(
|
|
|
73
80
|
)
|
|
74
81
|
dim_pass = aspect_ratio <= 2.0 and 320 <= min(width, height) <= 640
|
|
75
82
|
|
|
83
|
+
passes = dim_pass and size_bytes <= max_bytes and frame_count > 0
|
|
76
84
|
results = {
|
|
77
85
|
"file": str(gif_path),
|
|
78
|
-
"passes":
|
|
86
|
+
"passes": passes,
|
|
87
|
+
"size_pass": size_bytes <= max_bytes,
|
|
88
|
+
"max_bytes": max_bytes,
|
|
79
89
|
"width": width,
|
|
80
90
|
"height": height,
|
|
81
91
|
"size_kb": size_kb,
|
|
@@ -112,10 +122,10 @@ def validate_gif(
|
|
|
112
122
|
f" Note: {'Emoji should be 128x128' if is_emoji else 'Unusual dimensions for Slack'}"
|
|
113
123
|
)
|
|
114
124
|
|
|
115
|
-
if
|
|
116
|
-
print(f"
|
|
125
|
+
if size_bytes > max_bytes:
|
|
126
|
+
print(f" Failed: exceeds configured size budget ({max_bytes} bytes)")
|
|
117
127
|
|
|
118
|
-
return
|
|
128
|
+
return passes, results
|
|
119
129
|
|
|
120
130
|
|
|
121
131
|
def is_slack_ready(
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tasks
|
|
3
|
+
scope: common
|
|
3
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.
|
|
4
5
|
---
|
|
5
6
|
|
|
@@ -11,13 +12,22 @@ Use this skill to drive the **workspace Kanban** end-to-end. Tasks are durable b
|
|
|
11
12
|
|
|
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"):
|
|
13
14
|
|
|
14
|
-
1. **Call `cloud task create --assignee-name <agent>` (or `--assignee-id`).** That is the ONLY legitimate delegation path.
|
|
15
|
-
2. **
|
|
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. **For a delegation-only request, stop after reporting the returned IDs / titles.** If the user also requested orchestration, follow-through, or result collection, continue read-only status/result collection with bounded waits as described below. Never duplicate the assignee's work yourself.
|
|
16
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**.
|
|
17
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."**
|
|
18
19
|
|
|
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.
|
|
20
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
|
+
|
|
21
31
|
## When to use
|
|
22
32
|
|
|
23
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").
|
|
@@ -33,11 +43,17 @@ This is non-negotiable. Bypassing it makes the agent ecosystem look broken even
|
|
|
33
43
|
|
|
34
44
|
```
|
|
35
45
|
pending → assigned → running → review → completed | failed | cancelled
|
|
36
|
-
|
|
37
|
-
|
|
46
|
+
↑ ↓
|
|
47
|
+
└──── blocked ────────┤ (unblock returns to assigned)
|
|
48
|
+
↓
|
|
49
|
+
awaiting_approval
|
|
50
|
+
↓
|
|
51
|
+
approved / rejected (back to review)
|
|
38
52
|
```
|
|
39
53
|
|
|
40
|
-
|
|
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.
|
|
41
57
|
|
|
42
58
|
## Permission model (v2.0 — `release 200` state machine)
|
|
43
59
|
|
|
@@ -267,7 +283,7 @@ You MUST also confirm:
|
|
|
267
283
|
|
|
268
284
|
### As a verifier agent (when you receive task.verify.requested)
|
|
269
285
|
|
|
270
|
-
You will receive
|
|
286
|
+
You will receive a task dispatch message:
|
|
271
287
|
|
|
272
288
|
type: task.verify.requested
|
|
273
289
|
taskId: ...
|
|
@@ -332,7 +348,7 @@ cloud task apply-template <taskId> --template <id> # adopt a template
|
|
|
332
348
|
|
|
333
349
|
## 产物输出(user-deliverable)
|
|
334
350
|
|
|
335
|
-
|
|
351
|
+
**文件交付是显式的**(release202/09 P2 起)。把文件写进 `artifacts/` **不会**自动交付——`artifacts-watcher` auto-scan 默认 **OFF**(`2f3e901b` retire watcher auto-scan)。仅当 carrier 决策是文件时,才使用 `cloud deliver` / `cloud task attach` 显式交付该文件。
|
|
336
352
|
|
|
337
353
|
```bash
|
|
338
354
|
# 1) 把最终产物写到 artifacts/(draft / 中间文件走 scratch,不会被交付)
|
|
@@ -345,39 +361,38 @@ cloud task attach "${PRISMER_ARTIFACTS_DIR}/my-report.md" # 动作 ③:挂
|
|
|
345
361
|
|
|
346
362
|
> ⚠️ **写进 `artifacts/` ≠ 交付**。没有 auto-scan。每个文件都要显式 `cloud deliver`(聊天回复产物)或 `cloud task attach`(任务卡产物),否则用户收不到。`artifacts/` 放最终交付物,draft / 中间文件走 `scratch/`。
|
|
347
363
|
|
|
348
|
-
>
|
|
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>`:
|
|
349
366
|
> ```bash
|
|
350
367
|
> cloud deliver "<abs-path>" --run-id "<run_id>" --conversation-id "<conversation_id>"
|
|
351
368
|
> ```
|
|
352
|
-
>
|
|
369
|
+
> 详见 `office-artifacts` SKILL(唯一交付契约)。
|
|
353
370
|
|
|
354
371
|
**Workflow**:
|
|
355
372
|
|
|
356
|
-
1. 中间脚本 / draft 写到 `${PRISMER_SCRATCH_DIR}/`(scratch,不进
|
|
373
|
+
1. 中间脚本 / draft 写到 `${PRISMER_SCRATCH_DIR}/`(scratch,不进 Asset、不交付)
|
|
357
374
|
2. 最终产物写到 `${PRISMER_ARTIFACTS_DIR}/`(agent process env; physically `${TASK_WORKDIR}/artifacts/`)
|
|
358
375
|
3. **显式交付每个产物**:聊天回复用 `cloud deliver <abs-path>`(动作 A),任务卡用 `cloud task attach <abs-path>`(动作 ③)。命令成功会打印 `assetId`
|
|
359
376
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
- 不要在对话里贴大段 markdown 充当 "产物"——实际产物必须落文件
|
|
363
|
-
- 不要把 draft / 中间产物丢进 `artifacts/`——那里只放最终交付物(draft 走 `scratch/`)
|
|
364
|
-
- 不要以为写进 `artifacts/` 就交付了——没有 auto-scan,必须显式 `cloud deliver` / `cloud task attach`
|
|
377
|
+
### Carrier 选择与显式交付
|
|
365
378
|
|
|
366
|
-
|
|
379
|
+
carrier 优先级是:**用户明确要求 > Runtime carrier directive > 已选内容 skill > task 默认**。`tasks` skill 只管任务与回执,不擅自把内容改成 Markdown 文件、Asset 或 Memory Page。
|
|
367
380
|
|
|
368
|
-
**
|
|
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。
|
|
369
385
|
|
|
370
|
-
|
|
371
|
-
2. chat 里的文字回复是 **summary / teaser**(一两句话点出产了什么、关键结论),**不是交付物本身**。交付物在产物资产里,用户在 task 详情的 Artifacts 看完整内容;下游 task 可经 Library 复用同一份 markdown 资产。
|
|
372
|
-
3. **文件名 / 结构由 skill 按目的自定**——别套死 schema。一般约定:用有意义的文件名(如 `research-summary.md` / `design-review.md` / `q3-plan.md`),需要时拆多个文件。一个 task 可产多个 markdown。
|
|
373
|
-
|
|
374
|
-
**为什么**:贴在对话里的长 markdown 是一次性的、不可复用、污染时间线、跨设备 / 刷新易丢;写成文件后它是有 hash、可预览、可 promote 到 Library Root、可被下游 task 引用的**资产**。chat 时间线的完成卡只 surface「N 个产物 →」,点进 task drawer 看正文。
|
|
386
|
+
**禁止**:
|
|
375
387
|
|
|
376
|
-
|
|
388
|
+
- inline 选中后并行生成 Markdown/HTML/CSS/JS 或附件;
|
|
389
|
+
- 把 draft / 中间产物放进 `artifacts/`(draft 走 `scratch/`);
|
|
390
|
+
- 把“写进 `artifacts/`”当成已交付——auto-scan 是 OFF,文件 carrier 必须有显式 receipt;
|
|
391
|
+
- 用 role 模板或 task 流程覆盖 Runtime carrier directive。
|
|
377
392
|
|
|
378
393
|
**Self-check checkpoint**:
|
|
379
394
|
|
|
380
|
-
`cloud task update --status review` 内嵌调用本地 daemon `/v1/checkpoints/pre_status_change`。该 hook 比较 `artifacts/` 内文件 sha256 与已 attach
|
|
395
|
+
`cloud task update --status review` 内嵌调用本地 daemon `/v1/checkpoints/pre_status_change`。该 hook 比较 `artifacts/` 内文件 sha256 与已 attach Asset.contentHash,若 diff 非空:
|
|
381
396
|
|
|
382
397
|
- exit code = 12
|
|
383
398
|
- stderr 列出未 attach 的文件路径 + hash + size
|