@prismer/runtime 2.2.55 → 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 +574 -0
- package/apc/skills/releasing-test/SKILL.md +9 -0
- package/built-in-skills/agent-coordination/SKILL.md +21 -4
- package/built-in-skills/agent-meta/SKILL.md +11 -0
- package/built-in-skills/assets/SKILL.md +1 -1
- package/built-in-skills/canvas-design/SKILL.md +3 -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 +7 -3
- package/built-in-skills/claude-api/SKILL.md +1 -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/SKILL.md +15 -1
- 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 +3 -0
- package/built-in-skills/council-creator/SKILL.md +4 -3
- package/built-in-skills/diagnosing-bugs/SKILL.md +12 -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/doc-coauthoring/SKILL.md +6 -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/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 +6 -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/image-generate/SKILL.md +5 -0
- package/built-in-skills/image-generate/scripts/generate-and-deliver.mjs +24 -3
- 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 +27 -3
- 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 +8 -15
- 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 +20 -0
- package/built-in-skills/office-artifacts/references/RESOURCE-LIMITS.md +44 -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/persona-generator/SKILL.md +9 -9
- package/built-in-skills/pkf-svg/SKILL.md +5 -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 +36 -14
- 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 +1 -1
- 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/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 +7 -1
- package/built-in-skills/role-builder/scripts/author-role.mjs +23 -7
- package/built-in-skills/role-builder/scripts/ingest-role.mjs +15 -117
- package/built-in-skills/role-builder/scripts/instantiate-and-run.mjs +15 -1
- package/built-in-skills/role-builder/scripts/operation-harness.mjs +6 -4
- 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 +20 -1
- 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/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-authoring/SKILL.md → skill-creator/references/skill-authoring/GUIDE.md} +1 -1
- package/built-in-skills/{skill-builder/SKILL.md → skill-creator/references/skill-builder/GUIDE.md} +8 -12
- 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 +30 -7
- 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/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 +2 -2
- package/built-in-skills/tdd/SKILL.md +7 -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/team/SKILL.md +1 -1
- package/built-in-skills/web-artifacts-builder/SKILL.md +3 -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 +9 -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/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 +7017 -3340
- package/dist/cli.js +6631 -2936
- package/dist/index.cjs +7863 -3830
- package/dist/index.d.cts +459 -5
- package/dist/index.d.ts +459 -5
- package/dist/index.js +7106 -3064
- package/package.json +7 -2
- package/plugins/memory/prismer/__init__.py +4 -0
- package/plugins/memory/prismer/tool-schemas.generated.json +8 -0
- package/built-in-skills/skill-builder/scripts/ingest.mjs +0 -265
- package/built-in-skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- /package/built-in-skills/{document-generation/SKILL.md → office-artifacts/references/document-generation/GUIDE.md} +0 -0
- /package/built-in-skills/{skill-authoring/skill.json → skill-creator/references/skill-authoring/draft-contract.json} +0 -0
|
@@ -652,19 +652,27 @@
|
|
|
652
652
|
let feedbackMap = {}; // run_id -> feedback text
|
|
653
653
|
let currentIndex = 0;
|
|
654
654
|
let visitedRuns = new Set();
|
|
655
|
+
let reviewComplete = false;
|
|
656
|
+
let saveQueue = Promise.resolve();
|
|
657
|
+
function postFeedback(payload) {
|
|
658
|
+
saveQueue = saveQueue.catch(() => {}).then(async () => {
|
|
659
|
+
const response = await fetch('/api/feedback', {
|
|
660
|
+
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
661
|
+
body: JSON.stringify(payload),
|
|
662
|
+
});
|
|
663
|
+
if (!response.ok) throw new Error('Feedback save failed');
|
|
664
|
+
});
|
|
665
|
+
return saveQueue;
|
|
666
|
+
}
|
|
655
667
|
|
|
656
668
|
// ---- Init ----
|
|
657
669
|
async function init() {
|
|
658
|
-
//
|
|
659
|
-
|
|
660
|
-
// previous feedback exists, the feedback.json on disk is stale from
|
|
661
|
-
// the prior iteration and should not pre-fill the textareas.
|
|
662
|
-
const hasPrevious = Object.keys(EMBEDDED_DATA.previous_feedback || {}).length > 0
|
|
663
|
-
|| Object.keys(EMBEDDED_DATA.previous_outputs || {}).length > 0;
|
|
664
|
-
if (!hasPrevious) {
|
|
670
|
+
// Current workspace feedback is distinct from previous-workspace context.
|
|
671
|
+
{
|
|
665
672
|
try {
|
|
666
673
|
const resp = await fetch("/api/feedback");
|
|
667
674
|
const data = await resp.json();
|
|
675
|
+
reviewComplete = data.status === 'complete';
|
|
668
676
|
if (data.reviews) {
|
|
669
677
|
for (const r of data.reviews) feedbackMap[r.run_id] = r.feedback;
|
|
670
678
|
}
|
|
@@ -678,6 +686,7 @@
|
|
|
678
686
|
const textarea = document.getElementById("feedback");
|
|
679
687
|
let saveTimeout = null;
|
|
680
688
|
textarea.addEventListener("input", () => {
|
|
689
|
+
reviewComplete = false;
|
|
681
690
|
clearTimeout(saveTimeout);
|
|
682
691
|
document.getElementById("feedback-status").textContent = "";
|
|
683
692
|
saveTimeout = setTimeout(() => saveCurrentFeedback(), 800);
|
|
@@ -803,6 +812,7 @@
|
|
|
803
812
|
content.appendChild(img);
|
|
804
813
|
} else if (file.type === "pdf") {
|
|
805
814
|
const iframe = document.createElement("iframe");
|
|
815
|
+
iframe.setAttribute('sandbox', '');
|
|
806
816
|
iframe.src = file.data_uri;
|
|
807
817
|
content.appendChild(iframe);
|
|
808
818
|
} else if (file.type === "xlsx") {
|
|
@@ -844,10 +854,18 @@
|
|
|
844
854
|
container.appendChild(sheetLabel);
|
|
845
855
|
}
|
|
846
856
|
|
|
847
|
-
const
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
857
|
+
const table = document.createElement('table');
|
|
858
|
+
// Cell values and hyperlinks are untrusted; never insert workbook HTML.
|
|
859
|
+
for (const row of XLSX.utils.sheet_to_json(ws, { header: 1, defval: '' })) {
|
|
860
|
+
const tr = document.createElement('tr');
|
|
861
|
+
for (const value of row) {
|
|
862
|
+
const td = document.createElement('td');
|
|
863
|
+
td.textContent = String(value);
|
|
864
|
+
tr.appendChild(td);
|
|
865
|
+
}
|
|
866
|
+
table.appendChild(tr);
|
|
867
|
+
}
|
|
868
|
+
container.appendChild(table);
|
|
851
869
|
}
|
|
852
870
|
} catch (err) {
|
|
853
871
|
container.textContent = "Error rendering spreadsheet: " + err.message;
|
|
@@ -963,6 +981,7 @@
|
|
|
963
981
|
fc.appendChild(img);
|
|
964
982
|
} else if (file.type === "pdf") {
|
|
965
983
|
const iframe = document.createElement("iframe");
|
|
984
|
+
iframe.setAttribute('sandbox', '');
|
|
966
985
|
iframe.src = file.data_uri;
|
|
967
986
|
fc.appendChild(iframe);
|
|
968
987
|
} else if (file.type === "xlsx") {
|
|
@@ -992,6 +1011,7 @@
|
|
|
992
1011
|
|
|
993
1012
|
// ---- Feedback (saved to server -> feedback.json) ----
|
|
994
1013
|
function saveCurrentFeedback() {
|
|
1014
|
+
if (reviewComplete) return;
|
|
995
1015
|
const run = EMBEDDED_DATA.runs[currentIndex];
|
|
996
1016
|
const text = document.getElementById("feedback").value;
|
|
997
1017
|
|
|
@@ -1009,11 +1029,7 @@
|
|
|
1009
1029
|
}
|
|
1010
1030
|
}
|
|
1011
1031
|
|
|
1012
|
-
|
|
1013
|
-
method: "POST",
|
|
1014
|
-
headers: { "Content-Type": "application/json" },
|
|
1015
|
-
body: JSON.stringify({ reviews, status: "in_progress" }),
|
|
1016
|
-
}).then(() => {
|
|
1032
|
+
postFeedback({ reviews, status: 'in_progress' }).then(() => {
|
|
1017
1033
|
document.getElementById("feedback-status").textContent = "Saved";
|
|
1018
1034
|
}).catch(() => {
|
|
1019
1035
|
// Static mode or server unavailable — no-op on auto-save,
|
|
@@ -1041,11 +1057,8 @@
|
|
|
1041
1057
|
reviews.push({ run_id: r.id, feedback: feedbackMap[r.id] || "", timestamp: ts });
|
|
1042
1058
|
}
|
|
1043
1059
|
const payload = JSON.stringify({ reviews, status: "complete" }, null, 2);
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
headers: { "Content-Type": "application/json" },
|
|
1047
|
-
body: payload,
|
|
1048
|
-
}).then(() => {
|
|
1060
|
+
reviewComplete = true;
|
|
1061
|
+
postFeedback({ reviews, status: 'complete' }).then(() => {
|
|
1049
1062
|
document.getElementById("done-overlay").classList.add("visible");
|
|
1050
1063
|
}).catch(() => {
|
|
1051
1064
|
// Server not available (static mode) — download as file
|
|
@@ -1061,8 +1074,7 @@
|
|
|
1061
1074
|
}
|
|
1062
1075
|
|
|
1063
1076
|
function closeDoneDialog() {
|
|
1064
|
-
//
|
|
1065
|
-
saveCurrentFeedback();
|
|
1077
|
+
// Closing the acknowledgement does not reopen a completed review.
|
|
1066
1078
|
document.getElementById("done-overlay").classList.remove("visible");
|
|
1067
1079
|
}
|
|
1068
1080
|
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hermes-agent-skill-authoring
|
|
3
|
+
description: "Author in-repo SKILL.md files: frontmatter and structure."
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
author: Hermes Agent
|
|
6
|
+
license: MIT
|
|
7
|
+
platforms: [linux, macos, windows]
|
|
8
|
+
metadata:
|
|
9
|
+
hermes:
|
|
10
|
+
tags: [skills, authoring, hermes-agent, conventions, skill-md]
|
|
11
|
+
related_skills: [requesting-code-review]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Authoring Hermes-Agent Skills (in-repo)
|
|
15
|
+
|
|
16
|
+
> Prismer adaptation: this reference describes Hermes-specific standards, not
|
|
17
|
+
> the Prismer catalog schema. Resolve the actual repository root before using
|
|
18
|
+
> any relative path. Hermes tools and directories apply only inside a verified
|
|
19
|
+
> Hermes checkout. Never stage, commit, publish, or restore files automatically.
|
|
20
|
+
> Preserve every pre-existing change. Usage-frequency thresholds below are
|
|
21
|
+
> upstream guidance, not evidence for deleting existing Prismer skills.
|
|
22
|
+
|
|
23
|
+
## Overview
|
|
24
|
+
|
|
25
|
+
There are two places a SKILL.md can live:
|
|
26
|
+
|
|
27
|
+
1. **User-local:** `~/.hermes/skills/<maybe-category>/<name>/SKILL.md` — personal, not shared. Created via `skill_manage(action='create')`.
|
|
28
|
+
2. **In-repo (this skill is about this case):** `skills/<category>/<name>/SKILL.md` or `optional-skills/<category>/<name>/SKILL.md` inside the hermes-agent repo — committed, shipped with the package. Use the available file-editing tool; stage only on explicit user request. `skill_manage(action='create')` does NOT target this tree.
|
|
29
|
+
|
|
30
|
+
In-repo skills must meet the repo's **hardline authoring standards** (see AGENTS.md, "Skill authoring standards (HARDLINE)" — that section is the source of truth; this skill is the operational walkthrough). Reviewers reject PRs that violate them, so meeting them up front is cheaper than a salvage pass later.
|
|
31
|
+
|
|
32
|
+
## When to Use
|
|
33
|
+
|
|
34
|
+
- User asks you to add a skill "in this branch / repo / commit"
|
|
35
|
+
- You're committing a reusable workflow that should ship with hermes-agent
|
|
36
|
+
- You're editing an existing skill under `skills/` or `optional-skills/` (use `patch` for small edits, `write_file` for rewrites; `skill_manage` still works for patch on in-repo skills, but not for `create`)
|
|
37
|
+
- Don't use for: personal skills in `~/.hermes/skills/` (just use `skill_manage`)
|
|
38
|
+
|
|
39
|
+
## Decide the Tier First: Bundled vs Optional
|
|
40
|
+
|
|
41
|
+
- **Bundled (`skills/<category>/`)** — daily-driver behavior, broadly useful across many user types, low footprint. Hard bar: you can say "a user will load this in 5+ sessions per month" with a straight face.
|
|
42
|
+
- **Optional (`optional-skills/<category>/`)** — niche, vertical-specific (blockchain, gaming, finance, one app), recurring-job/task skills, or anything heavy. Installed via `hermes skills install official/<category>/<skill>`.
|
|
43
|
+
|
|
44
|
+
**When in doubt, optional.** Promoting later is easy; demoting is churn. "Would be useful to anyone who ever needs this" is an optional-tier argument, not a bundled one.
|
|
45
|
+
|
|
46
|
+
Pick the category by what the tool IS, not what it feels like (an AI-agent CLI goes in `autonomous-ai-agents/` even if it "feels productivity"). Confirm existing categories with `search_files(pattern='*', target='files', path='skills')` and don't invent new top-level categories casually.
|
|
47
|
+
|
|
48
|
+
**No router / index / hub skills.** A skill whose core content is a routing table pointing at sibling skills adds an indirection hop and duplicates the siblings' own `When to Use` triggers. If the skill would be empty without "load skill X instead" pointers, don't write it — the catalog and each sibling's triggers already do that job.
|
|
49
|
+
|
|
50
|
+
## Required Frontmatter
|
|
51
|
+
|
|
52
|
+
Validator source of truth: `tools/skill_manager_tool.py::_validate_frontmatter`. Validator hard requirements:
|
|
53
|
+
|
|
54
|
+
- Starts with `---` as the first bytes (no leading blank line).
|
|
55
|
+
- Closes with `\n---\n` before the body.
|
|
56
|
+
- Parses as a YAML mapping.
|
|
57
|
+
- `name` field present.
|
|
58
|
+
- `description` field present (validator ceiling 1024 chars — but see the repo hardline below, which is much stricter).
|
|
59
|
+
- Non-empty body after the closing `---`.
|
|
60
|
+
|
|
61
|
+
Repo-standard shape (all fields expected, even where the validator doesn't enforce them):
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
---
|
|
65
|
+
name: my-skill-name # lowercase, hyphens, ≤64 chars (MAX_NAME_LENGTH)
|
|
66
|
+
description: Concise capability statement, under sixty chars.
|
|
67
|
+
version: 0.1.0 # semver; new skills start at 0.1.0
|
|
68
|
+
author: Real Name (github-handle), Hermes Agent
|
|
69
|
+
license: MIT
|
|
70
|
+
platforms: [linux, macos, windows] # audit, don't guess — see Platform Gating
|
|
71
|
+
metadata:
|
|
72
|
+
hermes:
|
|
73
|
+
tags: [Short, Descriptive, Tags]
|
|
74
|
+
related_skills: [other-in-repo-skill]
|
|
75
|
+
---
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### `description` rules (HARDLINE — the validator's 1024 is NOT the standard)
|
|
79
|
+
|
|
80
|
+
- **≤ 60 characters.** One sentence. Ends with a period.
|
|
81
|
+
- State the capability, not the implementation, and don't repeat the skill name.
|
|
82
|
+
- No marketing words ("powerful", "comprehensive", "seamless", "advanced").
|
|
83
|
+
- The system prompt skill index truncates at 57 chars + "..." — the trigger/capability must be self-contained in that window.
|
|
84
|
+
- If the description contains a `:`, wrap it in double quotes or YAML parses it as a mapping and the docs generator crashes. Quotes don't count toward the 60.
|
|
85
|
+
|
|
86
|
+
Good: `Track named companies for material news with cited digests.`
|
|
87
|
+
Bad: `Use when a user asks to monitor named competitors or companies for product launches, pricing changes, funding, ...` (240 chars — rejected in review)
|
|
88
|
+
|
|
89
|
+
### `author` rules
|
|
90
|
+
|
|
91
|
+
- Credit the **human first**, then "Hermes Agent" as secondary collaborator: `Ben Barclay (benbarclay), Hermes Agent`.
|
|
92
|
+
- Never `author: Hermes Agent` alone for contributed skills — credit the human, not the tool, even (especially) when an agent drafted the text.
|
|
93
|
+
- Maintainer-authored skills: `Teknium (teknium1), Hermes Agent`.
|
|
94
|
+
|
|
95
|
+
### `related_skills` rules
|
|
96
|
+
|
|
97
|
+
- Every entry must resolve to an existing **in-repo** skill in the same tree state as your PR. Do not reference skills that were only planned, live in another PR, or exist only in `~/.hermes/skills/`.
|
|
98
|
+
- Verify each entry: `search_files(pattern='<name>', target='files', path='skills')` (and `optional-skills/`).
|
|
99
|
+
|
|
100
|
+
## Platform Gating: audit, don't trust
|
|
101
|
+
|
|
102
|
+
`platforms:` gates loading by host OS. Set it from what the skill's prose and scripts actually invoke:
|
|
103
|
+
|
|
104
|
+
| Skill uses only… | `platforms:` |
|
|
105
|
+
|---|---|
|
|
106
|
+
| Hermes tools + stdlib Python + cross-platform CLIs | `[linux, macos, windows]` |
|
|
107
|
+
| bash pipelines, `grep`/`awk`/`sed` chains, heredocs | `[linux, macos]` |
|
|
108
|
+
| `osascript`, `defaults`, `pmset` | `[macos]` |
|
|
109
|
+
| `apt`/`systemctl`/`/proc` | `[linux]` |
|
|
110
|
+
|
|
111
|
+
<!-- no-tmp: ok — names the anti-pattern skill authors must avoid -->
|
|
112
|
+
POSIX-only signals to search for in `scripts/`: `fcntl`, `termios`, `pty`, `os.fork`, `os.killpg`, `signal.SIGKILL`, `os.kill(pid, 0)` liveness checks, hardcoded `/tmp` `/proc` `/etc`. Default posture: fix cross-platform first (`tempfile.gettempdir()`, `pathlib.Path`, `psutil.pid_exists`); gate narrower only when the dependency is genuinely platform-bound, and say why in `## Pitfalls`.
|
|
113
|
+
|
|
114
|
+
## Size Limits
|
|
115
|
+
|
|
116
|
+
- Full SKILL.md: ≤ 100,000 chars enforced (`MAX_SKILL_CONTENT_CHARS`), but target **~100 lines for a simple skill, ~200 for a complex one**. Peer skills sit at 8-14k chars.
|
|
117
|
+
- Bulky or branch-specific material goes in `references/*.md`, `templates/`, or `scripts/` — pointed to from SKILL.md, not inlined.
|
|
118
|
+
- Don't expect the model to inline-write parsers or non-trivial logic every call — ship a helper script in `scripts/` and reference it by path.
|
|
119
|
+
|
|
120
|
+
## Body Structure (modern section order)
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
# <Skill> Skill
|
|
124
|
+
2-3 sentence intro: what it does, what it doesn't do, dependency stance.
|
|
125
|
+
|
|
126
|
+
## When to Use — bulleted triggers (+ "Don't use for:" counter-triggers)
|
|
127
|
+
## Prerequisites — exact env vars, installs, API key sourcing
|
|
128
|
+
## How to Run — canonical invocation through the `terminal` tool
|
|
129
|
+
## Quick Reference — flat command list, no narration
|
|
130
|
+
## Procedure — numbered steps, each with a checkable completion criterion
|
|
131
|
+
## Pitfalls — known limits, things that look broken but aren't
|
|
132
|
+
## Verification — how to prove the skill worked
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Not every section applies to every skill (a pure-procedure task skill may have no Quick Reference), but When to Use + actionable body + Pitfalls + Verification are the minimum. Cut marketing intros, "Setup Check" no-ops, and re-explanations of env vars already in Prerequisites.
|
|
136
|
+
|
|
137
|
+
### Reference Hermes tools, not raw shell
|
|
138
|
+
|
|
139
|
+
When the skill needs a capability, name the proper Hermes tool in backticks: `terminal`, `read_file`, `write_file`, `patch`, `search_files`, `web_search`, `web_extract`, `browser_navigate`, `vision_analyze`, `delegate_task`, `cronjob`. Do NOT name shell utilities the agent already has wrapped (`grep` → `search_files`, `cat` → `read_file`, `sed`/`awk` → `patch`, `find`/`ls` → `search_files target='files'`). A CLI-wrapper skill should frame invocations as `terminal(command="<tool> ...", timeout=...)` — bare shell prose ("run `foo --version`") is a review-blocking non-conformance. If the skill depends on an MCP server, name it and document setup in Prerequisites.
|
|
140
|
+
|
|
141
|
+
### Never use machine-local paths
|
|
142
|
+
|
|
143
|
+
Write repo-relative paths (`skills/...`, `tools/skill_manager_tool.py`). A `/home/<you>/...` path baked into a committed skill breaks for every other user and is an instant review flag.
|
|
144
|
+
|
|
145
|
+
## Writing Quality Principles
|
|
146
|
+
|
|
147
|
+
A skill exists to make the agent's process more predictable — the agent reliably follows the same useful discipline.
|
|
148
|
+
|
|
149
|
+
1. **Optimize for process predictability.** If a line does not change behavior, cut it.
|
|
150
|
+
2. **Choose the right context load.** The description is paid for every turn; details go in the body or linked references.
|
|
151
|
+
3. **End steps with completion criteria.** Checkable and, when it matters, exhaustive: "every modified file accounted for" beats "summarize changes."
|
|
152
|
+
4. **Co-locate rules with the concept they govern.**
|
|
153
|
+
5. **Use strong leading words** ("tight loop," "root cause," "regression test") over long repeated explanations.
|
|
154
|
+
6. **Prune duplication and no-ops.** "Be careful" and "use best practices" don't change model behavior — replace with a checkable criterion or delete.
|
|
155
|
+
|
|
156
|
+
## Tests and Docs (required for repo skills)
|
|
157
|
+
|
|
158
|
+
1. **Tests** live at `tests/skills/test_<skill>_skill.py` — stdlib + pytest + `unittest.mock` only, no live network. Run via `scripts/run_tests.sh tests/skills/test_<skill>_skill.py -q`. (The generic `tests/tools/test_skill_manager_tool.py` passing proves nothing about YOUR skill.)
|
|
159
|
+
2. **Docs regen:** run `python website/scripts/generate-skill-docs.py`, then apply scope discipline — the generator rewrites EVERY auto-gen page. run the generator in an isolated temporary checkout and copy only the intended generated files back after comparing with the current worktree; never restore unrelated changes; the final diff must show only your SKILL.md, your one per-skill docs page, a one-line catalog row, and a one-line `website/sidebars.ts` insertion (verify with `search_files(pattern='<your-slug>', path='website/sidebars.ts')` — exactly one hit, or the page is an orphan).
|
|
160
|
+
3. **`.env.example`** (only if the skill needs new env vars): one clearly delimited commented block; touch nothing else in the file.
|
|
161
|
+
|
|
162
|
+
## Workflow
|
|
163
|
+
|
|
164
|
+
1. **Survey peers** in the target category with `search_files(target='files')` and read 2-3 peer SKILL.md files to match tone and structure. Prefer extending an existing skill over creating a narrow sibling.
|
|
165
|
+
2. **Decide tier and category** (see above). When in doubt, optional — and ask before pushing rather than defaulting.
|
|
166
|
+
3. **Draft** with `write_file` to `skills/<category>/<name>/SKILL.md` (or `optional-skills/...`).
|
|
167
|
+
4. **Validate locally**:
|
|
168
|
+
```python
|
|
169
|
+
import yaml, re, pathlib
|
|
170
|
+
content = pathlib.Path("skills/<category>/<name>/SKILL.md").read_text()
|
|
171
|
+
assert content.startswith("---")
|
|
172
|
+
m = re.search(r'\n---\s*\n', content[3:])
|
|
173
|
+
fm = yaml.safe_load(content[3:m.start()+3])
|
|
174
|
+
assert "name" in fm and "description" in fm
|
|
175
|
+
assert len(fm["description"]) <= 60, f"description {len(fm['description'])} chars — hardline is 60"
|
|
176
|
+
assert fm["description"].endswith(".")
|
|
177
|
+
assert "platforms" in fm
|
|
178
|
+
assert len(content) <= 100_000
|
|
179
|
+
```
|
|
180
|
+
Also verify every `related_skills` entry exists in-repo.
|
|
181
|
+
5. **Add tests + regen docs** (previous section).
|
|
182
|
+
6. **Review the scoped diff** on the active branch. Stage, commit, or open a PR only when the user explicitly requests that operation.
|
|
183
|
+
7. **Note:** the CURRENT session's skill loader is cached — `skill_view` / `skills_list` will not see the new skill until a new session. This is expected, not a bug.
|
|
184
|
+
|
|
185
|
+
## Editing Existing In-Repo Skills
|
|
186
|
+
|
|
187
|
+
- **Small fix:** `skill_manage(action='patch', ...)` works on in-repo skills, as does `patch`.
|
|
188
|
+
- **Major rewrite:** `write_file` the whole SKILL.md.
|
|
189
|
+
- **Supporting files:** `write_file` to `references/`, `templates/`, or `scripts/` under the skill dir.
|
|
190
|
+
- **Review before commit** — in-repo skills are source, not runtime state. Never commit automatically. Regenerate docs in an isolated checkout when frontmatter changes.
|
|
191
|
+
|
|
192
|
+
## Common Pitfalls
|
|
193
|
+
|
|
194
|
+
1. **Using `skill_manage(action='create')` for an in-repo skill.** It writes to `~/.hermes/skills/`, not the repo tree. Use `write_file`.
|
|
195
|
+
2. **Trusting the validator's limits as the standard.** The validator allows 1024-char descriptions; review rejects anything over 60. The validator doesn't check `platforms:`, author format, tests, or docs — review does.
|
|
196
|
+
3. **`author: Hermes Agent` on a contributed skill.** Credit the human first.
|
|
197
|
+
4. **Leading whitespace before `---`.** Validation fails on any leading blank line or BOM.
|
|
198
|
+
5. **Description too generic or trigger buried past char 57.**
|
|
199
|
+
6. **`related_skills` pointing at skills that don't exist in-repo** (user-local, planned, or in a sibling PR).
|
|
200
|
+
7. **Duplicating a peer.** Survey the category first; extend rather than sibling.
|
|
201
|
+
8. **Skipping the docs generator or pushing its unrelated drift.** Both directions are wrong: no regen = orphan skill with no docs page; blind regen = a ballooned diff full of other skills' drift.
|
|
202
|
+
9. **Expecting the current session to see the new skill.** The loader is initialized at session start.
|
|
203
|
+
10. **Letting skills accumulate sediment.** When adding a rule, remove the old wording it replaces.
|
|
204
|
+
|
|
205
|
+
## Verification Checklist
|
|
206
|
+
|
|
207
|
+
- [ ] Tier decided deliberately; the upstream 5+ sessions/month heuristic must not be treated as measured usage or used to delete existing skills
|
|
208
|
+
- [ ] File at `skills/<category>/<name>/SKILL.md` or `optional-skills/<category>/<name>/SKILL.md`
|
|
209
|
+
- [ ] Frontmatter starts at byte 0 with `---`, closes with `\n---\n`
|
|
210
|
+
- [ ] `name`, `description`, `version`, `author`, `license`, `platforms`, `metadata.hermes.{tags, related_skills}` all present
|
|
211
|
+
- [ ] Description ≤ 60 chars, one sentence, ends with a period, no marketing words
|
|
212
|
+
- [ ] `author` credits the human contributor first
|
|
213
|
+
- [ ] `platforms:` audited against actual prose/scripts, not copied from a sibling
|
|
214
|
+
- [ ] Every `related_skills` entry resolves in-repo
|
|
215
|
+
- [ ] Body follows the modern section order; commands framed through Hermes tools
|
|
216
|
+
- [ ] No machine-local paths anywhere in the file
|
|
217
|
+
- [ ] Each ordered step has a checkable completion criterion
|
|
218
|
+
- [ ] Tests at `tests/skills/test_<skill>_skill.py` pass under `scripts/run_tests.sh`
|
|
219
|
+
- [ ] Docs regenerated with scope discipline; sidebar has exactly one entry for the slug
|
|
220
|
+
- [ ] Scoped diff verified; any staging, commit, or PR explicitly authorized by the user
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Nous Research
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -130,5 +130,5 @@ blocking failure. Run the same checks locally first (or just `cloud skill valida
|
|
|
130
130
|
## Reference
|
|
131
131
|
|
|
132
132
|
- The skill author (use this): `built-in-skills/skill-creator/SKILL.md`
|
|
133
|
-
- Direct-publish tier: `built-in-skills/skill-builder/
|
|
133
|
+
- Direct-publish tier: `built-in-skills/skill-creator/references/skill-builder/GUIDE.md`
|
|
134
134
|
- Bundle + catalog contract: `public/docs/Standardization/01-skill-standard.md` (SS-01)
|
package/built-in-skills/{skill-builder/SKILL.md → skill-creator/references/skill-builder/GUIDE.md}
RENAMED
|
@@ -85,21 +85,17 @@ cloud skill create ./<slug> --install --json
|
|
|
85
85
|
# POST /api/im/skills (+ install). Reads api key from prismer config.
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
The legacy script entrypoint is retained as a Cloud CLI adapter. It requires
|
|
89
|
+
`cloud` on PATH (or `PRISMER_CLOUD_BIN` pointing to the current build):
|
|
90
90
|
|
|
91
91
|
```bash
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
# Credentials come from the injected environment, never literal command text.
|
|
93
|
+
node references/skill-builder/scripts/ingest.mjs ./<slug> --install
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
(`sha256(sorted("<path>:<sha256(bytes)>").join("\n"))`), `POST`s to
|
|
100
|
-
`/api/im/skills` with `Authorization: Bearer $PRISMER_API_KEY`, and on
|
|
101
|
-
`--install` follows with `POST /api/im/skills/:slug/install`. Both paths only
|
|
102
|
-
need an **API key** (`authMiddleware` accepts `sk-prismer-*` as a Bearer token).
|
|
96
|
+
The adapter delegates frontmatter parsing, complete resource/NOTICE inclusion,
|
|
97
|
+
manifest hashing and install error handling to `cloud skill create`. It does
|
|
98
|
+
not perform raw HTTP fallback or implement a separate YAML parser.
|
|
103
99
|
|
|
104
100
|
If `cloud` is present but `skill create` is missing, that is CLI version skew,
|
|
105
101
|
not permission to bypass the lifecycle. Report `cloud --version` and use the
|
|
@@ -166,6 +162,6 @@ administrator"); an admin must reinstate it first.
|
|
|
166
162
|
|
|
167
163
|
- The skill author (use this): `built-in-skills/skill-creator/SKILL.md`
|
|
168
164
|
- Bundle + catalog contract: `public/docs/Standardization/01-skill-standard.md` (SS-01)
|
|
169
|
-
- Draft-gated tier: `built-in-skills/skill-authoring/
|
|
165
|
+
- Draft-gated tier: `built-in-skills/skill-creator/references/skill-authoring/GUIDE.md`
|
|
170
166
|
- Role side: `built-in-skills/role-builder/SKILL.md` (SS-02)
|
|
171
167
|
- Post-publish endpoint contract: `docs/api/publish-lifecycle.md` (product204/21)
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// skill-builder ingest — material→bundle→live catalog, via SDK + API key.
|
|
3
|
+
//
|
|
4
|
+
// Zero runtime dependencies (Node ≥18 built-ins only). Reads a SS-01 skill
|
|
5
|
+
// bundle directory, parses SKILL.md frontmatter, builds an SS-01 contentManifest
|
|
6
|
+
// with a server-matching merkle revision, and POSTs it to the real catalog
|
|
7
|
+
// endpoint authenticated with an `sk-prismer-*` API key.
|
|
8
|
+
//
|
|
9
|
+
// Usage:
|
|
10
|
+
// PRISMER_API_KEY=sk-prismer-... [PRISMER_CLOUD_BASE=http://127.0.0.1:3000] \
|
|
11
|
+
// node scripts/ingest.mjs <bundle-dir> [--install] [--agent <imUserId>] [--json]
|
|
12
|
+
//
|
|
13
|
+
// Env:
|
|
14
|
+
// PRISMER_API_KEY (required) Bearer token; admin not required for skill create.
|
|
15
|
+
// PRISMER_CLOUD_BASE (default http://127.0.0.1:3000) cloud base URL.
|
|
16
|
+
|
|
17
|
+
import { spawnSync } from 'node:child_process';
|
|
18
|
+
|
|
19
|
+
function die(msg, code = 1) {
|
|
20
|
+
console.error(`[skill-builder] ✗ ${msg}`);
|
|
21
|
+
process.exit(code);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const args = process.argv.slice(2);
|
|
25
|
+
const secretOptions = new Set(['--api-key', '--token', '--jwt', '--secret', '--password']);
|
|
26
|
+
let bundleDir;
|
|
27
|
+
let wantInstall = false;
|
|
28
|
+
let asJson = false;
|
|
29
|
+
let agentId;
|
|
30
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
31
|
+
const arg = args[index];
|
|
32
|
+
const equalsAt = arg.indexOf('=');
|
|
33
|
+
const option = equalsAt === -1 ? arg : arg.slice(0, equalsAt);
|
|
34
|
+
if (secretOptions.has(option)) {
|
|
35
|
+
die(`${option} is forbidden; credentials must come from environment variables`, 2);
|
|
36
|
+
}
|
|
37
|
+
if (arg === '--install') {
|
|
38
|
+
wantInstall = true;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (arg === '--json') {
|
|
42
|
+
asJson = true;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (arg === '--agent') {
|
|
46
|
+
const value = args[index + 1];
|
|
47
|
+
if (!value || value.startsWith('--')) die('--agent requires an imUserId', 2);
|
|
48
|
+
agentId = value;
|
|
49
|
+
index += 1;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (arg.startsWith('--')) die(`unknown argument at position ${index + 1}`, 2);
|
|
53
|
+
if (bundleDir) die('only one bundle directory may be supplied', 2);
|
|
54
|
+
bundleDir = arg;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const API_KEY = process.env.PRISMER_API_KEY;
|
|
58
|
+
const BASE = (process.env.PRISMER_CLOUD_BASE || 'http://127.0.0.1:3000').replace(/\/$/, '');
|
|
59
|
+
|
|
60
|
+
if (!bundleDir) die('usage: node ingest.mjs <bundle-dir> [--install] [--agent <imUserId>] [--json]');
|
|
61
|
+
if (!API_KEY) die('PRISMER_API_KEY env is required (sk-prismer-*)');
|
|
62
|
+
let target;
|
|
63
|
+
try {
|
|
64
|
+
target = new URL(BASE);
|
|
65
|
+
} catch {
|
|
66
|
+
die('PRISMER_CLOUD_BASE must be a valid URL', 2);
|
|
67
|
+
}
|
|
68
|
+
if (
|
|
69
|
+
!['http:', 'https:'].includes(target.protocol) ||
|
|
70
|
+
target.username ||
|
|
71
|
+
target.password ||
|
|
72
|
+
target.search ||
|
|
73
|
+
target.hash || target.pathname !== '/'
|
|
74
|
+
) {
|
|
75
|
+
die('PRISMER_CLOUD_BASE must be a plain http(s) origin without credentials, query, or hash', 2);
|
|
76
|
+
}
|
|
77
|
+
const isLocalTarget = ['localhost', '127.0.0.1', '::1', 'host.docker.internal'].includes(target.hostname);
|
|
78
|
+
const allowRemote = ['1', 'true', 'yes'].includes(String(process.env.PRISMER_ALLOW_REMOTE_WRITE).toLowerCase());
|
|
79
|
+
if (!isLocalTarget && !allowRemote) {
|
|
80
|
+
die('remote mutation is blocked; set PRISMER_ALLOW_REMOTE_WRITE=1 after confirming the target environment', 2);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Keep the legacy entrypoint, but use the canonical structured parser and CLI.
|
|
84
|
+
const command = ['skill', 'create', bundleDir];
|
|
85
|
+
if (wantInstall) command.push('--install');
|
|
86
|
+
if (agentId) command.push('--agent', agentId);
|
|
87
|
+
if (asJson) command.push('--json');
|
|
88
|
+
const result = spawnSync(process.env.PRISMER_CLOUD_BIN || 'cloud', command, {
|
|
89
|
+
stdio: 'inherit', shell: false, timeout: 120_000,
|
|
90
|
+
env: { ...process.env, PRISMER_CLOUD_BASE: BASE },
|
|
91
|
+
});
|
|
92
|
+
if (result.error) die('Cloud CLI failed or timed out; inspect remote state before retrying', 5);
|
|
93
|
+
process.exitCode = result.status ?? 5;
|
|
@@ -150,7 +150,8 @@ def load_run_results(benchmark_dir: Path) -> dict:
|
|
|
150
150
|
metrics = grading.get("execution_metrics", {})
|
|
151
151
|
result["tool_calls"] = metrics.get("total_tool_calls", 0)
|
|
152
152
|
if not result.get("tokens"):
|
|
153
|
-
result["tokens"] = metrics.get("
|
|
153
|
+
result["tokens"] = metrics.get("total_tokens", 0)
|
|
154
|
+
result["output_chars"] = metrics.get("output_chars", 0)
|
|
154
155
|
result["errors"] = metrics.get("errors_encountered", 0)
|
|
155
156
|
|
|
156
157
|
# Extract expectations — viewer requires fields: text, passed, evidence
|
|
@@ -268,7 +269,7 @@ def generate_benchmark(benchmark_dir: Path, skill_name: str = "", skill_path: st
|
|
|
268
269
|
"analyzer_model": "<model-name>",
|
|
269
270
|
"timestamp": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
|
|
270
271
|
"evals_run": eval_ids,
|
|
271
|
-
"runs_per_configuration":
|
|
272
|
+
"runs_per_configuration": {config: len(entries) for config, entries in results.items()}
|
|
272
273
|
},
|
|
273
274
|
"runs": runs,
|
|
274
275
|
"run_summary": run_summary,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { createHash } from 'node:crypto';
|
|
4
|
-
import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, writeFileSync, openSync, closeSync, unlinkSync } from 'node:fs';
|
|
5
5
|
import { spawnSync } from 'node:child_process';
|
|
6
6
|
import { dirname, relative, resolve, sep } from 'node:path';
|
|
7
7
|
|
|
@@ -19,7 +19,7 @@ export class LibraryImportError extends Error {
|
|
|
19
19
|
const SECRET_OPTIONS = new Set(['--api-key', '--token', '--jwt', '--secret', '--password']);
|
|
20
20
|
const BOOLEAN_OPTIONS = new Set(['--json', '--preflight-only', '--help']);
|
|
21
21
|
const IGNORED_DIRECTORIES = new Set(['.git', '.prismer', 'node_modules']);
|
|
22
|
-
const BUNDLE_EXCLUDED_FILES = new Set(['.DS_Store', 'Thumbs.db'
|
|
22
|
+
const BUNDLE_EXCLUDED_FILES = new Set(['.DS_Store', 'Thumbs.db']);
|
|
23
23
|
|
|
24
24
|
function optionName(arg) {
|
|
25
25
|
const equalsAt = typeof arg === 'string' ? arg.indexOf('=') : -1;
|
|
@@ -96,7 +96,7 @@ export function loadLibraryImportConfig(argv, env = process.env) {
|
|
|
96
96
|
baseUrl.username ||
|
|
97
97
|
baseUrl.password ||
|
|
98
98
|
baseUrl.search ||
|
|
99
|
-
baseUrl.hash
|
|
99
|
+
baseUrl.hash || baseUrl.pathname !== '/'
|
|
100
100
|
) {
|
|
101
101
|
throw new LibraryImportError(
|
|
102
102
|
'local_validation',
|
|
@@ -122,6 +122,7 @@ export function loadLibraryImportConfig(argv, env = process.env) {
|
|
|
122
122
|
.filter(Boolean);
|
|
123
123
|
|
|
124
124
|
return {
|
|
125
|
+
credential: env.PRISMER_API_KEY?.trim() || '',
|
|
125
126
|
sourceRoot,
|
|
126
127
|
excludes,
|
|
127
128
|
cloudBin: env.PRISMER_CLOUD_BIN?.trim() || 'cloud',
|
|
@@ -163,6 +164,7 @@ function sourceRevision(config, directories) {
|
|
|
163
164
|
for (const entry of readdirSync(current, { withFileTypes: true })) {
|
|
164
165
|
if (entry.name.startsWith('.')) continue;
|
|
165
166
|
const absolute = resolve(current, entry.name);
|
|
167
|
+
if (entry.isSymbolicLink()) throw new LibraryImportError('local_validation', 'SYMLINK_RESOURCE', 'Bundle resources must not be symlinks', 2);
|
|
166
168
|
if (entry.isDirectory()) visit(absolute);
|
|
167
169
|
else files.push(absolute);
|
|
168
170
|
}
|
|
@@ -184,6 +186,7 @@ function bundleManifest(directory) {
|
|
|
184
186
|
for (const entry of readdirSync(current, { withFileTypes: true })) {
|
|
185
187
|
if (entry.name.startsWith('.')) continue;
|
|
186
188
|
const absolute = resolve(current, entry.name);
|
|
189
|
+
if (entry.isSymbolicLink()) throw new LibraryImportError('local_validation', 'SYMLINK_RESOURCE', 'Bundle resources must not be symlinks', 2);
|
|
187
190
|
if (entry.isDirectory()) visit(absolute);
|
|
188
191
|
else if (!BUNDLE_EXCLUDED_FILES.has(entry.name)) files.push(absolute);
|
|
189
192
|
}
|
|
@@ -249,7 +252,8 @@ function parseJsonOutput(result, stage) {
|
|
|
249
252
|
function defaultRunCloud(config, args) {
|
|
250
253
|
const result = spawnSync(config.cloudBin, args, {
|
|
251
254
|
encoding: 'utf8',
|
|
252
|
-
env: { ...process.env, PRISMER_CLOUD_BASE: config.baseUrl },
|
|
255
|
+
env: { ...process.env, PRISMER_CLOUD_BASE: config.baseUrl, PRISMER_API_KEY: config.credential },
|
|
256
|
+
timeout: 120_000,
|
|
253
257
|
shell: false,
|
|
254
258
|
});
|
|
255
259
|
if (result.error) {
|
|
@@ -270,7 +274,7 @@ function defaultRunCloud(config, args) {
|
|
|
270
274
|
|
|
271
275
|
function writeLedger(path, ledger) {
|
|
272
276
|
mkdirSync(dirname(path), { recursive: true });
|
|
273
|
-
const temporary = `${path}.tmp`;
|
|
277
|
+
const temporary = `${path}.${process.pid}.tmp`;
|
|
274
278
|
writeFileSync(temporary, `${JSON.stringify(ledger, null, 2)}\n`, { mode: 0o600 });
|
|
275
279
|
renameSync(temporary, path);
|
|
276
280
|
}
|
|
@@ -296,13 +300,27 @@ function safeCliFailure(result) {
|
|
|
296
300
|
}
|
|
297
301
|
|
|
298
302
|
export async function runLibraryImport(config, runCloud = defaultRunCloud) {
|
|
303
|
+
if (!config.credential) throw new LibraryImportError('local_validation', 'IDENTITY_REQUIRED', 'PRISMER_API_KEY is required to bind the ledger to the executing credential', 2);
|
|
304
|
+
mkdirSync(dirname(config.ledgerPath), { recursive: true });
|
|
305
|
+
const lockPath = `${config.ledgerPath}.lock`;
|
|
306
|
+
const lock = openSync(lockPath, 'wx', 0o600);
|
|
307
|
+
try {
|
|
308
|
+
return await runLibraryImportLocked(config, runCloud);
|
|
309
|
+
} finally {
|
|
310
|
+
closeSync(lock);
|
|
311
|
+
unlinkSync(lockPath);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
async function runLibraryImportLocked(config, runCloud) {
|
|
316
|
+
const targetBinding = sha256(JSON.stringify([config.baseUrl, config.credential]));
|
|
299
317
|
const directories = discoverSkillDirectories(config);
|
|
300
318
|
if (directories.length === 0) {
|
|
301
319
|
throw new LibraryImportError('local_validation', 'NO_SKILLS_FOUND', 'no root SKILL.md directories found', 2);
|
|
302
320
|
}
|
|
303
321
|
const revision = sourceRevision(config, directories);
|
|
304
322
|
const previous = readLedger(config.ledgerPath);
|
|
305
|
-
if (previous && (previous.sourceRoot !== config.sourceRoot || previous.sourceRevision !== revision)) {
|
|
323
|
+
if (previous && (previous.targetBinding !== targetBinding || previous.sourceRoot !== config.sourceRoot || previous.sourceRevision !== revision)) {
|
|
306
324
|
throw new LibraryImportError(
|
|
307
325
|
'local_validation',
|
|
308
326
|
'IMPORT_LEDGER_CONFLICT',
|
|
@@ -350,6 +368,7 @@ export async function runLibraryImport(config, runCloud = defaultRunCloud) {
|
|
|
350
368
|
}
|
|
351
369
|
|
|
352
370
|
const ledger = {
|
|
371
|
+
targetBinding,
|
|
353
372
|
schemaVersion: 1,
|
|
354
373
|
sourceRoot: config.sourceRoot,
|
|
355
374
|
sourceRevision: revision,
|
|
@@ -370,8 +389,12 @@ export async function runLibraryImport(config, runCloud = defaultRunCloud) {
|
|
|
370
389
|
if (config.preflightOnly) return ledger;
|
|
371
390
|
|
|
372
391
|
for (const row of rows) {
|
|
373
|
-
if (row.stage === 'verified') continue;
|
|
374
392
|
const directory = resolve(config.sourceRoot, row.sourcePath);
|
|
393
|
+
if (row.stage === 'verified') {
|
|
394
|
+
const current = await readbackOwnedBundle(config, row, directory, runCloud, row.canonicalSlug);
|
|
395
|
+
if (!current.ok) { row.stage = 'readback_failed'; row.error = current.error; }
|
|
396
|
+
continue;
|
|
397
|
+
}
|
|
375
398
|
const created = await runCloud(config, ['skill', 'create', directory, '--json']);
|
|
376
399
|
if (!created.ok) {
|
|
377
400
|
// A process may die after the server commits but before the ledger records
|