@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,484 @@
|
|
|
1
|
+
# GitHub Repository Management
|
|
2
|
+
|
|
3
|
+
> Prismer scope: read auth.md first. All mutations below are examples for an
|
|
4
|
+
> explicitly authorized target/action, never an automatic checklist. Preserve the
|
|
5
|
+
> current dirty tree and long-lived branch; resolve the actual base branch and
|
|
6
|
+
> do not switch, commit, push, publish, merge, delete branches or send reviews
|
|
7
|
+
> unless requested. Use structured JSON for dynamic payloads, not shell string
|
|
8
|
+
> interpolation. Public visibility requires explicit intent. Collection reads
|
|
9
|
+
> must use scripts/github-api.py (complete Link pagination) or gh api --paginate;
|
|
10
|
+
> porcelain list limits and single-page curl output are not a complete inventory.
|
|
11
|
+
> Run shell pipelines with pipefail, record each exit status, and read back writes.
|
|
12
|
+
|
|
13
|
+
Create, clone, fork, configure, and manage GitHub repositories. Each section shows `gh` first, then the `git` + `curl` fallback.
|
|
14
|
+
|
|
15
|
+
## Prerequisites
|
|
16
|
+
|
|
17
|
+
Repository creation defaults below are private. Public publication needs explicit
|
|
18
|
+
intent. A secret gist is unlisted, not access-controlled; never put secrets in it.
|
|
19
|
+
|
|
20
|
+
- Authenticated with GitHub (see `auth.md` reference)
|
|
21
|
+
|
|
22
|
+
### Setup
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Resolve SKILL_ROOT from the installed prismer-github entry, not cwd.
|
|
26
|
+
source "$SKILL_ROOT/scripts/gh-env.sh"
|
|
27
|
+
AUTH="$GH_AUTH_METHOD"
|
|
28
|
+
OWNER="$GH_OWNER"
|
|
29
|
+
REPO="$GH_REPO"
|
|
30
|
+
OWNER_REPO="$GH_OWNER_REPO"
|
|
31
|
+
# token-unverified needs a successful API identity check before remote work.
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
If you're inside a repo already:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
source "$SKILL_ROOT/scripts/gh-env.sh"
|
|
38
|
+
OWNER="$GH_OWNER"; REPO="$GH_REPO"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 1. Cloning Repositories
|
|
44
|
+
|
|
45
|
+
Cloning is pure `git` — works identically either way:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# Clone via HTTPS (works with credential helper or token-embedded URL)
|
|
49
|
+
git clone https://github.com/owner/repo-name.git
|
|
50
|
+
|
|
51
|
+
# Clone into a specific directory
|
|
52
|
+
git clone https://github.com/owner/repo-name.git ./my-local-dir
|
|
53
|
+
|
|
54
|
+
# Shallow clone (faster for large repos)
|
|
55
|
+
git clone --depth 1 https://github.com/owner/repo-name.git
|
|
56
|
+
|
|
57
|
+
# Clone a specific branch
|
|
58
|
+
git clone --branch develop https://github.com/owner/repo-name.git
|
|
59
|
+
|
|
60
|
+
# Clone via SSH (if SSH is configured)
|
|
61
|
+
git clone git@github.com:owner/repo-name.git
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**With gh (shorthand):**
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
gh repo clone owner/repo-name
|
|
68
|
+
gh repo clone owner/repo-name -- --depth 1
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## 2. Creating Repositories
|
|
72
|
+
|
|
73
|
+
**With gh:**
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Create a public repo and clone it
|
|
77
|
+
gh repo create my-new-project --private --clone
|
|
78
|
+
|
|
79
|
+
# Private, with description and license
|
|
80
|
+
gh repo create my-new-project --private --description "A useful tool" --license MIT --clone
|
|
81
|
+
|
|
82
|
+
# Under an organization
|
|
83
|
+
gh repo create my-org/my-new-project --private --clone
|
|
84
|
+
|
|
85
|
+
# From existing local directory
|
|
86
|
+
cd /path/to/existing/project
|
|
87
|
+
gh repo create my-project --source . --private --push
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**With git + curl:**
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Create the remote repo via API
|
|
94
|
+
curl --fail-with-body -sS --max-time 30 -X POST \
|
|
95
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
96
|
+
https://api.github.com/user/repos \
|
|
97
|
+
-d '{
|
|
98
|
+
"name": "my-new-project",
|
|
99
|
+
"description": "A useful tool",
|
|
100
|
+
"private": true,
|
|
101
|
+
"auto_init": true,
|
|
102
|
+
"license_template": "mit"
|
|
103
|
+
}'
|
|
104
|
+
|
|
105
|
+
# Clone it
|
|
106
|
+
git clone https://github.com/$GH_USER/my-new-project.git
|
|
107
|
+
cd my-new-project
|
|
108
|
+
|
|
109
|
+
# -- OR -- push an existing local directory to the new repo
|
|
110
|
+
cd /path/to/existing/project
|
|
111
|
+
git init
|
|
112
|
+
git add -- <explicit-task-owned-files>
|
|
113
|
+
git commit -m "Initial commit"
|
|
114
|
+
git remote add origin https://github.com/$GH_USER/my-new-project.git
|
|
115
|
+
git push -u origin main
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
To create under an organization:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
curl --fail-with-body -sS --max-time 30 -X POST \
|
|
122
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
123
|
+
https://api.github.com/orgs/my-org/repos \
|
|
124
|
+
-d '{"name": "my-new-project", "private": true}'
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### From a Template
|
|
128
|
+
|
|
129
|
+
**With gh:**
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
gh repo create my-new-app --template owner/template-repo --private --clone
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**With curl:**
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
curl --fail-with-body -sS --max-time 30 -X POST \
|
|
139
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
140
|
+
https://api.github.com/repos/owner/template-repo/generate \
|
|
141
|
+
-d '{"owner": "'"$GH_USER"'", "name": "my-new-app", "private": true}'
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## 3. Forking Repositories
|
|
145
|
+
|
|
146
|
+
**With gh:**
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
gh repo fork owner/repo-name --clone
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**With git + curl:**
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# Create the fork via API
|
|
156
|
+
curl --fail-with-body -sS --max-time 30 -X POST \
|
|
157
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
158
|
+
https://api.github.com/repos/owner/repo-name/forks
|
|
159
|
+
|
|
160
|
+
# Wait a moment for GitHub to create it, then clone
|
|
161
|
+
sleep 3
|
|
162
|
+
git clone https://github.com/$GH_USER/repo-name.git
|
|
163
|
+
cd repo-name
|
|
164
|
+
|
|
165
|
+
# Add the original repo as "upstream" remote
|
|
166
|
+
git remote add upstream https://github.com/owner/repo-name.git
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Keeping a Fork in Sync
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
# Pure git — works everywhere
|
|
173
|
+
git fetch upstream
|
|
174
|
+
# Return to the recorded original branch only when the worktree permits; do not auto-switch.
|
|
175
|
+
git merge upstream/main
|
|
176
|
+
git push origin main
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
**With gh (shortcut):**
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
gh repo sync $GH_USER/repo-name
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## 4. Repository Information
|
|
186
|
+
|
|
187
|
+
**With gh:**
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
gh repo view owner/repo-name
|
|
191
|
+
gh repo list --limit 20
|
|
192
|
+
gh search repos "machine learning" --language python --sort stars
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**With curl:**
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
# View repo details
|
|
199
|
+
python3 "$SKILL_ROOT/scripts/github-api.py" https://api.github.com/repos/$OWNER/$REPO \
|
|
200
|
+
| python -c "
|
|
201
|
+
import sys, json
|
|
202
|
+
r = json.load(sys.stdin)
|
|
203
|
+
print(f\"Name: {r['full_name']}\")
|
|
204
|
+
print(f\"Description: {r['description']}\")
|
|
205
|
+
print(f\"Stars: {r['stargazers_count']} Forks: {r['forks_count']}\")
|
|
206
|
+
print(f\"Default branch: {r['default_branch']}\")
|
|
207
|
+
print(f\"Language: {r['language']}\")"
|
|
208
|
+
|
|
209
|
+
# List your repos
|
|
210
|
+
python3 "$SKILL_ROOT/scripts/github-api.py" "https://api.github.com/user/repos?per_page=20&sort=updated" \
|
|
211
|
+
| python -c "
|
|
212
|
+
import sys, json
|
|
213
|
+
for r in json.load(sys.stdin):
|
|
214
|
+
vis = 'private' if r['private'] else 'public'
|
|
215
|
+
print(f\" {r['full_name']:40} {vis:8} {r.get('language', ''):10} ★{r['stargazers_count']}\")"
|
|
216
|
+
|
|
217
|
+
# Search repos
|
|
218
|
+
curl --fail-with-body -sS --max-time 30 \
|
|
219
|
+
"https://api.github.com/search/repositories?q=machine+learning+language:python&sort=stars&per_page=10" \
|
|
220
|
+
| python -c "
|
|
221
|
+
import sys, json
|
|
222
|
+
for r in json.load(sys.stdin)['items']:
|
|
223
|
+
print(f\" {r['full_name']:40} ★{r['stargazers_count']:6} {r['description'][:60] if r['description'] else ''}\")"
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## 5. Repository Settings
|
|
227
|
+
|
|
228
|
+
**With gh:**
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
gh repo edit --description "Updated description" --visibility public
|
|
232
|
+
gh repo edit --enable-wiki=false --enable-issues=true
|
|
233
|
+
gh repo edit --default-branch main
|
|
234
|
+
gh repo edit --add-topic "machine-learning,python"
|
|
235
|
+
gh repo edit --enable-auto-merge
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**With curl:**
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
curl --fail-with-body -sS --max-time 30 -X PATCH \
|
|
242
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
243
|
+
https://api.github.com/repos/$OWNER/$REPO \
|
|
244
|
+
-d '{
|
|
245
|
+
"description": "Updated description",
|
|
246
|
+
"has_wiki": false,
|
|
247
|
+
"has_issues": true,
|
|
248
|
+
"allow_auto_merge": true
|
|
249
|
+
}'
|
|
250
|
+
|
|
251
|
+
# Update topics
|
|
252
|
+
curl --fail-with-body -sS --max-time 30 -X PUT \
|
|
253
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
254
|
+
-H "Accept: application/vnd.github.mercy-preview+json" \
|
|
255
|
+
https://api.github.com/repos/$OWNER/$REPO/topics \
|
|
256
|
+
-d '{"names": ["machine-learning", "python", "automation"]}'
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## 6. Branch Protection
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
# View current protection
|
|
263
|
+
python3 "$SKILL_ROOT/scripts/github-api.py" https://api.github.com/repos/$OWNER/$REPO/branches/main/protection
|
|
264
|
+
|
|
265
|
+
# Set up branch protection
|
|
266
|
+
curl --fail-with-body -sS --max-time 30 -X PUT \
|
|
267
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
268
|
+
https://api.github.com/repos/$OWNER/$REPO/branches/main/protection \
|
|
269
|
+
-d '{
|
|
270
|
+
"required_status_checks": {
|
|
271
|
+
"strict": true,
|
|
272
|
+
"contexts": ["ci/test", "ci/lint"]
|
|
273
|
+
},
|
|
274
|
+
"enforce_admins": false,
|
|
275
|
+
"required_pull_request_reviews": {
|
|
276
|
+
"required_approving_review_count": 1
|
|
277
|
+
},
|
|
278
|
+
"restrictions": null
|
|
279
|
+
}'
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## 7. Secrets Management (GitHub Actions)
|
|
283
|
+
|
|
284
|
+
**With gh:**
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
gh secret set API_KEY --body "your-secret-value"
|
|
288
|
+
gh secret set SSH_KEY < ~/.ssh/id_rsa
|
|
289
|
+
gh secret list
|
|
290
|
+
gh secret delete API_KEY
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**With curl:**
|
|
294
|
+
|
|
295
|
+
Secrets require encryption with the repo's public key — more involved via API:
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
# Get the repo's public key for encrypting secrets
|
|
299
|
+
python3 "$SKILL_ROOT/scripts/github-api.py" https://api.github.com/repos/$OWNER/$REPO/actions/secrets/public-key
|
|
300
|
+
|
|
301
|
+
# Encrypt and set (requires Python with PyNaCl)
|
|
302
|
+
python -c "
|
|
303
|
+
from base64 import b64encode
|
|
304
|
+
from nacl import encoding, public
|
|
305
|
+
import json, sys
|
|
306
|
+
|
|
307
|
+
# Get the public key
|
|
308
|
+
key_id = '<key_id_from_above>'
|
|
309
|
+
public_key = '<base64_key_from_above>'
|
|
310
|
+
|
|
311
|
+
# Encrypt
|
|
312
|
+
sealed = public.SealedBox(
|
|
313
|
+
public.PublicKey(public_key.encode('utf-8'), encoding.Base64Encoder)
|
|
314
|
+
).encrypt('your-secret-value'.encode('utf-8'))
|
|
315
|
+
print(json.dumps({
|
|
316
|
+
'encrypted_value': b64encode(sealed).decode('utf-8'),
|
|
317
|
+
'key_id': key_id
|
|
318
|
+
}))"
|
|
319
|
+
|
|
320
|
+
# Then PUT the encrypted secret
|
|
321
|
+
curl --fail-with-body -sS --max-time 30 -X PUT \
|
|
322
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
323
|
+
https://api.github.com/repos/$OWNER/$REPO/actions/secrets/API_KEY \
|
|
324
|
+
-d '<output from python script above>'
|
|
325
|
+
|
|
326
|
+
# List secrets (names only, values hidden)
|
|
327
|
+
python3 "$SKILL_ROOT/scripts/github-api.py" https://api.github.com/repos/$OWNER/$REPO/actions/secrets \
|
|
328
|
+
| python -c "
|
|
329
|
+
import sys, json
|
|
330
|
+
for s in json.load(sys.stdin)['secrets']:
|
|
331
|
+
print(f\" {s['name']:30} updated: {s['updated_at']}\")"
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
Note: For secrets, `gh secret set` is dramatically simpler. If setting secrets is needed and `gh` isn't available, recommend installing it for just that operation.
|
|
335
|
+
|
|
336
|
+
## 8. Releases
|
|
337
|
+
|
|
338
|
+
**With gh:**
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
gh release create v1.0.0 --title "v1.0.0" --generate-notes
|
|
342
|
+
gh release create v2.0.0-rc1 --draft --prerelease --generate-notes
|
|
343
|
+
gh release create v1.0.0 ./dist/binary --title "v1.0.0" --notes "Release notes"
|
|
344
|
+
gh release list
|
|
345
|
+
gh release download v1.0.0 --dir ./downloads
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
**With curl:**
|
|
349
|
+
|
|
350
|
+
```bash
|
|
351
|
+
# Create a release
|
|
352
|
+
curl --fail-with-body -sS --max-time 30 -X POST \
|
|
353
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
354
|
+
https://api.github.com/repos/$OWNER/$REPO/releases \
|
|
355
|
+
-d '{
|
|
356
|
+
"tag_name": "v1.0.0",
|
|
357
|
+
"name": "v1.0.0",
|
|
358
|
+
"body": "## Changelog\n- Feature A\n- Bug fix B",
|
|
359
|
+
"draft": false,
|
|
360
|
+
"prerelease": false,
|
|
361
|
+
"generate_release_notes": true
|
|
362
|
+
}'
|
|
363
|
+
|
|
364
|
+
# List releases
|
|
365
|
+
python3 "$SKILL_ROOT/scripts/github-api.py" https://api.github.com/repos/$OWNER/$REPO/releases \
|
|
366
|
+
| python -c "
|
|
367
|
+
import sys, json
|
|
368
|
+
for r in json.load(sys.stdin):
|
|
369
|
+
tag = r.get('tag_name', 'no tag')
|
|
370
|
+
print(f\" {tag:15} {r['name']:30} {'draft' if r['draft'] else 'published'}\")"
|
|
371
|
+
|
|
372
|
+
# Upload a release asset (binary file)
|
|
373
|
+
RELEASE_ID=<id_from_create_response>
|
|
374
|
+
curl --fail-with-body -sS --max-time 30 -X POST \
|
|
375
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
376
|
+
-H "Content-Type: application/octet-stream" \
|
|
377
|
+
"https://uploads.github.com/repos/$OWNER/$REPO/releases/$RELEASE_ID/assets?name=binary-amd64" \
|
|
378
|
+
--data-binary @./dist/binary-amd64
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
## 9. GitHub Actions Workflows
|
|
382
|
+
|
|
383
|
+
**With gh:**
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
gh workflow list
|
|
387
|
+
gh run list --limit 10
|
|
388
|
+
gh run view <RUN_ID>
|
|
389
|
+
gh run view <RUN_ID> --log-failed
|
|
390
|
+
gh run rerun <RUN_ID>
|
|
391
|
+
gh run rerun <RUN_ID> --failed
|
|
392
|
+
gh workflow run ci.yml --ref main
|
|
393
|
+
gh workflow run deploy.yml -f environment=staging
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
**With curl:**
|
|
397
|
+
|
|
398
|
+
```bash
|
|
399
|
+
# List workflows
|
|
400
|
+
python3 "$SKILL_ROOT/scripts/github-api.py" https://api.github.com/repos/$OWNER/$REPO/actions/workflows \
|
|
401
|
+
| python -c "
|
|
402
|
+
import sys, json
|
|
403
|
+
for w in json.load(sys.stdin)['workflows']:
|
|
404
|
+
print(f\" {w['id']:10} {w['name']:30} {w['state']}\")"
|
|
405
|
+
|
|
406
|
+
# List recent runs
|
|
407
|
+
python3 "$SKILL_ROOT/scripts/github-api.py" "https://api.github.com/repos/$OWNER/$REPO/actions/runs?per_page=10" \
|
|
408
|
+
| python -c "
|
|
409
|
+
import sys, json
|
|
410
|
+
for r in json.load(sys.stdin)['workflow_runs']:
|
|
411
|
+
print(f\" Run {r['id']} {r['name']:30} {r['conclusion'] or r['status']}\")"
|
|
412
|
+
|
|
413
|
+
# Download failed run logs
|
|
414
|
+
RUN_ID=<run_id>
|
|
415
|
+
curl --fail-with-body -sS --max-time 30 -L \
|
|
416
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
417
|
+
https://api.github.com/repos/$OWNER/$REPO/actions/runs/$RUN_ID/logs \
|
|
418
|
+
-o ~/.hermes/cache/scratch/ci-logs.zip
|
|
419
|
+
cd ~/.hermes/cache/scratch && unzip -o ci-logs.zip -d ci-logs
|
|
420
|
+
|
|
421
|
+
# Re-run a failed workflow
|
|
422
|
+
curl --fail-with-body -sS --max-time 30 -X POST \
|
|
423
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
424
|
+
https://api.github.com/repos/$OWNER/$REPO/actions/runs/$RUN_ID/rerun
|
|
425
|
+
|
|
426
|
+
# Re-run only failed jobs
|
|
427
|
+
curl --fail-with-body -sS --max-time 30 -X POST \
|
|
428
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
429
|
+
https://api.github.com/repos/$OWNER/$REPO/actions/runs/$RUN_ID/rerun-failed-jobs
|
|
430
|
+
|
|
431
|
+
# Trigger a workflow manually (workflow_dispatch)
|
|
432
|
+
WORKFLOW_ID=<workflow_id_or_filename>
|
|
433
|
+
curl --fail-with-body -sS --max-time 30 -X POST \
|
|
434
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
435
|
+
https://api.github.com/repos/$OWNER/$REPO/actions/workflows/$WORKFLOW_ID/dispatches \
|
|
436
|
+
-d '{"ref": "main", "inputs": {"environment": "staging"}}'
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
## 10. Gists
|
|
440
|
+
|
|
441
|
+
**With gh:**
|
|
442
|
+
|
|
443
|
+
```bash
|
|
444
|
+
gh gist create script.py --desc "Useful script"
|
|
445
|
+
gh gist list
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
**With curl:**
|
|
449
|
+
|
|
450
|
+
```bash
|
|
451
|
+
# Create a gist
|
|
452
|
+
curl --fail-with-body -sS --max-time 30 -X POST \
|
|
453
|
+
-H "Authorization: token $GITHUB_TOKEN" \
|
|
454
|
+
https://api.github.com/gists \
|
|
455
|
+
-d '{
|
|
456
|
+
"description": "Useful script",
|
|
457
|
+
"public": false,
|
|
458
|
+
"files": {
|
|
459
|
+
"script.py": {"content": "print(\"hello\")"}
|
|
460
|
+
}
|
|
461
|
+
}'
|
|
462
|
+
|
|
463
|
+
# List your gists
|
|
464
|
+
python3 "$SKILL_ROOT/scripts/github-api.py" https://api.github.com/gists \
|
|
465
|
+
| python -c "
|
|
466
|
+
import sys, json
|
|
467
|
+
for g in json.load(sys.stdin):
|
|
468
|
+
files = ', '.join(g['files'].keys())
|
|
469
|
+
print(f\" {g['id']} {g['description'] or '(no desc)':40} {files}\")"
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
## Quick Reference Table
|
|
473
|
+
|
|
474
|
+
| Action | gh | git + curl |
|
|
475
|
+
|--------|-----|-----------|
|
|
476
|
+
| Clone | `gh repo clone o/r` | `git clone https://github.com/o/r.git` |
|
|
477
|
+
| Create repo | `gh repo create name --private` | `curl POST /user/repos` |
|
|
478
|
+
| Fork | `gh repo fork o/r --clone` | `curl POST /repos/o/r/forks` + `git clone` |
|
|
479
|
+
| Repo info | `gh repo view o/r` | `curl GET /repos/o/r` |
|
|
480
|
+
| Edit settings | `gh repo edit --...` | `curl PATCH /repos/o/r` |
|
|
481
|
+
| Create release | `gh release create v1.0` | `curl POST /repos/o/r/releases` |
|
|
482
|
+
| List workflows | `gh workflow list` | `curl GET /repos/o/r/actions/workflows` |
|
|
483
|
+
| Rerun CI | `gh run rerun ID` | `curl POST /repos/o/r/actions/runs/ID/rerun` |
|
|
484
|
+
| Set secret | `gh secret set KEY` | `curl PUT /repos/o/r/actions/secrets/KEY` (+ encryption) |
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Review Output Template
|
|
2
|
+
|
|
3
|
+
> Prismer scope: read auth.md first. All mutations below are examples for an
|
|
4
|
+
> explicitly authorized target/action, never an automatic checklist. Preserve the
|
|
5
|
+
> current dirty tree and long-lived branch; resolve the actual base branch and
|
|
6
|
+
> do not switch, commit, push, publish, merge, delete branches or send reviews
|
|
7
|
+
> unless requested. Use structured JSON for dynamic payloads, not shell string
|
|
8
|
+
> interpolation. Public visibility requires explicit intent. Collection reads
|
|
9
|
+
> must use scripts/github-api.py (complete Link pagination) or gh api --paginate;
|
|
10
|
+
> porcelain list limits and single-page curl output are not a complete inventory.
|
|
11
|
+
> Run shell pipelines with pipefail, record each exit status, and read back writes.
|
|
12
|
+
|
|
13
|
+
Use this as the structure for PR review summary comments. Copy and fill in the sections.
|
|
14
|
+
|
|
15
|
+
## For PR Summary Comment
|
|
16
|
+
|
|
17
|
+
```markdown
|
|
18
|
+
## Code Review Summary
|
|
19
|
+
|
|
20
|
+
**Verdict: [Approved ✅ | Changes Requested 🔴 | Reviewed 💬]** ([N] issues, [N] suggestions)
|
|
21
|
+
|
|
22
|
+
**PR:** #[number] — [title]
|
|
23
|
+
**Author:** @[username]
|
|
24
|
+
**Files changed:** [N] (+[additions] -[deletions])
|
|
25
|
+
|
|
26
|
+
### 🔴 Critical
|
|
27
|
+
<!-- Issues that MUST be fixed before merge -->
|
|
28
|
+
- **file.py:line** — [description]. Suggestion: [fix].
|
|
29
|
+
|
|
30
|
+
### ⚠️ Warnings
|
|
31
|
+
<!-- Issues that SHOULD be fixed, but not strictly blocking -->
|
|
32
|
+
- **file.py:line** — [description].
|
|
33
|
+
|
|
34
|
+
### 💡 Suggestions
|
|
35
|
+
<!-- Non-blocking improvements, style preferences, future considerations -->
|
|
36
|
+
- **file.py:line** — [description].
|
|
37
|
+
|
|
38
|
+
### ✅ Looks Good
|
|
39
|
+
<!-- Call out things done well — positive reinforcement -->
|
|
40
|
+
- [aspect that was done well]
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
*Reviewed by Hermes Agent*
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Severity Guide
|
|
47
|
+
|
|
48
|
+
| Level | Icon | When to use | Blocks merge? |
|
|
49
|
+
|-------|------|-------------|---------------|
|
|
50
|
+
| Critical | 🔴 | Security vulnerabilities, data loss risk, crashes, broken core functionality | Yes |
|
|
51
|
+
| Warning | ⚠️ | Bugs in non-critical paths, missing error handling, missing tests for new code | Usually yes |
|
|
52
|
+
| Suggestion | 💡 | Style improvements, refactoring ideas, performance hints, documentation gaps | No |
|
|
53
|
+
| Looks Good | ✅ | Clean patterns, good test coverage, clear naming, smart design decisions | N/A |
|
|
54
|
+
|
|
55
|
+
## Verdict Decision
|
|
56
|
+
|
|
57
|
+
- **Approved ✅** — Zero critical/warning items. Only suggestions or all clear.
|
|
58
|
+
- **Changes Requested 🔴** — Any critical or warning item exists.
|
|
59
|
+
- **Reviewed 💬** — Observations only (draft PRs, uncertain findings, informational).
|
|
60
|
+
|
|
61
|
+
## For Inline Comments
|
|
62
|
+
|
|
63
|
+
Prefix inline comments with the severity icon so they're scannable:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
🔴 **Critical:** User input passed directly to SQL query — use parameterized queries to prevent injection.
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
⚠️ **Warning:** This error is silently swallowed. At minimum, log it.
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
💡 **Suggestion:** This could be simplified with a dict comprehension:
|
|
75
|
+
`{k: v for k, v in items if v is not None}`
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
✅ **Nice:** Good use of context manager here — ensures cleanup on exceptions.
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## For Local (Pre-Push) Review
|
|
83
|
+
|
|
84
|
+
When reviewing locally before push, use the same structure but present it as a message to the user instead of a PR comment. Skip the PR metadata header and just start with the severity sections.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Install missing gh; verify version and authentication independently."""
|
|
3
|
+
import argparse
|
|
4
|
+
import hashlib
|
|
5
|
+
import io
|
|
6
|
+
import json
|
|
7
|
+
import os
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
import platform
|
|
10
|
+
import re
|
|
11
|
+
import shutil
|
|
12
|
+
import subprocess
|
|
13
|
+
import tarfile
|
|
14
|
+
import stat
|
|
15
|
+
import zipfile
|
|
16
|
+
import urllib.request
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def run_command(argv):
|
|
20
|
+
try:
|
|
21
|
+
return subprocess.run(argv, capture_output=True, text=True, timeout=600, check=False)
|
|
22
|
+
except (OSError, subprocess.TimeoutExpired):
|
|
23
|
+
return subprocess.CompletedProcess(argv, 1, '', 'unavailable or timed out')
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def download(url, limit):
|
|
27
|
+
with urllib.request.urlopen(url, timeout=30) as response:
|
|
28
|
+
data = response.read(limit + 1)
|
|
29
|
+
if len(data) > limit:
|
|
30
|
+
raise ValueError('download exceeds limit')
|
|
31
|
+
return data
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def install_binary(system, fetch=download):
|
|
35
|
+
"""Official release plus SHA256; extract only one regular executable."""
|
|
36
|
+
arch = {'x86_64': 'amd64', 'amd64': 'amd64', 'aarch64': 'arm64', 'arm64': 'arm64'}.get(platform.machine().lower())
|
|
37
|
+
if system not in ('Linux', 'Darwin') or not arch:
|
|
38
|
+
raise ValueError('unsupported host architecture')
|
|
39
|
+
release = json.loads(fetch('https://api.github.com/repos/cli/cli/releases/latest', 2_000_000))
|
|
40
|
+
tag = release.get('tag_name', '') if isinstance(release, dict) else ''
|
|
41
|
+
if not re.fullmatch(r'v2\.\d+\.\d+', tag):
|
|
42
|
+
raise ValueError('unrecognized stable release')
|
|
43
|
+
version = tag[1:]
|
|
44
|
+
stem = f"gh_{version}_{'linux' if system == 'Linux' else 'macOS'}_{arch}"
|
|
45
|
+
name = stem + ('.tar.gz' if system == 'Linux' else '.zip')
|
|
46
|
+
base = f'https://github.com/cli/cli/releases/download/{tag}/'
|
|
47
|
+
sums = fetch(base + f'gh_{version}_checksums.txt', 200_000).decode('ascii')
|
|
48
|
+
expected = [line.split()[0] for line in sums.splitlines() if len(line.split()) == 2 and line.split()[1] == name]
|
|
49
|
+
if len(expected) != 1 or not re.fullmatch('[0-9a-fA-F]{64}', expected[0]):
|
|
50
|
+
raise ValueError('missing release checksum')
|
|
51
|
+
archive = fetch(base + name, 50_000_000)
|
|
52
|
+
if hashlib.sha256(archive).hexdigest() != expected[0].lower():
|
|
53
|
+
raise ValueError('checksum mismatch')
|
|
54
|
+
if system == 'Darwin':
|
|
55
|
+
with zipfile.ZipFile(io.BytesIO(archive)) as zipped:
|
|
56
|
+
members = [m for m in zipped.infolist() if m.filename == stem + '/bin/gh']
|
|
57
|
+
if (len(members) != 1 or members[0].is_dir() or
|
|
58
|
+
stat.S_ISLNK(members[0].external_attr >> 16) or members[0].file_size > 100_000_000):
|
|
59
|
+
raise ValueError('unexpected executable entry')
|
|
60
|
+
data = zipped.read(members[0])
|
|
61
|
+
else:
|
|
62
|
+
with tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar:
|
|
63
|
+
members = [m for m in tar.getmembers() if m.name == stem + '/bin/gh']
|
|
64
|
+
if len(members) != 1 or not members[0].isfile() or members[0].size > 100_000_000:
|
|
65
|
+
raise ValueError('unexpected executable entry')
|
|
66
|
+
data = tar.extractfile(members[0]).read(100_000_001)
|
|
67
|
+
target = Path.home() / '.local' / 'bin' / 'gh'
|
|
68
|
+
target.parent.mkdir(parents=True, exist_ok=True)
|
|
69
|
+
with target.open('xb') as handle:
|
|
70
|
+
handle.write(data)
|
|
71
|
+
target.chmod(0o755)
|
|
72
|
+
return str(target)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def ensure(run=run_command, binary_installer=install_binary, check_only=False, host='github.com'):
|
|
76
|
+
if not re.fullmatch(r'[A-Za-z0-9](?:[A-Za-z0-9.-]*[A-Za-z0-9])?', host):
|
|
77
|
+
return {'state': 'invalid-host', 'installed': False, 'authenticated': False}
|
|
78
|
+
executable = find_gh()
|
|
79
|
+
result = {'state': 'missing', 'installed': False, 'authenticated': False, 'host': host}
|
|
80
|
+
if not executable:
|
|
81
|
+
if check_only:
|
|
82
|
+
return result
|
|
83
|
+
system = platform.system()
|
|
84
|
+
brew = shutil.which('brew') if system in ('Darwin', 'Linux') else None
|
|
85
|
+
winget = shutil.which('winget') if system == 'Windows' else None
|
|
86
|
+
command = ([brew, 'install', 'gh'] if brew else
|
|
87
|
+
[winget, 'install', '--id', 'GitHub.cli', '--exact', '--source', 'winget', '--silent', '--disable-interactivity'] if winget else None)
|
|
88
|
+
try:
|
|
89
|
+
if command:
|
|
90
|
+
if run(command).returncode:
|
|
91
|
+
return {**result, 'state': 'install-failed'}
|
|
92
|
+
executable = find_gh() or 'gh'
|
|
93
|
+
else:
|
|
94
|
+
executable = binary_installer(system)
|
|
95
|
+
except (OSError, ValueError, KeyError, tarfile.TarError, zipfile.BadZipFile):
|
|
96
|
+
return {**result, 'state': 'install-failed'}
|
|
97
|
+
version = run([executable, '--version'])
|
|
98
|
+
match = re.search(r'^gh version (\d+)\.(\d+)\.(\d+)\b', version.stdout, re.MULTILINE)
|
|
99
|
+
if version.returncode or not match or int(match[1]) < 2:
|
|
100
|
+
return {**result, 'state': 'version-check-failed', 'executable': executable}
|
|
101
|
+
result.update(installed=True, executable=executable, version=match[0])
|
|
102
|
+
auth = run([executable, 'auth', 'status', '--hostname', host])
|
|
103
|
+
result.update(authenticated=auth.returncode == 0,
|
|
104
|
+
state='ready-for-repository-check' if auth.returncode == 0 else 'authentication-required')
|
|
105
|
+
return result
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def find_gh():
|
|
109
|
+
found = shutil.which('gh')
|
|
110
|
+
if found:
|
|
111
|
+
return found
|
|
112
|
+
candidates = [Path.home() / '.local/bin/gh']
|
|
113
|
+
if platform.system() == 'Windows':
|
|
114
|
+
if os.environ.get('ProgramFiles'):
|
|
115
|
+
candidates.append(Path(os.environ['ProgramFiles']) / 'GitHub CLI/gh.exe')
|
|
116
|
+
if os.environ.get('LOCALAPPDATA'):
|
|
117
|
+
candidates.append(Path(os.environ['LOCALAPPDATA']) / 'Microsoft/WinGet/Links/gh.exe')
|
|
118
|
+
return next((str(p) for p in candidates if p.is_file()), None)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def main():
|
|
122
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
123
|
+
parser.add_argument('--check-only', action='store_true')
|
|
124
|
+
parser.add_argument('--host', default='github.com')
|
|
125
|
+
args = parser.parse_args()
|
|
126
|
+
result = ensure(check_only=args.check_only, host=args.host)
|
|
127
|
+
print(json.dumps(result))
|
|
128
|
+
return 0 if result['authenticated'] else 1
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
if __name__ == '__main__':
|
|
132
|
+
raise SystemExit(main())
|