@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
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
"""Offline regression gates for the resource audit (unittest, no account access)."""
|
|
2
|
+
import contextlib
|
|
3
|
+
import importlib.util
|
|
4
|
+
import io
|
|
5
|
+
import json
|
|
6
|
+
import os
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
import subprocess
|
|
9
|
+
import sys
|
|
10
|
+
import tempfile
|
|
11
|
+
import unittest
|
|
12
|
+
from unittest.mock import patch
|
|
13
|
+
|
|
14
|
+
from docx import Document
|
|
15
|
+
from docx.oxml import OxmlElement
|
|
16
|
+
from openpyxl import Workbook, load_workbook
|
|
17
|
+
from openpyxl.worksheet.datavalidation import DataValidation
|
|
18
|
+
from openpyxl.worksheet.table import Table
|
|
19
|
+
from PIL import Image
|
|
20
|
+
from pptx import Presentation
|
|
21
|
+
from pptx.chart.data import CategoryChartData
|
|
22
|
+
from pptx.enum.chart import XL_CHART_TYPE
|
|
23
|
+
from pypdf import PdfReader, PdfWriter
|
|
24
|
+
from reportlab.pdfgen.canvas import Canvas
|
|
25
|
+
|
|
26
|
+
ROOT = Path(__file__).resolve().parents[1] / 'references'
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def module(kind, name):
|
|
30
|
+
path = ROOT / kind / 'scripts' / (name + '.py')
|
|
31
|
+
sys.path.insert(0, str(path.parent))
|
|
32
|
+
spec = importlib.util.spec_from_file_location(name, path)
|
|
33
|
+
result = importlib.util.module_from_spec(spec)
|
|
34
|
+
spec.loader.exec_module(result)
|
|
35
|
+
return result
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class ResourceRegression(unittest.TestCase):
|
|
39
|
+
def test_pdf_rasterizer_runtime_fallback_and_boundaries(self):
|
|
40
|
+
raster = module('pdf', '_raster')
|
|
41
|
+
with patch.object(raster, 'available_backends', return_value=['pypdfium2', 'pdftoppm']), patch.object(raster, '_via_pdfium', side_effect=RuntimeError('renderer unavailable')), patch.object(raster, '_via_pdftoppm', return_value='image') as fallback:
|
|
42
|
+
self.assertEqual(raster.rasterize_page('fake.pdf', 1), 'image')
|
|
43
|
+
fallback.assert_called_once()
|
|
44
|
+
with self.assertRaises(ValueError): raster.rasterize_page('fake.pdf', 0)
|
|
45
|
+
with self.assertRaises(ValueError): raster.rasterize_page('fake.pdf', 1, dpi=100000)
|
|
46
|
+
|
|
47
|
+
def test_docx_existing_generic_comment_part_persists_deletion(self):
|
|
48
|
+
from docx.opc.part import Part
|
|
49
|
+
from docx.opc.packuri import PackURI
|
|
50
|
+
from docx.opc.constants import RELATIONSHIP_TYPE as RT
|
|
51
|
+
comments = module('docx', 'docx_comments')
|
|
52
|
+
d = Document(); d.add_paragraph('text')
|
|
53
|
+
blob = f'<w:comments xmlns:w="{comments.W}"><w:comment w:id="0"><w:p><w:r><w:t>old</w:t></w:r></w:p></w:comment></w:comments>'.encode()
|
|
54
|
+
part = Part(PackURI('/word/comments.xml'), comments.COMMENTS_CT, blob, d.part.package)
|
|
55
|
+
d.part.relate_to(part, RT.COMMENTS)
|
|
56
|
+
self.assertTrue(comments.delete_comment(d, '0'))
|
|
57
|
+
path = self.dir / 'comments.docx'; d.save(path)
|
|
58
|
+
self.assertEqual(comments.list_comments(Document(path)), [])
|
|
59
|
+
|
|
60
|
+
def test_pdf_unicode_requires_explicit_font_and_empty_split_rejected(self):
|
|
61
|
+
create = module('pdf', 'pdf_create')
|
|
62
|
+
with contextlib.redirect_stderr(io.StringIO()):
|
|
63
|
+
self.assertNotEqual(create.build_pdf({'elements': [{'type': 'paragraph', 'text': '\u4e2d\u6587'}]}, str(self.dir / 'bad.pdf')), 0)
|
|
64
|
+
self.assertFalse((self.dir / 'bad.pdf').exists())
|
|
65
|
+
split = module('pdf', 'pdf_split')
|
|
66
|
+
with self.assertRaises(ValueError): split.parse_pages(' , ', 2)
|
|
67
|
+
|
|
68
|
+
def test_xlsx_table_partial_column_change_fails_before_output(self):
|
|
69
|
+
w = Workbook(); s = w.active
|
|
70
|
+
s.append(['first', 'second']); s.append([1, 2]); s.add_table(Table(displayName='T', ref='A1:B2'))
|
|
71
|
+
src = self.dir / 'table.xlsx'; dest = self.dir / 'edited.xlsx'; w.save(src)
|
|
72
|
+
result = self.cli('xlsx', 'xlsx_restructure', src, '--delete-cols', 'A', '--out', dest)
|
|
73
|
+
self.assertNotEqual(result.returncode, 0)
|
|
74
|
+
self.assertFalse(dest.exists())
|
|
75
|
+
self.assertIn('table', result.stderr.lower())
|
|
76
|
+
|
|
77
|
+
def test_xlsx_insert_table_column_keeps_schema_and_filter_consistent(self):
|
|
78
|
+
w = Workbook(); s = w.active
|
|
79
|
+
s.append(['first', 'second']); s.append([1, 2]); s.add_table(Table(displayName='T', ref='A1:B2'))
|
|
80
|
+
src = self.dir / 'table.xlsx'; dest = self.dir / 'edited.xlsx'; w.save(src)
|
|
81
|
+
result = self.cli('xlsx', 'xlsx_restructure', src, '--insert-cols', 'B', '--out', dest)
|
|
82
|
+
self.assertEqual(result.returncode, 0, result.stderr)
|
|
83
|
+
s = load_workbook(dest).active; t = s.tables['T']
|
|
84
|
+
self.assertEqual(t.ref, 'A1:C2'); self.assertEqual(t.autoFilter.ref, t.ref)
|
|
85
|
+
self.assertEqual([c.name for c in t.tableColumns], [s.cell(1, i).value for i in range(1, 4)])
|
|
86
|
+
self.assertEqual(len(t.tableColumns), 3)
|
|
87
|
+
|
|
88
|
+
def setUp(self):
|
|
89
|
+
self.tmp = tempfile.TemporaryDirectory()
|
|
90
|
+
self.addCleanup(self.tmp.cleanup)
|
|
91
|
+
self.dir = Path(self.tmp.name)
|
|
92
|
+
|
|
93
|
+
def cli(self, kind, name, *args):
|
|
94
|
+
return subprocess.run([sys.executable, '-B', str(ROOT / kind / 'scripts' / (name + '.py')),
|
|
95
|
+
*map(str, args)], capture_output=True, text=True, timeout=20)
|
|
96
|
+
|
|
97
|
+
def test_docx_replacement_terminates_without_rescanning_new_text(self):
|
|
98
|
+
code = "from docx import Document; from docx_common import replace_in_paragraph; p=Document().add_paragraph('x x'); assert replace_in_paragraph(p,'x','xx')==2; assert p.text=='xx xx'"
|
|
99
|
+
try:
|
|
100
|
+
result = subprocess.run([sys.executable, '-B', '-c', code], timeout=2,
|
|
101
|
+
env={**os.environ, 'PYTHONPATH': str(ROOT / 'docx/scripts')}, capture_output=True)
|
|
102
|
+
except subprocess.TimeoutExpired:
|
|
103
|
+
self.fail('replacement rescans generated text and does not terminate')
|
|
104
|
+
self.assertEqual(result.returncode, 0, result.stderr)
|
|
105
|
+
|
|
106
|
+
def test_docx_accepted_text_and_namespace_independent_revision_detection(self):
|
|
107
|
+
d = Document(); p = d.add_paragraph('before ')
|
|
108
|
+
ins = OxmlElement('w:ins'); r = OxmlElement('w:r'); t = OxmlElement('w:t')
|
|
109
|
+
t.text = 'inserted'; r.append(t); ins.append(r); p._p.append(ins)
|
|
110
|
+
reader = module('docx', 'docx_read')
|
|
111
|
+
self.assertEqual(reader.extract_text(d)['body'], ['before inserted'])
|
|
112
|
+
p._p.remove(ins); p._p.append(OxmlElement('w:moveFrom'))
|
|
113
|
+
dest = self.dir / 'move.docx'; d.save(dest)
|
|
114
|
+
self.assertTrue(reader.detect_revisions(dest)['has_tracked_changes'])
|
|
115
|
+
|
|
116
|
+
def test_docx_structural_revision_is_not_silently_resolved(self):
|
|
117
|
+
d = Document(); p = d.add_paragraph('text')
|
|
118
|
+
props = p._p.get_or_add_pPr(); props.append(OxmlElement('w:del'))
|
|
119
|
+
revision = module('docx', 'docx_revisions')
|
|
120
|
+
self.assertEqual(revision.resolve(d, True), 0)
|
|
121
|
+
self.assertIsNotNone(props.find(revision.q('del')))
|
|
122
|
+
|
|
123
|
+
def test_docx_validator_keeps_relationship_source_parts_separate(self):
|
|
124
|
+
image = self.dir / 'tiny.png'; Image.new('RGB', (3, 3), 'red').save(image)
|
|
125
|
+
d = Document(); d.add_picture(str(image)); d.sections[0].header.paragraphs[0].add_run().add_picture(str(image))
|
|
126
|
+
path = self.dir / 'doc.docx'; d.save(path)
|
|
127
|
+
for seed in range(5):
|
|
128
|
+
code = f"from docx_validate import validate; import json; print(json.dumps(validate({str(path)!r})))"
|
|
129
|
+
p = subprocess.run([sys.executable, '-B', '-c', code], capture_output=True, text=True,
|
|
130
|
+
env={**os.environ, 'PYTHONPATH': str(ROOT / 'docx/scripts'), 'PYTHONHASHSEED': str(seed)})
|
|
131
|
+
self.assertTrue(json.loads(p.stdout)['ok'], p.stdout)
|
|
132
|
+
|
|
133
|
+
def test_pdf_flatten_removes_fields_and_widgets_but_retains_value(self):
|
|
134
|
+
src = self.dir / 'form.pdf'; out = self.dir / 'flat.pdf'; fields = self.dir / 'values.json'
|
|
135
|
+
c = Canvas(str(src)); c.acroForm.textfield(name='name', x=20, y=700, width=100, height=20); c.showPage(); c.save()
|
|
136
|
+
fields.write_text('{"name":"Alice"}')
|
|
137
|
+
p = self.cli('pdf', 'pdf_fill_form', src, '--fields-json', fields, '-o', out, '--flatten')
|
|
138
|
+
self.assertEqual(p.returncode, 0, p.stderr)
|
|
139
|
+
doc = PdfReader(out)
|
|
140
|
+
self.assertFalse(doc.get_fields())
|
|
141
|
+
self.assertFalse(doc.pages[0].get('/Annots'))
|
|
142
|
+
self.assertIn('Alice', doc.pages[0].extract_text())
|
|
143
|
+
|
|
144
|
+
def test_pdf_attachment_names_cannot_overwrite_existing_or_drop_duplicates(self):
|
|
145
|
+
src = self.dir / 'attachments.pdf'; dest = self.dir / 'out'; dest.mkdir()
|
|
146
|
+
(dest / 'same.txt').write_bytes(b'existing')
|
|
147
|
+
writer = PdfWriter(); writer.add_blank_page(100, 100)
|
|
148
|
+
writer.add_attachment('same.txt', b'first'); writer.add_attachment('same.txt', b'second'); writer.write(src)
|
|
149
|
+
result = self.cli('pdf', 'pdf_meta', src, '--extract-attachments', dest)
|
|
150
|
+
self.assertEqual(result.returncode, 0, result.stderr)
|
|
151
|
+
self.assertEqual((dest / 'same.txt').read_bytes(), b'existing')
|
|
152
|
+
self.assertEqual({p.read_bytes() for p in dest.iterdir()}, {b'existing', b'first', b'second'})
|
|
153
|
+
|
|
154
|
+
def test_csv_literal_mode_does_not_create_formulas(self):
|
|
155
|
+
source = self.dir / 'in.csv'; out = self.dir / 'out.xlsx'; source.write_text('value\n=1+1\n')
|
|
156
|
+
self.assertEqual(self.cli('xlsx', 'csv_to_xlsx', source, out, '--no-infer').returncode, 0)
|
|
157
|
+
self.assertEqual(load_workbook(out).active['A2'].data_type, 's')
|
|
158
|
+
|
|
159
|
+
def test_xlsx_formula_token_types_and_whole_column_ranges(self):
|
|
160
|
+
rw = module('xlsx', 'xlsx_restructure').RefRewriter('Sheet1', 'cols', 1, 1, False)
|
|
161
|
+
for source, expected in [('=SUM(B:B)', '=SUM(C:C)'), ('=SUM(Table1[A1])', '=SUM(Table1[A1])'),
|
|
162
|
+
('="A1"&A1', '="A1"&B1'), ('=SUM(1:2)', '=SUM(1:2)'),
|
|
163
|
+
("='[other.xlsx]Sheet1'!A1", "='[other.xlsx]Sheet1'!A1")]:
|
|
164
|
+
self.assertEqual(rw.rewrite(source, 'Sheet1'), expected)
|
|
165
|
+
|
|
166
|
+
def test_xlsx_column_dimensions_survive_shift(self):
|
|
167
|
+
src = self.dir / 'in.xlsx'; w = Workbook(); w.active.column_dimensions['B'].width = 24; w.save(src)
|
|
168
|
+
p = self.cli('xlsx', 'xlsx_restructure', src, '--insert-cols', 'B')
|
|
169
|
+
self.assertEqual(p.returncode, 0, p.stderr)
|
|
170
|
+
self.assertEqual(load_workbook(src).active.column_dimensions['C'].width, 24)
|
|
171
|
+
|
|
172
|
+
def test_xlsx_full_delete_removes_validation_table_and_dimension(self):
|
|
173
|
+
src = self.dir / 'in.xlsx'; w = Workbook(); s = w.active
|
|
174
|
+
s.append(['name']); s.append(['value']); s.add_table(Table(displayName='Items', ref='A1:A2'))
|
|
175
|
+
dv = DataValidation(type='whole'); dv.add('A1:A2'); s.add_data_validation(dv); s.row_dimensions[1].height = 30; w.save(src)
|
|
176
|
+
p = self.cli('xlsx', 'xlsx_restructure', src, '--delete-rows', '1:2')
|
|
177
|
+
self.assertEqual(p.returncode, 0, p.stderr); s = load_workbook(src).active
|
|
178
|
+
self.assertFalse(s.tables); self.assertFalse(s.data_validations.dataValidation); self.assertNotIn(1, s.row_dimensions)
|
|
179
|
+
|
|
180
|
+
def test_pptx_mixed_runs_and_group_text_are_all_replaced(self):
|
|
181
|
+
prs = Presentation(); s = prs.slides.add_slide(prs.slide_layouts[6])
|
|
182
|
+
tf = s.shapes.add_group_shape().shapes.add_textbox(0, 0, 1000000, 1000000).text_frame
|
|
183
|
+
for value in ['foo ', 'f', 'oo']: tf.paragraphs[0].add_run().text = value
|
|
184
|
+
self.assertEqual(module('powerpoint', 'pptx_edit').replace_text(prs, 'foo', 'bar'), 2)
|
|
185
|
+
self.assertEqual(tf.text, 'bar bar')
|
|
186
|
+
|
|
187
|
+
def test_pptx_copy_preserves_background(self):
|
|
188
|
+
prs = Presentation(); s = prs.slides.add_slide(prs.slide_layouts[6]); edit = module('powerpoint', 'pptx_edit')
|
|
189
|
+
edit.set_background(s, 'FF0000'); edit.duplicate_slide(prs, 0)
|
|
190
|
+
self.assertEqual(prs.slides[1].background.fill.type, s.background.fill.type)
|
|
191
|
+
|
|
192
|
+
def test_pptx_grouped_chart_copy_is_refused(self):
|
|
193
|
+
prs = Presentation(); s = prs.slides.add_slide(prs.slide_layouts[6]); data = CategoryChartData()
|
|
194
|
+
data.categories = ['A']; data.add_series('S', [1])
|
|
195
|
+
chart = s.shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, 0, 0, 1000000, 1000000, data)
|
|
196
|
+
s.shapes.add_group_shape([chart])
|
|
197
|
+
with self.assertRaises(SystemExit): module('powerpoint', 'pptx_edit').duplicate_slide(prs, 0)
|
|
198
|
+
|
|
199
|
+
def test_render_returns_only_current_generation(self):
|
|
200
|
+
out = self.dir / 'render'; out.mkdir(); (out / 'slide-99.png').write_bytes(b'stale')
|
|
201
|
+
renderer = module('powerpoint', 'pptx_render')
|
|
202
|
+
def fake_run(cmd, **kwargs):
|
|
203
|
+
if '--outdir' in cmd: (Path(cmd[cmd.index('--outdir') + 1]) / 'deck.pdf').write_bytes(b'pdf')
|
|
204
|
+
else: Path(cmd[-1] + '-1.png').write_bytes(b'current')
|
|
205
|
+
return subprocess.CompletedProcess(cmd, 0, '', '')
|
|
206
|
+
with patch.object(renderer, 'find_tools', return_value=('soffice', 'pdftoppm', [])), patch.object(renderer.subprocess, 'run', side_effect=fake_run):
|
|
207
|
+
result = renderer.render('deck.pptx', str(out), 'slide', 100)
|
|
208
|
+
self.assertEqual(len(result['files']), 1)
|
|
209
|
+
self.assertEqual(Path(result['files'][0]).read_bytes(), b'current')
|
|
210
|
+
|
|
211
|
+
def test_pdf_reverse_and_empty_ranges_are_errors(self):
|
|
212
|
+
for name in ('pdf_page_image', 'pdf_stamp'):
|
|
213
|
+
helper = module('pdf', name)
|
|
214
|
+
for value in ('3-1', '', '0-0'):
|
|
215
|
+
with self.assertRaises(ValueError): helper.parse_pages(value, 3)
|
|
216
|
+
|
|
217
|
+
def test_docx_strict_template_failure_does_not_publish(self):
|
|
218
|
+
src = self.dir / 'in.docx'; out = self.dir / 'out.docx'; values = self.dir / 'values.json'
|
|
219
|
+
d = Document(); d.add_paragraph('{{missing}}'); d.save(src); values.write_text('{}')
|
|
220
|
+
self.assertNotEqual(self.cli('docx', 'docx_template', src, values, out, '--strict').returncode, 0)
|
|
221
|
+
self.assertFalse(out.exists())
|
|
222
|
+
|
|
223
|
+
def test_docx_linked_headers_are_not_modified_twice(self):
|
|
224
|
+
d = Document(); d.sections[0].header.paragraphs[0].text = 'x'; d.add_section()
|
|
225
|
+
common = module('docx', 'docx_common')
|
|
226
|
+
for paragraph in common.iter_all_paragraphs(d): common.replace_in_paragraph(paragraph, 'x', 'xx')
|
|
227
|
+
self.assertEqual(d.sections[0].header.paragraphs[0].text, 'xx')
|
|
228
|
+
|
|
229
|
+
def test_table_append_cannot_overwrite_cells_or_leave_stale_filter(self):
|
|
230
|
+
w = Workbook(); s = w.active; s.append(['name']); s.append(['first'])
|
|
231
|
+
table = Table(displayName='Items', ref='A1:A2'); s.add_table(table)
|
|
232
|
+
src = self.dir / 'table.xlsx'; w.save(src); s = load_workbook(src).active
|
|
233
|
+
edit = module('xlsx', 'xlsx_edit'); s['A3'] = 'existing'
|
|
234
|
+
with self.assertRaises(ValueError): edit.table_append(s, 'Items', ['second'])
|
|
235
|
+
s['A3'] = None; edit.table_append(s, 'Items', ['second'])
|
|
236
|
+
self.assertEqual(s.tables['Items'].autoFilter.ref, 'A1:A3')
|
|
237
|
+
|
|
238
|
+
def test_pymupdf_page_selection_applies_to_tables(self):
|
|
239
|
+
import types
|
|
240
|
+
helper = module('pdf', 'extract_pymupdf'); visited = []
|
|
241
|
+
class Page:
|
|
242
|
+
def __init__(self, number): self.number = number
|
|
243
|
+
def find_tables(self): visited.append(self.number); return types.SimpleNamespace(tables=[])
|
|
244
|
+
with patch.dict(sys.modules, {'pymupdf': types.SimpleNamespace(open=lambda p: [Page(0), Page(1)])}):
|
|
245
|
+
helper.extract_tables('fake.pdf', pages=[1])
|
|
246
|
+
self.assertEqual(visited, [1])
|
|
247
|
+
|
|
248
|
+
def test_marker_json_renderer_and_pil_image_output(self):
|
|
249
|
+
import types
|
|
250
|
+
helper = module('pdf', 'extract_marker'); options = []
|
|
251
|
+
class Config:
|
|
252
|
+
def __init__(self, config): options.append(config)
|
|
253
|
+
def generate_config_dict(self): return options[-1]
|
|
254
|
+
def get_renderer(self): return 'renderer'
|
|
255
|
+
def get_processors(self): return []
|
|
256
|
+
def get_llm_service(self): return None
|
|
257
|
+
rendered = types.SimpleNamespace(model_dump=lambda: {'children': [{'text': 'hello'}]})
|
|
258
|
+
def converter(**kwargs):
|
|
259
|
+
self.assertEqual(kwargs.get('renderer'), 'renderer')
|
|
260
|
+
return lambda path: rendered
|
|
261
|
+
modules = {'marker.converters.pdf': types.SimpleNamespace(PdfConverter=converter),
|
|
262
|
+
'marker.models': types.SimpleNamespace(create_model_dict=lambda: {}),
|
|
263
|
+
'marker.config.parser': types.SimpleNamespace(ConfigParser=Config),
|
|
264
|
+
'marker.output': types.SimpleNamespace(text_from_rendered=lambda obj: ('', 'json', {'image.png': Image.new('RGB', (3, 3))}))}
|
|
265
|
+
output = io.StringIO()
|
|
266
|
+
with patch.dict(sys.modules, modules), contextlib.redirect_stdout(output): helper.convert('fake.pdf', str(self.dir), 'json')
|
|
267
|
+
self.assertEqual(json.loads(output.getvalue())['children'][0]['text'], 'hello')
|
|
268
|
+
self.assertTrue((self.dir / 'image.png').exists())
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
if __name__ == '__main__':
|
|
272
|
+
unittest.main()
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: okr
|
|
3
|
+
scope: persistence
|
|
4
|
+
description: Draft and track a strategic OKR charter — turn a human's plain-language goal into ONE Objective + 2-5 measurable Key Results, link existing tasks, and route the commit to a human sponsor. Use whenever the user wants to set a strategic goal / OKR / objective, "立个 OKR", or "把 X 推到 GA". Executes via the `cloud okr` CLI.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# OKR
|
|
8
|
+
|
|
9
|
+
Use this skill to **draft an OKR charter** from a human's goal: one Objective, 2-5 Key Results, each with a baseline→target and a *real* evidence source, plus links to the tasks that move them. Every operation goes through the `cloud okr` CLI — never tell the user an objective was created / committed / scored unless the command actually returned an id and state.
|
|
10
|
+
|
|
11
|
+
You **draft and propose**. The human **commits**. That split is the whole point of this skill (see ⛔ hard rules).
|
|
12
|
+
|
|
13
|
+
## When to use
|
|
14
|
+
|
|
15
|
+
- The user wants to **set a strategic goal**: "let's set an OKR for Q3", "立个 OKR", "make reliability our objective this cycle", "把搜索推到 GA".
|
|
16
|
+
- A long-running objective should become a tracked **Objective + Key Results**, not a loose `kind=goal` card. (When the user says "make this a goal", draft an objective charter here, not a plain task.)
|
|
17
|
+
- You need to **link** existing tactical tasks to the Key Result they serve.
|
|
18
|
+
- The user wants to **see OKR health** — the objective tree with KR progress.
|
|
19
|
+
|
|
20
|
+
If the request is a single tactical deliverable ("review this PR", "write the report"), that's the `tasks` skill, not this one. Strategic outcome → here; tactical card under an existing objective → `tasks` with the KR link.
|
|
21
|
+
|
|
22
|
+
## Charter drafting methodology
|
|
23
|
+
|
|
24
|
+
From a human's plain-language goal, draft **ONE Objective + 2-5 Key Results**. Before drafting, ask for whatever is missing:
|
|
25
|
+
|
|
26
|
+
- **Outcome** — what observable end-state defines success? (the Objective title)
|
|
27
|
+
- **Deadline / cycle** — which cycle does this belong to? (`--cycle 2026-Q3`)
|
|
28
|
+
- **Owner** — which agent/human drives it? (`--owner <imUserId>`)
|
|
29
|
+
- **Sponsor** — which **human/admin** stands behind it? (`--sponsor <human imUserId>`) — **required for a committed objective.**
|
|
30
|
+
- **Per KR**: a baseline → target, and a **measurable source**. Today's KNOWN sources are ONLY:
|
|
31
|
+
- **task acceptance** — a `task`/`milestone` KR whose progress is the count of linked tasks that pass acceptance.
|
|
32
|
+
- **IMMetricEvent metric binding** — a `metric` KR bound to an existing metric stream (`--metric-namespace --metric-name --metric-agg`).
|
|
33
|
+
- **human-confirm** — a `qualitative` KR a human scores explicitly with a value + evidence.
|
|
34
|
+
|
|
35
|
+
Then:
|
|
36
|
+
|
|
37
|
+
1. **Draft the objective** (agent proposes — it is NOT yet committed):
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
cloud okr objective create \
|
|
41
|
+
--workspace "$PRISMER_WORKSPACE_ID" \
|
|
42
|
+
--title "Search is GA-ready" \
|
|
43
|
+
--type committed \
|
|
44
|
+
--narrative "Definition of done: search ships to all users with p95 < 300ms and zero P0s." \
|
|
45
|
+
--cycle 2026-Q3 \
|
|
46
|
+
--owner <imUserId> \
|
|
47
|
+
--sponsor <human imUserId>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
2. **Propose each KR** with baseline/target/unit/direction/weight + an evidence policy:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# metric-backed KR (bound to a real IMMetricEvent stream)
|
|
54
|
+
cloud okr kr add <objectiveId> \
|
|
55
|
+
--title "p95 search latency under 300ms" \
|
|
56
|
+
--type metric --baseline 480 --target 300 --unit ms --direction decrease --weight 2 \
|
|
57
|
+
--metric-namespace search.latency --metric-name p95 --metric-agg last \
|
|
58
|
+
--evidence "IMMetricEvent search.latency:p95, last value per cycle"
|
|
59
|
+
|
|
60
|
+
# task-backed KR (progress = linked tasks that pass acceptance)
|
|
61
|
+
cloud okr kr add <objectiveId> \
|
|
62
|
+
--title "Ship 4 launch-blocker fixes" \
|
|
63
|
+
--type task --baseline 0 --target 4 --direction increase \
|
|
64
|
+
--evidence "count of linked tasks with passing acceptance"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
3. **Link existing tasks** to the KR they serve (don't create unscoped strategic tasks):
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
cloud okr link <objectiveId> <keyResultId> <taskId>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
4. **STOP and hand the commit to the human sponsor.** Print the objective id + KR ids and say: *"Charter drafted. @<sponsor> (human) — review and `cloud okr objective commit <id>` when you approve."* Do **not** commit it yourself.
|
|
74
|
+
|
|
75
|
+
## ⛔ Hard rules
|
|
76
|
+
|
|
77
|
+
These are enforced server-side; violating them returns a `403` you cannot work around.
|
|
78
|
+
|
|
79
|
+
1. **NEVER commit an objective yourself.** `cloud okr objective commit` requires a **human sponsor**; an agent caller gets `AGENT_CANNOT_COMMIT`. Your job ends at *draft + propose*. Surface the objective and ask the human sponsor to commit.
|
|
80
|
+
2. **A `committed`-type objective REQUIRES a human/admin sponsor** (`--sponsor <human imUserId>`). Without one, commit returns `SPONSOR_MUST_BE_HUMAN`. An `aspirational` objective may skip the sponsor.
|
|
81
|
+
3. **NEVER score a `qualitative` KR without an explicit, human-confirmed value + evidence.** Use `cloud okr kr recompute <krId> --value <n> --evidence <ref>` and only with a value the human actually gave you. Metric/task KRs recompute from their real source automatically — don't hand-feed numbers there.
|
|
82
|
+
4. **Bind KRs ONLY to today's sources** — task acceptance, IMMetricEvent metric binding, or human-confirm. Do **NOT** invent token/spend/credit targets, CRM pipelines, or analytics metrics — those data sources do not exist (FROZEN). A KR whose evidence you can't name is not a KR; ask the human how it will be measured.
|
|
83
|
+
5. **Do NOT create unscoped strategic tasks.** Tactical work for an objective is an existing task **linked to a KR** via `cloud okr link`. If strategic work has no task yet, draft the objective/KR first, then create the task (via the `tasks` skill) and link it.
|
|
84
|
+
|
|
85
|
+
## Lifecycle back-half
|
|
86
|
+
|
|
87
|
+
After an objective is committed it runs through `committed → graded → archived`:
|
|
88
|
+
|
|
89
|
+
- **Check-ins** — you (an agent) MAY draft a check-in. It snapshots the score + each KR's current/status. `cloud okr objective checkin <objectiveId> [--note "<t>"] [--confidence 0.6] [--decision continue|rescope|add-resource|pause|cancel]`.
|
|
90
|
+
- **Grade and archive are HUMAN decisions.** `cloud okr objective grade <id>` and `cloud okr objective archive <id>` return `AGENT_CANNOT_GRADE` (403) for an agent caller — surface the objective and ask the human to grade. Grade freezes the score (it stops moving even if a KR's evidence changes). An archived objective is read-only.
|
|
91
|
+
|
|
92
|
+
Check-in `--decision`, `--confidence`, and the reward/resource shapes carry **no token/credit meaning** — there is no compensation here.
|
|
93
|
+
|
|
94
|
+
## FROZEN / out of scope
|
|
95
|
+
|
|
96
|
+
This skill draws ONE Objective + its KRs and links tasks. It does **NOT** propose, create, or mutate any of the following — they are explicitly out of scope for release203 and have no endpoints here:
|
|
97
|
+
|
|
98
|
+
- **Guardrails** — no guardrail proposals or activations.
|
|
99
|
+
- **Resource / budget allocation** — no credit/budget/resource grants.
|
|
100
|
+
- **Scenario packs** — none.
|
|
101
|
+
- **Proactive / recurring check-ins** — you record a check-in only when asked; there is no auto-scheduler.
|
|
102
|
+
- **Compensation** — no reward/bonus economics (the grade carries no payout).
|
|
103
|
+
|
|
104
|
+
If the user asks for any of these, say it's not part of the OKR charter flow yet rather than improvising one.
|
|
105
|
+
|
|
106
|
+
## CLI Reference
|
|
107
|
+
|
|
108
|
+
### Objectives
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# Draft (agent proposes — NOT committed)
|
|
112
|
+
cloud okr objective create --workspace <id> --title "<outcome>" \
|
|
113
|
+
[--type committed|aspirational] [--narrative "<DoD>"] [--cycle 2026-Q3] \
|
|
114
|
+
[--owner <imUserId>] [--sponsor <human imUserId>] [--parent <objectiveId>] [--confidence 0.7]
|
|
115
|
+
|
|
116
|
+
cloud okr objective list --workspace <id> [--state <state>]
|
|
117
|
+
cloud okr objective get <objectiveId>
|
|
118
|
+
|
|
119
|
+
# HUMAN/SPONSOR ONLY — an agent caller gets AGENT_CANNOT_COMMIT
|
|
120
|
+
cloud okr objective commit <objectiveId>
|
|
121
|
+
cloud okr objective close <objectiveId> [--score 0.8]
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Key Results
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
cloud okr kr add <objectiveId> --title "<measurable result>" \
|
|
128
|
+
[--type metric|task|milestone|qualitative] \
|
|
129
|
+
[--baseline <n>] [--target <n>] [--unit <u>] \
|
|
130
|
+
[--direction increase|decrease|maintain|binary] [--weight <n>] \
|
|
131
|
+
[--metric-namespace <ns> --metric-name <name> --metric-agg avg|sum|last|count] \
|
|
132
|
+
[--evidence "<policy>"] [--source assigned|agent-proposed]
|
|
133
|
+
|
|
134
|
+
# Qualitative KR scoring — human-confirmed value + evidence ONLY
|
|
135
|
+
cloud okr kr recompute <keyResultId> [--value <n>] [--evidence <ref>]
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
> `--source` defaults to `agent-proposed` (you, the agent, are drafting). Pass `--source assigned` only when the human explicitly assigned the KR.
|
|
139
|
+
> `--metric-namespace` and `--metric-name` must be given together to bind a metric source.
|
|
140
|
+
|
|
141
|
+
### Linking + reading
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
cloud okr link <objectiveId> <keyResultId> <taskId> # scope a task to a KR
|
|
145
|
+
cloud okr insights --workspace <id> # the OKR tree + KR progress (never fabricated)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Output reporting
|
|
149
|
+
|
|
150
|
+
After any state-changing command, **echo back** the id and the **state the service returned** (not the state you expected). Example:
|
|
151
|
+
|
|
152
|
+
> Drafted objective `cmobj...` (state `draft`) with 3 KRs. @<sponsor> — `cloud okr objective commit cmobj...` to commit.
|
|
153
|
+
|
|
154
|
+
If a command exits non-zero, surface the error code verbatim — especially `AGENT_CANNOT_COMMIT` / `SPONSOR_MUST_BE_HUMAN`, which mean a human must act. **Never fabricate an objective/KR id or a KR value** — if you didn't run the command or it failed, say so.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: persona
|
|
3
|
+
scope: common
|
|
4
|
+
description: >
|
|
5
|
+
The discussion-only playbook for a Persona — a council participant
|
|
6
|
+
instantiated as a real agent from the `persona` role template (SS-02). Use
|
|
7
|
+
this when you have been convened into an expert roundtable as a distilled
|
|
8
|
+
public-record perspective. It defines HOW to participate: speak in-voice,
|
|
9
|
+
reason, and cite public materials — and declares the hard capability boundary
|
|
10
|
+
(no task.create / no skill.install / no spend / no publish). The boundary is
|
|
11
|
+
ENFORCED by the role's toolsetScope + mcpAllowlist + service authz, not by
|
|
12
|
+
this text; this skill is the behavioral norm that matches the gate.
|
|
13
|
+
license: MIT
|
|
14
|
+
compatibility:
|
|
15
|
+
- prismer-sdk
|
|
16
|
+
- hermes
|
|
17
|
+
metadata:
|
|
18
|
+
category: council
|
|
19
|
+
personaPolicy: public_distillation
|
|
20
|
+
disclaimerRequired: true
|
|
21
|
+
allowedUse: [analysis, debate, ideation]
|
|
22
|
+
forbiddenUse:
|
|
23
|
+
- impersonation
|
|
24
|
+
- private_claim
|
|
25
|
+
- task_create
|
|
26
|
+
- skill_install
|
|
27
|
+
- spend
|
|
28
|
+
- publish
|
|
29
|
+
capabilityBoundary:
|
|
30
|
+
intent: discussion-only
|
|
31
|
+
allowed: [speak, reason, cite_materials, recall_memory]
|
|
32
|
+
denied:
|
|
33
|
+
- capability: task.create
|
|
34
|
+
enforcedBy: [toolsetScope.deny(kanban,delegation,terminal,code_execution), mcpAllowlist.omit(prismer.task.*)]
|
|
35
|
+
- capability: skill.install
|
|
36
|
+
enforcedBy: [toolsetScope.deny(skills,terminal,code_execution), mcpAllowlist.omit(prismer.skill.install)]
|
|
37
|
+
- capability: spend
|
|
38
|
+
enforcedBy: [toolsetScope.deny(terminal,code_execution), skill_not_granted(wechat-pay), service_authz(payment_mandate)]
|
|
39
|
+
- capability: publish
|
|
40
|
+
enforcedBy: [mcpAllowlist.omit(prismer.evolve.publish,prismer.community.post), service_authz(owner_approval_gate)]
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
# Persona — discussion-only council participant
|
|
44
|
+
|
|
45
|
+
You have been convened into an expert roundtable as a **Persona**: a lens distilled
|
|
46
|
+
from the **public record** of a real, publicly-verifiable person. You are a real
|
|
47
|
+
agent with your own identity and session — but your capability surface is
|
|
48
|
+
deliberately **narrowed to discussion**.
|
|
49
|
+
|
|
50
|
+
## What you do
|
|
51
|
+
|
|
52
|
+
1. **Speak in-voice.** Hold one consistent vantage and voice across turns. You occupy
|
|
53
|
+
a distinct stakeholder position — surface what you can see that others cannot.
|
|
54
|
+
2. **Reason.** Weigh trade-offs, disagree substantively, name risks the room is missing.
|
|
55
|
+
3. **Cite materials.** Ground claims in the Council Brief and public record. Use
|
|
56
|
+
`memory_recall` / asset reads to pull evidence. When you cannot ground a point,
|
|
57
|
+
**say so** (honest degradation) — never fabricate a quote or a private fact.
|
|
58
|
+
|
|
59
|
+
## What you must NOT do (hard boundary)
|
|
60
|
+
|
|
61
|
+
You participate by **speaking, reasoning, and citing** — nothing else. The following
|
|
62
|
+
are **removed from you at the config layer** (they are not available tools, not a
|
|
63
|
+
matter of you choosing to abstain):
|
|
64
|
+
|
|
65
|
+
| Capability | Why it's off | Enforced by |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
| **Create / dispatch tasks** | You are a voice, not an executor | role `toolsetScope` deny `kanban`/`delegation`/`terminal`/`code_execution` + MCP allowlist omits `prismer.task.*` |
|
|
68
|
+
| **Install / manage skills** | You don't reshape the workspace | `toolsetScope` deny `skills`/`terminal` + MCP allowlist omits `prismer.skill.install` |
|
|
69
|
+
| **Spend / collect money** | No fiscal authority | `terminal`/`code_execution` denied (no `cloud pay` CLI), `wechat-pay` skill not granted, and the payment service requires a mandate |
|
|
70
|
+
| **Publish** (catalog / community / marketplace) | No outward-facing authority | MCP allowlist omits `prismer.evolve.publish` / `prismer.community.post`, and publishing already requires **owner approval** at the service layer |
|
|
71
|
+
|
|
72
|
+
If a discussion outcome genuinely needs a task, a purchase, or a publication:
|
|
73
|
+
**name that need in your reply and hand it to the workspace orchestrator**
|
|
74
|
+
(the Team Manager / council facilitator). Do not attempt it — the attempt would fail at the
|
|
75
|
+
capability gate anyway; naming it cleanly is the correct move.
|
|
76
|
+
|
|
77
|
+
## Disclaimer (compliance floor)
|
|
78
|
+
|
|
79
|
+
You are a **distilled public-record perspective, not the real person**. Keep that
|
|
80
|
+
framing visible. Never assert private facts, never impersonate, never let the room
|
|
81
|
+
treat your words as the person's private, authoritative statement.
|